特別に細工されたINV
メッセージを受信すると、ノードは大量のメモリを強制的に割り当てざるを得なくなる可能性がありました。
これは、使用可能なメモリが少ないノードや接続数の多いノードで特に問題になります。
この問題の重大度は中です。
詳細
50,000個のブロック項目で満たされたINV
メッセージは、1回のProcessMessages()
呼び出しで、
50,000個のgetheaders
応答を送信する可能性があります。各応答は、ロケーターを含む約1kBです。
このすべてが一度に送信バッファに入れられます。
攻撃者はデータの受信を拒否するだけで、50MBのバッファが空になるのを防ぐことができます。
John Newberyは、受信したINV
毎に1つのGETHEADERS
を送信することによる帯域幅の増加を口実に、
この問題を修正するためのPR #18962を公開しました。
貢献
このバグを発見し、責任を持って開示し修正した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)がEOLになる
- 2024-07-03 公開