Ethereum Geth に chain-split という深刻な脆弱性が見つかった

Ethereum urges Go devs to fix severe chain-split vulnerability

2021/08/25 BleepingComputer — Ethreumプロジェクトは、深刻度の高い脆弱性を潰すためのホット・フィックスの適用を開発者に呼びかけている。CVE-2021-39137として追跡されている chain-split (CWE-436 解釈の衝突) の脆弱性は、Ethereum プロトコルの公式 Golang 実装である Geth に影響を与える。この種の脆弱性は、ブロックチェーン・サービスの破壊を引き起こし、昨年の Ethereum のネットワーク障害のような、大規模な障害を引き起こす可能性がある。

攻撃ベクトルの詳細は今のところ非公開

今週、Ethereum プロジェクトのメンテナは、Geth : go-ethereum を使用している Go の開発者に対して、深刻度の高い脆弱性を修正したバージョン 1.10.8 への切り替えを促している。オープンソース・プロジェクトである Geth の脆弱性は、chain-split を引き起こす可能性がある。つまり、脆弱な Geth インスタンスは、正規のチェーンを受け入れることを拒否することになる。

ブロックチェーン・セキュリティ企業である Sentnl の Software Security and Crypto-Fuzzing Expert である Guido Vranken は、セキュリティ・エンゲージメントの最中に、この脆弱性を発見した。Ethereum の開発者たちには、あまり多くを語らずに、次期バージョンについての事前注意が提供されていた。大半の開発者による修正版へのアップグレードが完了するまで、この欠陥の悪用に関する詳細は、伏せられている。

Ethereum の Team Lead である Péter Szilágyi は、「正確な攻撃ベクトルに関する情報開示は、影響を受けるノードや、その下流プロジェクトにおいて、ソフトウェアおよびノードを更新する時間を確保するために、後日になる予定だ」と述べている。Szilágyi は、「London hard fork をサポートする、すべての Geth のバージョンに脆弱性は存在するため (このバグは London より古い) 、すべてのユーザーにおいてアップデートが必要になる」と続けている。ブロックチェーンの chain-split 脆弱性は、それが悪用されると機能停止が生じ、暗号通貨の引き出しや、ブロックチェーン全体の整合性に、影響をおよぼす可能性がある。

昨年、Ethereum ネットワークに依存しているサービスが停止し、引き出しのエラーが発生したが、これも脆弱な go-ethereum クライアントが原因だった。chain-split とは、別々の Ethereum クライアント間において、何が有効な取引であり、何が無効な取引なのかという点で、合意できない場合に発生する。つまり、プラットフォームで使用しているクライアントによっては、元の (正規) ブロックチェーンが 、フォーク しているように見えることがあるという。

Ethereum では、Ethereum Virtual Machine (EVM) とも呼ばれる単一の正規のコンピュータが、Ethereum ネットワーク上に存在する全てノードが同意する、共通の状態または記録のセットを維持している。つまり、すべての Ethereum サービスは、EVM 上にある情報のコピーを保持している。しかし、chain-split が発生すると、別々のブロックチェーン・サービス間で、不一致の記録が表示されることになるため、暗号通貨ネットワークの整合性と信頼性に問題が生じる。

Corda ブロックチェーンの開発に携わり、昨年の Ethereum 障害を分析した、R3 の Software Engineer である Dimos Raptis は、「すでに、これだけの時間が経過しているわけで、いまさら誰かが誤って、それを引き起こす確率はごく僅かだ」と説明している。しかし、悪意の人物が chain-split を、悪用する可能性については過小評価していない。この専門家は、「その反対に、セキュリティの問題として取り上げられた場合、誰かが悪意を持って、それを発動させる可能性も少なくない」と警告している。

Telos Blockchain Platform 監査で発見された欠陥

興味深いことに、この欠陥は、Telos が Sentnl を監査人として起用した後に、Telos の EVM プラットフォーム監査で発見されている。Telos は新世代のブロックチェーン・プラットフォームであり、また、feeless トランザクションを用いた、高速でスケーラブルな分散型アプリケーションの構築を支援している。Sentnl の Guido Vranken は、「Telos EVM での脆弱性を見つけるために、厳密なファジングを行い、その動作が go-ethereum の動作と正確に一致することを確認した。go-ethereum は、セキュリティに関して優れた実績があるが、この手順は非常に効果的であり、Telos EVM の正しさを示すだけではなく、go-ethereum の深刻度の高い問題をも見つけ出した」と述べている。go-ethereum に依存しているブロックチェーンのサービスや開発者は、v1.10.8以上にアップグレードする必要がある。また、現時点では回避策は存在しない。

この脆弱性 CVE-2021-39137 は、お隣のキュレーション・チームが 8月28日に拾っていました。CVSS は GitHub 参照で 6.5、CWE に関しては NVD が CWE-436(解釈の衝突) を、Vuldb が CWE-404(リソースの不適切な解放) を割り当てました。CWE-436 は、プロダクト A と B の間で、なんらかのステート衝突が起こるというもので、chain-split の原因としては納得感があります。もっと低位で見ると一方がリソースを不適切に解放してしまった、という味方が成り立ちそうです。文中にあるように、悪用までの道筋は遠そうですが、修正バージョンが出ているので、適用はお早めに。

%d bloggers like this: