[緊急解説] Electronのコンテキスト分離バイパス脆弱性 (CVE-2026-70601) について
はじめに
Electron開発者の皆さん、こんにちは。今回は、Electronアプリケーションに影響を与える高深刻度のセキュリティ脆弱性(GHSA-h7rp-cf8h-j98x / CVE-2026-70601)について解説します。この脆弱性は、特定の条件下でコンテキスト分離 (Context Isolation) がバイパスされ、攻撃者が隔離されたプリロードスクリプト環境にアクセスできてしまうというものです。ご自身のアプリケーションが影響を受ける可能性があるか確認し、早急な対策を検討してください。
脆弱性概要 (GHSA-h7rp-cf8h-j98x / CVE-2026-70601)
この脆弱性は、「Electron: Context isolation bypass via Function.prototype.bind hijack」と名付けられています。`Function.prototype.bind`の悪用により、`contextBridge`を介してWebコンテンツに公開されたPromiseを返す関数を通じて、本来隔離されているはずのプリロードスクリプトのコンテキストに未信頼のWebコンテンツからアクセスできてしまう問題です。深刻度は「高 (High)」と評価されています。
具体的な影響と攻撃経路
この脆弱性が影響を与えるのは、以下の2つの条件を「両方」満たすElectronアプリケーションです。
1. `contextBridge`を介して「Promiseを返す関数」をWebコンテンツに公開している。
2. そのウィンドウで「未信頼のコンテンツ」(例:ユーザーがアップロードしたHTML/JavaScript、外部の広告スクリプト、iframeなど)をロードしている。
攻撃者は、Webコンテンツ側から`Function.prototype.bind`を悪用し、`contextBridge`で公開されたPromiseを返す関数を通じて、隔離されたプリロードスクリプトのコンテキストにアクセスします。プリロードスクリプトはNode.js環境にアクセスできるため、このバイパスが成功すると、攻撃者はプリロードスクリプトが持つ全ての権限(例えば、ファイルシステムへのアクセスやOSコマンドの実行など)を行使できるようになります。
特に、サンドボックスが無効なレンダラープロセスや、`nodeIntegration`が有効なレンダラープロセスでは、この脆弱性がNode.jsの全機能へのアクセスにエスカレートする可能性があり、非常に深刻な結果を招く恐れがあります。
あなたのアプリケーションは大丈夫? - 影響範囲の確認
`ipcRenderer.invoke`を`contextBridge`でラップしてWebコンテンツに公開するパターンは一般的であり、これはPromiseを返すため、多くのElectronアプリが対象となる可能性があります。もしあなたのアプリが、ユーザー入力や外部ソースからのコンテンツをレンダリングするウィンドウで、`contextBridge`経由でPromiseを返す関数を公開している場合、この脆弱性の影響を受ける可能性があります。
一方、未信頼のコンテンツを一切ロードしないElectronアプリであれば、この脆弱性の直接的な影響は受けません。
対策と対応方法
残念ながら、この脆弱性に対するアプリケーション側のワークアラウンド(一時的な回避策)は存在しません。唯一かつ最も確実な対策は、**Electronを脆弱性が修正されたバージョンにアップデートすること**です。
修正済みバージョンは以下の通りです。
- `42.0.0-beta.5` 以降
- `41.2.2` 以降
- `40.9.2` 以降
- `39.8.9` 以降
現在利用しているElectronのバージョンを確認し、上記のいずれかのバージョン、またはそれ以降の安定版へ速やかにアップデートしてください。
まとめ
今回解説したElectronのコンテキスト分離バイパス脆弱性は、`contextBridge`の利用方法によっては重大なセキュリティリスクをもたらします。Electronアプリを開発・運用されている日本のフロントエンドエンジニアの皆さんは、ご自身のアプリケーションが影響を受けるかどうかを確認し、速やかにElectronのバージョンアップを実施してください。セキュリティは常に最新の状態を保つことが重要です。
このアドバイザリに関する詳細な質問がある場合は、[security@electronjs.org](mailto:security@electronjs.org) までメールで問い合わせてください。