この脆弱性は Cisco Talos の Marcin Noga が発見しました。
概要
Talos では、CPP および Parity Ethereum の各クライアントに複数の脆弱性を確認しました。
TALOS-2017-0503 / CVE-2017-14457 には、Denial of Service(DoS)の脆弱性と、libevm に起因するメモリ リークの脆弱性が記載されています。問題の関数は、現時点のデフォルト ビルドでは無効になっています。この脆弱性は、ビルド時に手動で有効にしたノードにのみ影響します。
TALOS-2017-0508 / CVE-2017-14460 は Ethereum Parity クライアントの脆弱性で、クロスドメイン(CORS)ホワイトリスト ポリシーが過度に許容的なことに起因しています。特定の API が有効になっている場合、アカウントやパリティ設定の変更内容に加えて、既存のアカウント、パリティ設定、ネットワーク設定に関する秘密データまでも漏洩する危険性があります。
また TALOS-2017-0464 – TALOS-2017-0471 / CVE-2017-12112 – CVE-2017-12119 には、認証がバイパスされる脆弱性が複数記載されています。これらの脆弱性を攻撃者がエクスプロイトした場合、資格情報を使用することなく、管理者専用機能にアクセスできる可能性があります。
最後に、CPP-Ethereum JSON-RPC の実装に起因する Denial of Service(DoS)の脆弱性として TALOS-2017-0471 / CVE-2017-12119 も発見されました。細工された json 要求により処理されない例外が発生し、Denial of Service(DoS)状態に陥る可能性があります。
表 1 は、各 Ethereum クライアントの JSON-RPC 実装における重要なセキュリティ部分を示しています。3 種類のクライアントのうち 2 つは、JSON-RPC インターフェイスの実装に問題を抱えています。これにより深刻なセキュリティ上の欠陥が発生します。これについては以下で詳しく説明します。
表 1
*ソース リソースのクロス共有
詳細
TALOS-2017-0503 / CVE-2017-14457
create2 の opcode ハンドラでスマート コントラクト コードが適切に処理されないため、Denial of Service(DoS)攻撃を受ける危険性があります。攻撃者が膨大な量のデータを SHA1 関数に渡し、計算に時間を費やすよう仕向ける可能性があります。この脆弱性がエクスプロイトされると、仮想マシン ライブラリ機能の実装を使用して、Ethereum ネットワーク内の全ノードに DoS 攻撃を仕掛けられる危険性があります。また、領域外データの参照値がコントラクト アドレスとして攻撃者に返されるため、メモリ リークが起きる危険性もあります。この機能はデフォルトでは有効になっていません。有効にするには -network Constantinople スイッチで ethvm を実行する必要があります。詳細はTalos の脆弱性レポートに記載されています。
TALOS-2017-0508 / CVE-2017-14460
Parity は Rust ベースの Ethereum クライアントであり、3 種類の Ethereum プラットフォームの中で最も広く使用されています。Parity は豊富な JSON-RPC インターフェイスを提供しますが、このインターフェイスはデフォルトで有効になっているため、多数の API が外部に公開されることになります。インターフェイスには過度に許容的なクロスドメイン(CORS)ホワイトリスト ポリシーが付属していますが、ポリシーはデフォルトで「*」に設定されています。こうした JSON-RPC デーモンの誤設定は、Parity ウォレットを実行しているユーザが悪意のある Web サイトにアクセスすると脆弱性を引き起こします。特定の API が有効になっている場合、アカウントやパリティ設定の変更内容だけでなく、既存のアカウント、パリティ設定、ネットワーク設定に関する秘密データまでも漏洩する危険性があります。詳細はTalos の脆弱性レポートに記載されています。
TALOS-2017-0464 – TALOS-2017-0470 / CVE-2017-12112 – CVE-2017-12118
JSON-RPC における CPP Ethereum API の実装では、不適切な認証方法による脆弱性が確認されました。悪意のある JSON 要求が送信されると、以下の CPP Ethereum API 内で制限された機能にアクセスされ、その結果として認証がバイパスされる可能性があります。
TALOS-2017-0464 – admin_addPeer
TALOS-2017-0465 – admin_nodeInfo
TALOS-2017-0466 – admin_peers
TALOS-2017-0467 – miner_setEtherbase
TALOS-2017-0468 – miner_setGasPrice
TALOS-2017-0469 – miner_start
TALOS-2017-0470 – miner_stop
これにより、リモートの攻撃者は資格情報を使用することなく、管理者専用機能にアクセスできる可能性があります。この脆弱性では、インターフェイスが 0.0.0.0(= 全 IP アドレス)にバインドされ世界中に公開されているため、特に危険性が高くなります。要求を送信する際に Content-Type を application / json に設定する必要がありますが、この要件が強制されていません。このため、JSON-RPC デーモンを実行するマシンが NAT ゲートウェイの背後にあったとしても、CSRF または SSRF 攻撃によって JSON-RPC API を簡単にエクスプロイトできます。
詳細は、先述した Talos 脆弱性レポートに記載されています。
TALOS-2017-0471 / CVE-2017-12119
JSON-RPC サーバにおける CPP Ethereum クライアントの実装では、別の Denial of Service(DoS)の脆弱性が発見されました。いくつかの API で適切な例外処理が行われないため、不正な形式の JSON パッケージが送信されると、クライアントやノードがクラッシュする可能性があります。詳細はTalos の脆弱性レポートに記載されています。
カバレッジ
これらの脆弱性からクライアントを保護できるよう、Talos では Advanced Malware Protection(AMP)などのエンドポイント セキュリティ製品を推奨しています。
今回の脆弱性をエクスプロイトする試みの一部は、以下の Snort ルールにより検出できます。今後、脆弱性に関する新たな情報が追加されるまでの間は、ルールが追加されたり、現行のルールが変更されたりする場合がありますのでご注意ください。最新ルールの詳細については、FireSIGHT Management Center または Snort.org をご覧ください。
Snort ルール:44707-44712、44713
本稿は 2018年1月9日に Talos Group のブログに投稿された「Vulnerability Spotlight: Multiple Vulnerabilities in the CPP and Parity Ethereum Client」の抄訳です。