ビットコイン・コアの開発者が、マイナーが一部のビットコインノードを遠隔でクラッシュさせる可能性のある、高い重大度の不具合を開示した。
概要
- ビットコイン・コアはCVE-2024-52911を開示し、29.0より前のバージョンに影響しており、古いノードでも依然としてオンラインのままだった。
- クラッシュを引き起こすには高コストなプルーフ・オブ・ワークのブロックが必要で、攻撃者による現実での悪用は歴史的に起こりにくかった。
- Cory Fieldsは、パッチ済みソフトがビットコイン・コア29.0で出荷される前の2024年に、その不具合を非公開で報告した。
CVE-2024-52911として追跡されたこの問題は、0.14.0より後で29.0より前のビットコイン・コアのバージョンに影響した。バグは、2025年4月にリリースされたビットコイン・コア29.0で修正された。
ビットコイン・コアは、2026年5月5日にこの問題を公開した。脆弱な28.xの最終リリース系列が、4月19日に保守終了(end of life)に到達した後のことだ。
バグはブロック検証に影響
この問題は、ブロック検証中のビットコイン・コアのスクリプト・インタプリタに関係していた。ビットコイン・コアによると、細工されたブロックによって、ノードがすでに解放済みのデータの後にメモリへアクセスしてしまう可能性があった。
検証の際、ビットコイン・コアはトランザクション入力データを事前に計算し、スクリプトのチェックをバックグラウンドスレッドに送信する。場合によっては、無効なブロックがキャッシュデータを破壊し、別のスレッドがまだそれを読み取ろうとしてしまうことがあった。
ビットコイン・コアは、十分なプルーフ・オブ・ワークを持つ攻撃者が、被害を受けたノードをクラッシュさせられる可能性があると述べた。また「クラッシュがリモートコード実行を支援することも可能」だとも言ったが、ブロックデータの制約により、その結果は「起こりにくい」とした。
攻撃にはコストのかかる採掘が必要
この攻撃は簡単には実行できなかった。マイナーは、チェーン先端に到達するのに十分なプルーフ・オブ・ワークを備えた、特別に細工されたブロックを生成する必要があった。
そのため、その攻撃は高コストになった。なぜなら、そのようなブロックは無効になるからだ。通常のブロック報酬を獲得できず、攻撃者は通常のマイニング支払いを受け取ることなくハッシュパワーを費やすことになる。
ビットコイン・コアは、この不具合が実際の攻撃で使われたとは述べていない。アドバイザリは、その欠陥、修正、開示のタイムラインに焦点を当てた。
この不具合はビットコインのコンセンサスルールを変えなかった。これは、有効なビットコイン取引やブロックを定義するルールではなく、ビットコイン・コアのソフトウェアにおけるメモリの取り扱いに結びついていた。
Cory Fieldsが欠陥を報告
MITデジタル通貨イニシアチブのCory Fieldsは、2024年11月2日にその不具合を非公開で報告した。ビットコイン・コアは、その報告には概念実証(proof of concept)とリスクを減らすための提案が含まれていたと述べた。
Pieter Wuilleは4日後に、PR 31112を通じて秘匿の修正を押し込んだ。プルリクエストは2024年12月3日にマージされ、修正が2025年4月にビットコイン・コア29.0へ組み込まれる前だった。
このアドバイザリは、ビットコイン・コアの重大度が高い不具合に関する開示ポリシーに従っている。同ポリシーでは、高重大度の問題は、影響を受ける最後のリリースが保守終了(end of life)になった後に開示するとしている。
さらに、29.0より前のビットコイン・コアのバージョンを使っているノード運用者は、依然として旧来の不具合に直面する。ビットコイン・コアは自動アップデートしないため、ユーザーは新しいバージョンを手動でインストールする必要がある。
ブロックチェーンの分散化リスクに関する過去の報告では、2021年6月にビットコインノードの21%が古いビットコイン・コアのソフトウェアを動かしていたという、研究が引用されていた。この文脈から、修正が出荷されたずっと後でも、古いクライアントのバージョンがセキュリティ上の懸念として残り得る理由がわかる。