Capacitorの脆弱性、リモートコンテンツがアプリ自身のオリジンとして実行される恐れ

Capacitorに存在する重大な脆弱性「CVE-2026-103922」により、攻撃者が制御するリモートコンテンツが、脆弱なAndroidおよびiOSアプリ内で、アプリ自身の信頼されたオリジンになりすまして実行される可能性があることが分かりました。

CVEvulnerability database

この脆弱性のCVSSスコアは9.3です。CapacitorのWebViewにおけるナビゲーション処理に影響し、同一オリジンのデータ、Cookie、ローカルストレージのほか、登録済みのCapacitorプラグインを通じて利用できるネイティブ機能が露出するおそれがあります。

Capacitorの脆弱性の詳細

この問題はGitHubのセキュリティアドバイザリGHSA-rvm3-566m-v7fvで詳しく解説されており、CapacitorのWebViewナビゲーションガードにおける検証の不備が原因です。該当のロジックは遷移先URLのスキームとホストは確認していたものの、パスを検証していませんでした。

この見落としにより、アプリのオリジン上でホストされ、アプリ内の正当な遷移先として扱われるCapacitor内部の/_capacitor_http_interceptor_エンドポイントへ、ナビゲーションできてしまいます。

攻撃者が被害者をだまし、アプリのWebView内の悪意あるリンクをクリックさせると、この内部プロキシエンドポイントを悪用して、攻撃者が選んだリモートURLを取得させることが可能です。

重要なのは、取得されたレスポンスが攻撃者のリモートオリジンではなく、影響を受けるアプリの信頼されたオリジン下のドキュメントとしてWebViewに返される点です。その結果、レスポンスに埋め込まれたJavaScriptは、Capacitorアプリ内で同一オリジンの完全な権限を継承できます。

つまり、悪意あるコードがlocalStorageやCookie、さらに設定済みのCapacitorプラグインが提供する特権的なネイティブ機能にアクセスできる可能性があります。影響の度合いは、アプリのプラグイン構成や保存データによって異なります。

認証トークン、機密性の高いユーザーデータ、デバイス機能、バックエンドAPIとのやり取りを扱う該当アプリは、深刻なリスクにさらされます。この弱点は、オリジン検証エラーを指すCWE-346と、意図しないプロキシ、いわゆる「confused deputy(混乱した代理人)」状態を示すCWE-441に分類されています。

脆弱性は`@capacitor/android`と`@capacitor/ios`の双方、さらにMavenの`com.capacitorjs:core`パッケージとSwift Package Manager版にも影響します。

影響を受けるのは、Capacitor 6.0.0~6.2.1、7.0.0~7.6.8、および修正版より前の複数の8.xリリースです。修正版は6.2.2、7.6.9、8.3.5、8.4.3、8.5.1です。

CapacitorHttpプラグインを無効にしても、脆弱なアプリは保護されません。影響を受けるバージョンでは、プラグインを有効にしていなくても内部プロキシハンドラーにアクセスできるため、Capacitor HTTPプロキシ機能を意図的に使っていないアプリにまで被害が及ぶ可能性があります。

メンテナーは、内部プロキシパスへのフレームナビゲーションをブロックし、CapacitorHttpが有効な場合に限ってプロキシハンドラーを利用できるようにすることで、この問題に対処しました。

パッチ適用後の実装では、プロキシエンドポイントがメインドキュメントのリクエストに応答しなくなります。一方、fetchやXMLHttpRequestはサブリソースリクエストとして動作するため、正当な利用には影響しません。

開発者は、パッチ適用済みのCapacitorにアップグレードし、影響を受けるAndroidおよびiOSアプリをリビルドして、更新版を速やかに再配布する必要があります。

すぐにパッチを適用できない組織は、AndroidまたはiOSのプラグインをオーバーライドし、/_capacitor_http_interceptor_で始まるナビゲーションの試行をキャンセルする対策を実装できます。あわせて、特にチャットメッセージ、コメント、埋め込みリッチテキスト、外部コンテンツに対応するアプリでは、WebViewに表示されるユーザー制御のリンクをサニタイズし、制限することが重要です。

SOCのアラート調査を1件あたり21分短縮。即座にIOCのコンテキストを得て、迅速な対応を実現: TI LookupをSOCに統合

翻訳元: https://gbhackers.com/capacitor-vulnerability/

本記事は gbhackers.com の記事を翻訳・要約したものです。