ビットコイン・インスティテュート

ビットコインv0.3.10 - オーバーフローバグの​緊急修正

定義: CVE-2010-5139 (2)

連なるブロックの図の中で1つのブロックが赤く強調され警告の斜線が引かれており、その上にはオーバーフローする計算式が示されている。下段には消えていく分岐と、パッチによって太く伸びていく分岐が描かれ、脇に警告三角マークとチェック入りの盾のアイコンが添えられている。

2010年8月15日、ビットコインの重大な脆弱性が悪用された。ブロック74638において、184,467,440,737.09554078BTC(約1,844億ビットコイン)を無から生成するトランザクションが作成されたのである。このバグはトランザクション出力チェックコードのバリュー・オーバーフローであった。2つの大きな出力の合計がオーバーフローして負の数になり、バリデーションチェックを通過してしまった。

サトシ・ナカモトはbitcoin-listメーリングリストに緊急アラートを発信した:

「*** 警告 *** 問題を調査中だ。問題が解決されるまで、2010年8月15日17:05 UTC(ブロック74638)以降に発生したトランザクションを一切信頼しないでほしい。」

数時間以内に、サトシはトランザクション出力値の適切なオーバーフローチェックを追加するパッチを含むビットコインv0.3.10をリリースした。修正はソフトフォークとしてデプロイされ、更新されたソフトウェアを実行するノードは無効なトランザクションとそれを含むチェーンを拒否した。大多数のマイナーが迅速にアップグレードしたため、正しいチェーン(オーバーフロートランザクションを含まない)が不正なブロックから約15時間後のブロック74691で無効なチェーンを追い越し、1,844億の不正なビットコインは存在しなくなった。

この事件は後に「バリュー・オーバーフロー事件」として知られるようになり、CVE-2010-5139が割り当てられた。

同じ緊急事態を別の角度から扱う関連エントリーが二つある。バリュー・オーバーフロー事件のエントリーはブロック74638とバグか悪用かという争点を記録した記述であり、構造的パラドックスの分析はこの5時間のソフトフォーク救済を、ビットコインの分散型設計が緊急時に中央集権的な権限へ依存する最初の可視的な事例として読み解く。