ビットコインのLightning Network開発元であるACINQは10月27日、Eclair 0.14.6を公開した。未確認のチャネル資金を悪用する問題に対処し、チャネルのスプライスでは相手側の資金入力が確認済みであることを標準で求める。チャネル閉鎖時の精算と資金回収の処理も改めた。ACINQはノード運営者に早期の更新を促しているが、脆弱性が実際に悪用されたかどうかは明らかにしていない。
未確認の資金取引が保留中の支払いに及ぼすリスク
Lightning Networkは決済チャネルを使ってビットコインを送金する仕組みで、各取引をビットコインのブロックチェーンに記録せずに処理できる。運営者は「スプライス」によって既存チャネルの資金を追加したり引き出したりできるが、資金の変更にはオンチェーン取引が必要となる。
問題となるのは、スプライスで相手側が提示した未確認の資金入力を受け入れた場合だ。悪意あるノードがスプライス取引への署名後に関連取引を二重支払いすると、当初の資金構成が無効になる可能性がある。その資金構成に依存するチャネル精算にも影響が及びかねない。
その後、チャネルがビットコインのブロックチェーン上で閉鎖された場合、HTLC(ハッシュタイムロック契約)で担保された保留中の支払いがリスクにさらされるおそれがある。支払いの精算が、無効になった資金取引に依存しているためだ。ACINQは潜在的なセキュリティ上の問題として説明しており、資金流出が確認されたとは述べていない。
スプライスの資金入力に確認を要求
Eclair 0.14.6では、スプライスに使う相手側の資金入力が確認済みであることを標準設定で要求する。また、未確認の資金変更を土台に新たなスプライス取引を重ねることも防ぐ。信頼性の定まらない資金状態が積み重なり、精算に影響するリスクを抑える狙いがある。
ACINQはこの要件を、従来の二重資金調達に関する保護策と区別している。従来の保護策は現在、チャネルの新規作成に適用され、スプライスには今回導入された確認要件が適用される。不特定の相手とスプライスを行う場合、ACINQは任意機能の「ゼロ手数料コミットメント」を使わないよう注意を促した。この機能は従来から標準で無効になっている。
強制閉鎖時は確認済みの資金状態に戻す
今回の更新では、チャネルの資金取引が未確認のまま閉鎖が必要になった場合の処理も改善した。新しい精算ロジックは、Bitcoin Coreのバックエンドが資金の裏付けを確認できるコミットメント取引を選ぶ。必要に応じて直近の確認済み資金状態に戻り、ローカルの未確認取引プールから消えた資金取引を使った精算を避ける。
資金の取り戻し漏れにつながる可能性のあるケースにも修正が加わった。Eclairが優先する精算経路から外れた後でも、取引がマイナーによって確認されることがある。旧バージョンでは、こうした取引を相手側の取引と誤認し、本来回収できる資金や保留中の支払いに関連する出力を取得できない可能性があった。新バージョンでは該当する取引を識別し、関連出力の回収を試みる。
チャネルを閉じずにアップグレード可能
ACINQは、旧バージョンのEclairを使うノードにパッチの適用を推奨し、確認済み入力の保護を標準で有効にしたまま運用するよう促している。アップグレード時はソフトウェアを停止して新バージョンをインストールし、ノードを再起動する。既存の決済チャネルを閉じる必要はない。
今回修正された問題は、セキュリティ研究者のErick Cestari氏が責任ある手続きで開示した。ACINQは悪意あるノードによる一部問題の悪用があり得ると警告しているが、影響を受けたノードの数や攻撃の発生有無は公表していない。