エレクトラム、悪意あるサーバーによる取引すり替えの脆弱性を4.8.3で修正

エレクトラム、10月24日にセキュリティ更新版4.8.3を配布し脆弱性を公表
悪意あるサーバーが送金先をすり替えた偽の取引を表示し、手数料引き上げ(RBF)を誘導
実際に攻撃しているサーバーがあると説明、偽の取引の手数料を上げた1人が損失
ビットコインのソフトウェアウォレット「エレクトラム(Electrum)」は10月24日、セキュリティ更新版4.8.3を公開し、悪意あるサーバーが利用者の送金を横取りできる脆弱性を明らかにした。開発陣はGitHubのセキュリティアドバイザリーで「一部のサーバーが実際にこの攻撃を行っている」として、更新を呼びかけた。深刻度は「高(high)」で、4.8.3未満の全バージョンが影響を受ける。
送った取引は消え、偽物が「未承認」に
エレクトラムは、ビットコインのブロックチェーン全体をダウンロードしない軽量ウォレットだ。代わりにエレクトラムサーバーに接続し、自分のアドレスの取引履歴を取得する。ブロックに取り込まれた取引はウォレット自身が検証するが、まだブロックに入っていない「未承認取引」はサーバーの情報をそのまま信頼する仕組みだ。開発陣は公式FAQで「未承認取引についてはサーバーを信頼する」と説明してきた。
公式FAQによると、エレクトラムは通常10前後のサーバーに同時接続するが、大半はブロック情報と手数料の推定値の取得にしか使わない。自分のアドレスの取引履歴の取得と、作成した取引のネットワークへの送信は、任意に選ばれた「メインサーバー」1つが担う。このメインサーバーに悪意があれば、送金と履歴表示の両方を握られることになる。
攻撃はこの隙を突いた。利用者が送金すると、悪意あるサーバーはその取引をビットコインネットワークに流さずに保留する。そのうえで、送金先だけを攻撃者のアドレスに替えた偽の取引をウォレットの履歴に表示させる。偽の取引は署名が正しくないため実際には使えないが、ウォレットは署名を確認せず「未承認」として表示していた。本来の送金は画面から消える。
手数料を上げると、正規の署名が付く
問題はその後だ。取引が未承認のまま残ると、利用者は通常、手数料を上げて取引を送り直す機能(RBF、Replace-by-Fee)を使う。このときエレクトラムは画面上の偽の取引をもとに新しい取引を作り、今度は利用者の鍵で正しく署名する。手数料を上げただけのつもりが、コインを攻撃者のアドレスへ送る有効な取引になってしまう。
報告者2人は、攻撃者のアドレスの末尾4文字が本来の送金先と一致していたと伝えた。アドレスの末尾だけを確認する習慣を狙ったものだ。資金を失った利用者のケースでは、サーバーが作った偽の取引の手数料はゼロだった。開発陣は、利用者に手数料を上げさせる狙いだったと推測している。損失額や攻撃に使われたサーバーのアドレスは明らかにしていない。
最初の報告者は、本来の取引がビットコインネットワークにまったく伝播していなかったと報告した。サーバーが取引を保留していたことになる。コインデスクによると、この利用者はトレザーのハードウェアウォレット2台を組み合わせた2-of-3マルチシグ(3つの署名のうち2つで出金できる方式)ウォレットを使っており、損失は報告していない。
- 最初の報告。送金直後にウォレットの履歴に別の取引が表示されたという内容で、この時点では手数料引き上げを通じた窃取の経路は把握されていなかった
- 2件目の報告。偽の取引の手数料を上げて資金を失ったという利用者(Raju-K12)からの非公開の報告
- 修正を反映した4.8.3のタグを作成
- 4.8.3のインストールファイルを配布し、アドバイザリーを公開
修正後も残る検証の空白
4.8.3以降、エレクトラムは自分のアドレスから資金が出ていく未承認取引について、履歴に加える前に署名を検証する。署名が正しくない偽の取引はウォレットに表示されなくなる。ただ開発陣は、検証対象は「自分のアドレスから出ていく取引」に限られると説明した。他人から自分への、まだブロックに入っていない入金取引は引き続き検証しない。ブロックに取り込まれた取引は従来どおりウォレットが検証する。
4.8.3はWindows・macOS・Linux版とAndroid版が同時に公開された。前バージョンの4.8.2は9月12日に配布された。リリースノートは4.8.3を「セキュリティ更新」と位置付け、Raju-K12を含むセキュリティ報告者4人の名前を記載した。ただ、このうち個別に公開されたセキュリティアドバイザリーは今回の1件だけだ。更新にはこのほか、プラグイン情報の検証強化、ライトニングのインボイス解析を厳格にする修正、二重支払いで未承認取引を取り消すコマンド(dscancel)の追加なども含まれた。
エレクトラム利用者がすべきこと
開発陣は4.8.3への更新を推奨した。すぐに更新できない場合は、手数料の引き上げを含むあらゆる取引に署名する前に、送金先アドレスと金額が正しいかを最初から最後まで確認する必要があるとしている。自ら運営するサーバーなど信頼できるサーバーにのみ接続している利用者は、今回の攻撃の影響を受けない。