完全な開示
9月18日にリリースされたBitcoin Coreバージョン0.16.3および0.17.0rc4で修正されたCVE-2018-17144には、サービス拒否コンポーネントと深刻なインフレーションの脆弱性の両方が含まれています。もともとBitcoin Coreに携わっている何人かの開発者や、9月17日にABCやUnlimitedなどの他の暗号通貨をサポートしているプロジェクトにサービス拒否のバグとして報告されていましたが、我々は問題が同じ根本的原因と対策を伴うインフレーションの脆弱性であることを直ちに判断しました。
迅速なアップグレードを促すために、深刻度の低いサービス拒否の脆弱性をすぐに修正し公表するとともに、同時にマイナーや企業、その他の影響を受けるシステムに連絡を取り、システムをアップグレードする時間を確保するため完全な問題の発表を遅らせる決定が下されました。
現時点では、Bitcoinのハッシュレートの半分以上がパッチがあてられたノードにアップグレードされたと考えています。この脆弱性を悪用しようとする試みは認識されていません。
ただし、影響を受けるユーザーはアップグレードを行い最新のパッチを適用し、大規模な再編成の可能性や無効なブロックのマイニング、無効なトランザクションの受け入れの発生が無いようにすることをは、依然として重要です。
技術的な詳細
Bitcoin Core 0.14では、2012年に(PR #443)で追加された1つのトランザクション内に同じインプットを2回使用していないかチェックする初期のリレー前ブロックの検証中に、コストのかかるチェックを回避する最適化が追加されました(Bitcoin Core PR #9049)。UTXOの更新ロジックはそのような条件が0.14で違反されていないことをチェックするのに十分な知識を持っていますが、完全なエラー処理ではなくサニティチェックアサーションでのみ行います(ただし0.8以前このケースを2回完全に処理しました)。
したがって、Bitcoin Core 0.14.Xでは、ブロック内の単一のトランザクション内でトランザクションアウトプットを二重使用しようとすると、報告されていたようにアサーションエラーとクラッシュが発生します。
Bitcoin Core 0.15では、未使用のトランザクションアウトプットの追跡を簡略化し、リソース枯渇攻撃への脆弱性を修正するための、より大きな再設計の一環としてアサーションが僅かに変更されました。アウトプットが未使用から使用済みにマークされたか検証する代わりに、存在するかどうか検証するだけになりました。
したがって、Bitcoin Core 0.15.X, 0.16.0, 0.16.1および0.16.2では、使用されているアウトプットを同じブロック内に作成されたブロック内の単一のトランザクション内で二重使用しようとすると、同じアサーションエラーが発生します(0.16.3のパッチに含まれているテストケースに存在します)。ただし、前のブロックで二重使用されたアウトプットが作成された場合でも、エントリーはDIRTYフラグがセットされたままCCoin mapに残っており、使用済みとマークされているため、アサーションは発生しません。これによりマイナーがBitcoinの供給量を増やすことが可能になり、増やした値で二重使用する可能性があります。
タイムライン
2018年9月17日のタイムライン:(時間はすべてUTC)
- 14:57 匿名の報告者がBitcoin CoreのPieter Wuille, Greg Maxwell, Wladimir Van Der Laan、Bitcoin ABCのdeadalnix、Bitcoin Unlimitedのsickpigにクラッシュバグを報告しています
- 15:15 Greg MaxwellはオリジナルのレポートをCory Fields, Suhas Daftuar, Alex MorcosおよびMatt Coralloに共有します
- 17:47 Matt Coralloはインフレーションバグを確認します
- 19:15 Matt Coralloは最初にslushpoolのCEOに連絡を取り、迅速なパッチ適用のためのコミュニケーションラインを開きます
- 19:29 Greg Maxwellはインフレーションの脆弱性を示すテストケースのハッシュをタイムスタンプします(a47344b7dceddff6c6cc1c7e97f1588d99e6dba706011b6ccc2e615b88fe4350)
- 20:15 John NewberyとJames O’Beirneはこの脆弱性を知らされているため、DoSの脆弱性に対する保留中のパッチを企業に知らせるのを支援します
- 20:30 Matt CoralloはslushpoolのCTOとCEOと話し合い、サービス拒否の開示とパッチを共有します
- 20:48 slushpoolのアップグレードが確認されました
- 21:08 パッチは22:00に公開されるというアラートがBitcoin ABCに送信されます
- 21:30頃、もともとの報告者に謝辞と共に応答しました
- 21:57 サービス拒否のバグのパッチ及びテストが含まれるBitcoin Core PR 14247が公開されました
- 21:58 Bitcoin ABCが彼らのパッチを公開します
- 22:07 Bitcoin Core PRとパッチを含むアドバイザリーメールがOptechメンバーなどにも公開されます
- 23:21 Bitcoin Core バージョン 0.17.0rc4 がタグ付けされました
2018年9月18日:
- 00:24 Bitcoin Core バージョン 0.16.3 がタグ付けされました
- 20:44 Bitcoin Coreのリリースバイナリとリリースの案内が利用可能になりました
- 21:47 Bitcointalk と reddit でアップグレードを促す公開バナーが貼られます
2018年9月19日:
- 14:06 Pieter Wuilleによってメーリングリストで、アップグレードを促す追加のメッセージが配信されます
2018年9月20日:
- 19:50 David Jaensonは単独でこの脆弱性を発見し、Bitcoin Coreのセキュリティコンタクトメールに報告されました