image

ビットコインアプリは巨額の手数料流出のリスク、ライブラリの2つのバグが非難される

このリスクは、これらのパッケージをインポートし、使用される出力を個別に確認せずに bitcoinjs-lib の料金計算や過剰な料金の保護を信頼するアプリケーションに関係します。保守者は、依存関係のバージョンと、インポートされた PSBT を検証する方法を確認する必要があります。

有効な署名に誤解を招く手数料が伴う可能性がある理由

ビットコイントランザクションの手数料は、インプットの価値とアウトプットの価値の差であるため、インプットを過小評価すると、計算された手数料が小さく見えます。

1 つ目の欠陥では、署名と料金計算で同じ入力に対して異なる値が使用される可能性があります。署名では前のトランザクション全体が使用されますが、手数料会計では、より小さい値を含む競合するレコードが優先されます。その結果、脆弱なソフトウェアは誤った料金を評価しながら実際のトランザクションを承認する可能性があります。

この勧告では、実際の料金が 9 億サトシだったが、ライブラリは 200 サトシと報告した bitcoinjs-lib 7.0.1 でのデモンストレーションについて説明しています。署名が検証され、デフォルトの手数料率の警告が表示されずに抽出が返されました。

2 番目の勧告では、両方の入力値レコードが欠落している最終的な入力について説明しています。計算機はこれらの入力をゼロとしてカウントし、別のパーティからインポートされた署名済みの PSBT は、別の署名操作を必要とせずにこの計算に到達できます。

その仮想的な例では、実際の料金は 91,000 サトシですが、報告されている料金は 1,000 サトシです。完成したスクリプトと署名だけでは、欠落している入力の値を確立することはできません。

bitcoinjs-lib の欠陥により、欠落している PSBT 入力値がゼロとしてカウントされ、はるかに高額な料金が隠蔽される可能性があります。パッチ適用されたリリースでは、すべての値が必要になりました。

実際の損失には、承認された有効なトランザクションがブロードキャストされ、ネットワークによって受け入れられる必要があります。これらの欠陥は署名を作成せず、超過価値はマイナー料金となります。

競合するレコードの場合、影響を受けるリリースは 5.2.0 ~ 5.2.1、6.0.0 ~ 6.1.8 (6.1.0-rc.0 を含む)、および 7.0.0-rc.0 ~ 7.0.3 です。レコード欠落の欠陥は、同じ v6 と v7 の範囲に加え、v5 ラインの 5.1.0 ~ 5.2.1 にも影響します。

この修復により、以前の出力を解決するための共有方法が署名とアカウンティングに提供され、矛盾する値またはスクリプトが拒否され、料金計算時にすべての入力に対して金額が必要になります。また、関連するメタデータの変更または組み合わせ後に、キャッシュされた料金と抽出されたトランザクションもクリアされます。

アップグレードできないメンテナは、参照された出力値を個別に検証する必要があります。手数料に署名または信頼する前に矛盾するレコードを拒否し、手数料を信頼したりトランザクションを抽出する前にすべての入力値を検証します。