ニュース暗号資産XRP Ledger、アカウントを負債状態に陥らえ得るバグを修正

XRP Ledger、アカウントを負債状態に陥らえ得るバグを修正

著者: Coindoo·

重要ポイント

  • •fixCleanup3_4_0 amendmentは11月4日14:52 UTC、検証済みレジャー108,112,129で有効化され、10月8日にPermissionDelegationV1_1のもとで委任機能が開始して以来続いていた脆弱性の期間を終わらせました。
  • •修正以前は、PaymentBurn権限のみを保持する委任者がアカウント残高を超える償還を送信でき、超過分は委任元アカウントが発行した負債トークンとして現れ、承認されていない債務が生じていました。
  • •この欠陥は、受け取り側の発行者が委任元アカウントのIOUを受け入れるトラストラインを開いていることを必要とし、ネイティブXRPは影響を受けず、マルチパーパストークン(MPT)は修正のテストでカバーされていない関連ケースとして挙げられました。
  • •このamendmentはバーン専任委任者の償還額に上限を設けますが、権限がカバーする通貨は制限しません。XRPLの細分権限は通貨単位で分割できないためです。
  • •Delegateレジャーエントリは公開されているため、レジャー108,112,129以前の悪用は、マイナスのトラストライン残高を残したバーン専任委任者による支払いを特定することでオンチェーンで確認できます。
XRP Ledger、アカウントを負債状態に陥らえ得るバグを修正

XRP Ledgerのバリデータは11月4日14:52 UTCにamendment fixCleanup3_4_0 を有効化し、委任されたトークンバーンがアカウントの残高をゼロを超えて減らせえる状態を約4週間にわたって解消しました。Coindooは検証済みレジャー108,112,129で有効化トランザクションを確認しており、Rippleの公開Mainnetサーバーも当該amendmentを有効と表示しています。

有効化は、10月末に一時的にスーパー多数派を失った投票を経て実現しました。この経緯はCoindooの有効化前レポートで追跡されています。同レポートには発行者に実行が推奨されたチェックリストが示されていました。今回の修正に含めてコミットされたコードとテストが答えるのは、より限定的な問い、すなわち超過分によって実際に誰のトークンが作られたのか、という点です。

ゼロ残高チェックが存在しなかった約4週間

XRPLのamendmentダッシュボードによると、委任機能は10月8日にPermissionDelegationV1_1 amendmentのもとで稼働しました。それから11月4日までの間、PaymentBurnを保持する委任者は、一定の構成では償還をゼロを超えて実行できました。そのためXRPLの権限リファレンスは、このamendmentが有効になるまで当該権限を委任しないよう助言していました。この条件は11月4日に満たされました。

修正の背景にあるrippledのコミットは、GitHubハンドルyinyiqian1名義で作成されたもので、欠けていたチェックを追加しています。委任者がPaymentBurnのみを保持する場合、レジャーは支払い額とアカウントが実際に保持する残高を比較し、残高を超える支払いを拒否します。XRPLのドキュメントではバーンはゼロで停止すると既に説明されていましたが、委任された支払いについては、このamendmentまでコードがその上限を強制していませんでした。

テストの内部:Alice、ゲートウェイ、過大な支払い

コミット内のテストは3つのアカウントを使用します。Aliceは、gatewayと呼ばれるアカウントが発行した50 USDを保持しています。gatewayは逆に、aliceが発行した最大200 USDを受け入れるトラストラインを開いており、コードのコメントはこれを「トラストラインがゼロに達した後に利用可能となる発行流動性」と支払いエンジンに与えるものと説明しています。

Aliceはさらに3つ目のアカウントであるbobにPaymentBurn権限を付与し、bobはaliceからgatewayへ、彼女の保有額の2倍の支払いを送金します。トレースは、各ルールのもとでレジャーがその支払いとその後のフォローアップをどのように処理したかを示しています。

旧ルール · PaymentBurnのみ

  • 100 USD:受理
  • Aliceの50が償還され、続いてalice発行の50 USDが作成
  • 最終状態:gatewayはalice発行の50 USDを保持

新ルール · PaymentBurnのみ

  • 100 USD:拒否
  • 20 USD:受理、残り30
  • 30 USD:受理、残高ゼロ
  • 1 USD:拒否

新ルール · PaymentBurn + PaymentMint

  • 100 USD:受理
  • ゼロを超える。ミントが許可されており、gatewayがaliceのIOUを受け入れるため

新たに作られたトークンはAliceの負債だった

旧ルールでは、支払いによってgatewayのUSDが追加されることはありませんでした。aliceに対するgatewayの債務は50からゼロに減少しました。代わりに現れたのは、aliceが発行しgatewayが保持する50 USDであり、aliceは償還のみを許可した委任者が署名した支払いによって、取引の最後に発行者への債務を負うことになりました。

レジャーはこれらを異なる2つの資産として扱います。XRPLの資産フォーマットドキュメントは、トラストライントークンを通貨コードと発行アカウントによって識別するため、aliceのUSDとgatewayのUSDはコードを共有しても発行者は異なります。発行者を持たないネイティブXRPは、この欠陥の影響範囲外でした。

記録されたケースでは、リスクは2者の間に存在していました。すなわち、バーン権限を委任したアカウント(承認していない債務を負う可能性があった)と、それらのIOUを受け取る発行者です。gatewayのUSDの保有者が、保有するトークンの新たな単位に直面することはありませんでした。

欠陥の影響範囲を狭めた前提条件

この超過は、gateway側の一つの設定に依存していました。aliceのIOUを受け入れるトラストラインがなければ、支払いによってalice発行のUSDを作成する手段はありませんでした。発行者はそのトラストラインを自ら申請する必要があり、これがこの欠陥の実際の影響が限定的だったことを示す最も強い論拠です。

ただしこの論拠には留保が必要です。XRPLの委任ドキュメントは、修正以前にバーン専任委任者がミントできた資産としてマルチパーパストークン(MPT)も挙げていましたが、コミットのテストはトラストラインのケースのみをカバーしています。いずれの情報源も実際のインシデントには言及していませんが、トラストラインに基づく解釈を、独自のテストなしにMPT発行者へ拡張すべきではありません。

一つの権限が依然として全通貨をカバーする

このamendmentは、バーン専任委任者が償還できる上限を定めます。しかし、権限がどのトークンに及ぶかは変更されていません。細分権限はハードコードされており、同じドキュメントは、一部の通貨の送金を許可しつつ他を除外する形で委任者に権限を与えることはできないと明記しています。

USDとEURのトークン、または2つの発行者のステーブルコインを保持する運用アカウントでは、PaymentBurnの一つの付与だけで、委任者は残高の範囲内ですべてを償還できます。通貨ごとの分離は、保有を複数アカウントに分割する方法によってしか実現できません。Paymentトランザクションタイプの権限はさらに広く、当該タイプの支払い全般をカバーするため、2つの細分値のみを確認するレビューでは見逃す可能性があります。XRPLがアカウント間で運用権限をどう分割するかに関するCoindooの過去の記事は、機関がこれらの役割をどう構成しているかを扱っています。

欠陥が悪用されたかを示すもの

すべての付与は公開されています。Delegateレジャーエントリには付与元アカウント、委任者、権限リストが記録されており、悪用の有無は誰でもオンチェーンで確認できます。

オンチェーンのパターン:

  • 10月8日以降、レジャー108,112,129より前に検証された支払い。
  • その時点でPaymentBurnを保持する委任者が署名し、PaymentMintもPaymentも保持していない。
  • トークンの発行者宛てで、委任元アカウントの当該トラストラインの残高がマイナスになっている。

3つすべてに一致する支払いがあれば、Mainnetで超過が発生したことが確認されます。この期間のすべてのPaymentBurn付与を確認して該当がなければ、トラストライントークンについては悪用が排除され、MPTは別途確認が必要です。DelegateSetが権限リストを丸ごと置き換えるため、有効化前レポートが説明したとおり、確認には各支払いが検証された時点で有効だった権限を使用する必要があります。

このamendmentはレジャー108,112,129以降に適用されます。それ以前に検証された支払いは、ゼロを超えたものを含め、記録のとおりそのまま扱われます。この変更前後のトランザクションを確認する運用者にとって、検証済みレジャー番号がどのルールが適用されたかを判断する境界となります。

出典:Coindoo