節點可能被迫在接收到特別建構的 INV 訊息時分配大量記憶體。對於可用記憶體很少或連線數量很大的節點來說,這是一個特別的問題。

此問題被認為是中等嚴重性。

細節

填充 50,000 個區塊項目的 INV 訊息可能導致在單個 ProcessMessages() 呼叫中傳送 50,000 個 getheaders 回應。每個回應包含一個定位器,約 1 kB。所有這些都會立即放入傳送緩衝區。攻擊者可以只是拒絕接收資料以防止 50 MB 緩衝區排空。

John Newbery 開啟 PR #18962 以修復此問題,假託從每個接收的 INV 傳送單個 GETHEADERS 可以獲得頻寬增益。

歸屬

感謝 John Newbery 發現此錯誤、負責任地披露它並修復它。

時間表

  • 2020-05-08 John Newbery 透過電子郵件報告他的發現
  • 2020-05-12 John Newbery 開啟 #18962
  • 2020-05-14 #18962 被合併
  • 2020-06-03 Bitcoin Core 版本 0.20.0 發布,包含修復程式
  • 2021-09-13 最後一個易受影響的 Bitcoin Core 版本(0.19.x)終止支援
  • 2024-07-03 公開披露。