XRP Ledger、1000億枚の供給上限を揺るがしかねなかった10年来のバグを修正
XRP Ledgerの開発者らは10月9日、ネットワークの決済エンジンに存在した整数オーバーフローの脆弱性により、攻撃者が無から新たなXRPを生成し、2012年のローンチ時に設定された1000億枚の供給上限を破り得たと明らかにした。脆弱性は9月25日リリースのxrpld 3.4.1で修正済み。RippleXは公式の脆弱性開示報告書で、公開ネットワークで悪用された証拠は見つかっていないと述べた。バグは9月22日、XRPLバグ報奨プログラムを通じて研究者のCayden Liao氏とVeria AIが報告した。RippleXのエンジニアは単独サーバーで攻撃を再現し、新たに生成されたXRPが後続取引で使用可能なことを確認。所見の深刻度をmajorからcriticalに引き上げた。
バグがXRPを新規発行し得た仕組み
脆弱性は決済エンジンのオーバーフロー処理にあった。1件の支払いが台帳内蔵の取引所で多数のオファーを消費する際、ソフトウェアは買い手の支払額を64ビット整数の加算で合計し、オーバーフローチェックを欠いていた。数百件のオファーがそれぞれ極めて大量のXRPを要求すれば、合計は64ビット整数の上限を超え、小さな値にラップアラウンドする。各オファー提供者は全額を受け取る一方、買い手はラップ後の合計のみを支払うことになり、新規発行されたXRPが攻撃者のアカウントに残る。本来これを捉えるはずの2つの安全チェックは機能しなかった。台帳の「XRPは創出されない」不変条件も同じ方法で純残高変化を合計するため、同様にラップアラウンドし、異常を検知しなかった。アカウント別の残高チェックは、単一アカウントが総供給量を超えて保有した場合にのみ失敗するが、攻撃は新規発行XRPを数百のアカウントに分散してこれを回避した。
修正がアメンドメント手続きを飛ばした理由
XRP Ledgerの取引処理方法の変更は通常、アメンドメント手続きを経て導入される。新ルールは、信頼されたバリデータの80%超が2週間支持するまで休眠状態となる。RippleXは、導入から10年以上で初めてこの手続きを意図的に飛ばした。脆弱性の悪用は低コストで、特別なアクセス権も不要、かつ使用可能なXRPを発行し得たためだ。xrpldはオープンソースであるため、通常ルートで修正を公開すれば、数週間にわたりメインネット上で可視化される一方、依然として悪用可能な状態が続いた。この近道には、バージョン混在によるネットワーク停止のリスクもあったが、通常の取引が脆弱なコードパスに到達することはない。デフォルトUNLバリデータの80%超は、3.4.1のリリース当日、ソースコード公開前にすでに同バージョンを稼働させていた。
XRPの固定供給にとっての意味
今回の一件は、XRPの価値提案の多くが、供給量が証明可能な形で有限であることに依存していることを浮き彫りにした。1000億枚はすべてローンチ時に創出され、台帳上で構築する機関はこの上限を保証とみなしている。バグは現在の決済エンジンが書かれた2015年から存在していたが、RippleXは悪用された証拠を見つけていない。同じリリースでは、別のBatchトランザクションラッパーの検証不備も修正され、10月9日にメインネットで有効化された。RippleXは、修正済みとされたすべてのセキュリティ所見をリリース候補に対して再テストするため、リリースプロセスに再検証ステップを追加すると述べた。今回の開示は、XRP Ledgerが銀行向けの権限委譲やステーブルコインなど機関向け機能を拡充し続ける中で行われた。XRP保有者の間では供給とエスクローの動向が引き続き注目されている。