diff --git a/src/mobile-pentesting/cordova-apps.md b/src/mobile-pentesting/cordova-apps.md index 84e66b3d5..3c00d7d3d 100644 --- a/src/mobile-pentesting/cordova-apps.md +++ b/src/mobile-pentesting/cordova-apps.md @@ -4,11 +4,11 @@ **詳細については[https://infosecwriteups.com/recreating-cordova-mobile-apps-to-bypass-security-implementations-8845ff7bdc58](https://infosecwriteups.com/recreating-cordova-mobile-apps-to-bypass-security-implementations-8845ff7bdc58)を確認してください**。これは要約です: -Apache Cordovaは、**JavaScript、HTML、CSS**を使用して**ハイブリッドアプリケーション**の開発を可能にすることで知られています。これにより、AndroidおよびiOSアプリケーションの作成が可能ですが、アプリケーションのソースコードを保護するためのデフォルトのメカニズムが欠けています。React Nativeとは異なり、Cordovaはデフォルトでソースコードをコンパイルしないため、コード改ざんの脆弱性が生じる可能性があります。CordovaはWebViewを使用してアプリケーションをレンダリングし、APKまたはIPAファイルにコンパイルされた後でもHTMLおよびJavaScriptコードを露出させます。一方、React NativeはJavaScript VMを使用してJavaScriptコードを実行し、より良いソースコード保護を提供します。 +Apache Cordovaは、**JavaScript、HTML、およびCSS**を使用して**ハイブリッドアプリケーション**の開発を可能にすることで知られています。これにより、AndroidおよびiOSアプリケーションの作成が可能ですが、アプリケーションのソースコードを保護するためのデフォルトのメカニズムが欠けています。React Nativeとは異なり、Cordovaはデフォルトでソースコードをコンパイルしないため、コード改ざんの脆弱性が生じる可能性があります。CordovaはWebViewを使用してアプリケーションをレンダリングし、APKまたはIPAファイルにコンパイルされた後でもHTMLおよびJavaScriptコードを露出させます。一方、React NativeはJavaScript VMを使用してJavaScriptコードを実行し、より良いソースコード保護を提供します。 ### Cordovaアプリケーションのクローン作成 -Cordovaアプリケーションをクローンする前に、NodeJSがインストールされていることを確認し、Android SDK、Java JDK、Gradleなどの他の前提条件もインストールしてください。公式のCordova [ドキュメント](https://cordova.apache.org/docs/en/11.x/guide/cli/#install-pre-requisites-for-building)は、これらのインストールに関する包括的なガイドを提供しています。 +Cordovaアプリケーションをクローンする前に、NodeJSがインストールされていることと、Android SDK、Java JDK、Gradleなどの他の前提条件が満たされていることを確認してください。公式のCordova [ドキュメント](https://cordova.apache.org/docs/en/11.x/guide/cli/#install-pre-requisites-for-building)は、これらのインストールに関する包括的なガイドを提供しています。 `com.android.bank`というパッケージ名の`Bank.apk`という例のアプリケーションを考えてみましょう。ソースコードにアクセスするには、`bank.apk`を解凍し、`bank/assets/www`フォルダーに移動します。このフォルダーには、HTMLおよびJSファイルを含むアプリケーションの完全なソースコードが含まれています。アプリケーションの設定は`bank/res/xml/config.xml`にあります。 @@ -24,7 +24,7 @@ cd bank-new 適切な Cordova Android プラットフォームバージョンを確認するには、元のアプリケーションの `cordova.js` ファイル内の `PLATFORM_VERSION_BUILD_LABEL` をチェックしてください。 -プラットフォームの設定後、必要なプラグインをインストールします。元のアプリケーションの `bank/assets/www/cordova_plugins.js` ファイルには、すべてのプラグインとそのバージョンがリストされています。以下のように各プラグインを個別にインストールします。 +プラットフォームの設定後、必要なプラグインをインストールします。元のアプリケーションの `bank/assets/www/cordova_plugins.js` ファイルには、すべてのプラグインとそのバージョンがリストされています。以下のように各プラグインを個別にインストールしてください。 ```bash cd bank-new cordova plugin add cordova-plugin-dialogs@2.0.1 @@ -34,7 +34,7 @@ npmでプラグインが利用できない場合は、GitHubから取得でき cd bank-new cordova plugin add https://github.com/moderna/cordova-plugin-cache.git ``` -すべての前提条件が満たされていることを確認してからコンパイルしてください: +すべての前提条件が満たされていることを確認してからコンパイルしてください: ```bash cd bank-new cordova requirements @@ -44,10 +44,82 @@ APKをビルドするには、次のコマンドを使用します: cd bank-new cordova build android — packageType=apk ``` -このコマンドは、デバッグオプションが有効なAPKを生成し、Google Chromeを介したデバッグを容易にします。アプリケーションにコード改ざん検出メカニズムが含まれている場合、特にインストール前にAPKに署名することが重要です。 +このコマンドは、デバッグオプションが有効なAPKを生成し、Google Chromeを介したデバッグを容易にします。アプリケーションにコード改ざん検出メカニズムが含まれている場合、インストール前にAPKに署名することが重要です。 ### 自動化ツール -クローンプロセスを自動化したい方には、**[MobSecco](https://github.com/Anof-cyber/MobSecco)**をお勧めします。これは、上記の手順を簡素化し、Androidアプリケーションのクローン作成を効率化します。 +クローンプロセスを自動化したい場合、**[MobSecco](https://github.com/Anof-cyber/MobSecco)**が推奨されるツールです。これは、上記の手順を簡素化し、Androidアプリケーションのクローンを効率化します。 + +--- + +## セキュリティリスクと最近の脆弱性 (2023-2025) + +Cordovaのプラグインベースのアーキテクチャは、**攻撃面のほとんどがサードパーティプラグインとWebViewブリッジ内に存在する**ことを意味します。以下の問題は、過去数年にわたり積極的に悪用されたり、公に開示されたりしています: + +* **悪意のあるNPMパッケージ。** 2024年7月、`cordova-plugin-acuant`パッケージは、インストール中に悪意のあるコードをドロップすることが発見されたため、NPMレジストリから削除されました (OSV-ID MAL-2024-7845)。`npm install cordova-plugin-acuant`を実行した開発者のマシンは、侵害されたと見なすべきです。予期しないCordovaプラグインのために`package.json`/`package-lock.json`を監査し、信頼できるバージョンを固定してください。[OSV advisory](/) +* **未検証のディープリンク → XSS/RCE。** `CleverTap Cordova Plugin ≤ 2.6.2` (CVE-2023-2507)は、ディープリンク入力をサニタイズしないため、攻撃者が任意のJavaScriptを注入でき、作成されたリンクが開かれるとメインWebViewコンテキストで実行されます。2.6.3以上に更新するか、実行時に信頼できないURIパラメータを削除してください。[CVE-2023-2507](/) +* **古いプラットフォームコード。** `cordova-android` ≤ 12は、targetSdk 33以下で出荷されます。2024年5月から、Google PlayはAPI 34を要求し、いくつかのWebViewの強化機能(例:コンポーネントのための自動生成された`exported="false"`)はAPI 34以上にのみ存在します。`cordova-android@13.0.0`以上にアップグレードしてください。 + +### ペンテスト中のクイックチェック + +1. **デコンパイルされた`AndroidManifest.xml`で`android:debuggable="true"`を探します。** デバッグ可能なビルドは、`chrome://inspect`を介してWebViewを公開し、完全なJS注入を可能にします。 +2. `config.xml`をレビューし、過度に許可された``タグや`www/index.html`内のCSPメタタグが欠けていないか確認します。 +3. `www/`内で`eval(`、`new Function(`、またはCSPバイパスをXSSに変える可能性のある動的に構築されたHTMLをgrepします。 +4. `plugins/`内の埋め込まれたプラグインを特定し、`npm audit --production`または`osv-scanner --lockfile`を実行して既知のCVEを見つけます。 + +--- + +## 動的分析のヒント + +### リモートWebViewデバッグ + +アプリケーションが**デバッグ**モードでコンパイルされている場合(または明示的に`WebView.setWebContentsDebuggingEnabled(true)`を呼び出している場合)、Chrome DevToolsを接続できます: +```bash +adb forward tcp:9222 localabstract:chrome_devtools_remote +google-chrome --new-window "chrome://inspect/#devices" +``` +これにより、ライブJavaScriptコンソール、DOMインスペクタ、およびランタイムでJavaScript関数を上書きする能力が得られます。これはクライアントサイドのロジックをバイパスするのに非常に便利です。(詳細についてはGoogleの公式ドキュメントを参照してください。) + +### Fridaを使用したJS ⇄ ネイティブブリッジのフック + +ほとんどのプラグインのJava側エントリーポイントは`org.apache.cordova.CordovaPlugin.execute(...)`です。このメソッドをフックすることで、JavaScriptから行われる呼び出しを監視または改ざんすることができます: +```javascript +// frida -U -f com.vulnerable.bank -l hook.js --no-pause +Java.perform(function () { +var CordovaPlugin = Java.use('org.apache.cordova.CordovaPlugin'); +CordovaPlugin.execute.overload('java.lang.String','org.json.JSONArray','org.apache.cordova.CallbackContext').implementation = function(act, args, ctx) { +console.log('[Cordova] ' + act + ' => ' + args); +// Tamper the first argument of a sensitive action +if (act === 'encrypt') { +args.put(0, '1234'); +} +return this.execute(act, args, ctx); +}; +}); +``` +--- + +## ハードニング推奨事項 (2025) + +* **最新プラットフォームに更新:** `cordova-android@13` (2024年5月) はAPI 34をターゲットにし、新しいWebViewの緩和策を提供します。 +* **デバッグアーティファクトの削除:** `android:debuggable="false"` を確保し、リリースビルドで `setWebContentsDebuggingEnabled` を呼び出さないようにします。 +* **厳格なCSPとAllowListの強制:** 各HTMLファイルに `` タグを追加し、`config.xml` で `` のオリジンを制限します。 +最小限のCSPの例(インラインスクリプトをブロック): +```html + +``` +* **クリアテキストトラフィックの無効化:** `AndroidManifest.xml` で `android:usesCleartextTraffic="false"` を設定し、TLSを強制する [network-security-config] を提供します。 +* **プラグインの衛生管理:** +* `npm ci` でプラグインのバージョンを固定し、生成された `package-lock.json` をコミットします。 +* 定期的に `npm audit`、`osv-scanner` または `cordova-check-plugins` を実行します。 +* **難読化:** Terser/UglifyJS でJavaScriptをミニファイし、カジュアルなリバースエンジニアリングを遅らせるために、プロダクションビルドからソースマップを削除します。 + +--- + +## 参考文献 + +* Apache Cordova – Cordova-Android 13.0.0 リリースノート (2024年5月) +* OSV-ID MAL-2024-7845 – `cordova-plugin-acuant` における悪意のあるコード +* CVE-2023-2507 – CleverTap Cordova Plugin deeplink XSS {{#include ../banners/hacktricks-training.md}}