特別に細工された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 公開