Cordova Apps
Reading time: 12 minutes
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
詳細については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コードを実行し、より良いソースコード保護を提供します。
Cordovaアプリケーションのクローン作成
Cordovaアプリケーションをクローンする前に、NodeJSがインストールされていることと、Android SDK、Java JDK、Gradleなどの他の前提条件が満たされていることを確認してください。公式のCordova ドキュメントは、これらのインストールに関する包括的なガイドを提供しています。
com.android.bank
というパッケージ名のBank.apk
という例のアプリケーションを考えてみましょう。ソースコードにアクセスするには、bank.apk
を解凍し、bank/assets/www
フォルダーに移動します。このフォルダーには、HTMLおよびJSファイルを含むアプリケーションの完全なソースコードが含まれています。アプリケーションの設定はbank/res/xml/config.xml
にあります。
アプリケーションをクローンするには、次の手順に従ってください:
npm install -g cordova@latest
cordova create bank-new com.android.bank Bank
cd bank-new
bank/assets/www
の内容を bank-new/www
にコピーしますが、cordova_plugins.js
、cordova.js
、cordova-js-src/
、および plugins/
ディレクトリは除外します。
新しい Cordova プロジェクトを作成する際には、プラットフォーム(Android または iOS)を指定してください。Android アプリをクローンする場合は、Android プラットフォームを追加します。Cordova のプラットフォームバージョンと Android API レベルは異なることに注意してください。プラットフォームバージョンとサポートされている Android API の詳細については、Cordova の documentation を参照してください。
適切な Cordova Android プラットフォームバージョンを確認するには、元のアプリケーションの cordova.js
ファイル内の PLATFORM_VERSION_BUILD_LABEL
をチェックしてください。
プラットフォームの設定後、必要なプラグインをインストールします。元のアプリケーションの bank/assets/www/cordova_plugins.js
ファイルには、すべてのプラグインとそのバージョンがリストされています。以下のように各プラグインを個別にインストールしてください。
cd bank-new
cordova plugin add cordova-plugin-dialogs@2.0.1
npmでプラグインが利用できない場合は、GitHubから取得できます:
cd bank-new
cordova plugin add https://github.com/moderna/cordova-plugin-cache.git
すべての前提条件が満たされていることを確認してからコンパイルしてください:
cd bank-new
cordova requirements
APKをビルドするには、次のコマンドを使用します:
cd bank-new
cordova build android — packageType=apk
このコマンドは、デバッグオプションが有効なAPKを生成し、Google Chromeを介したデバッグを容易にします。アプリケーションにコード改ざん検出メカニズムが含まれている場合、インストール前にAPKに署名することが重要です。
自動化ツール
クローンプロセスを自動化したい場合、**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
以上にアップグレードしてください。
ペンテスト中のクイックチェック
- デコンパイルされた
AndroidManifest.xml
でandroid:debuggable="true"
を探します。 デバッグ可能なビルドは、chrome://inspect
を介してWebViewを公開し、完全なJS注入を可能にします。 config.xml
をレビューし、過度に許可された<access origin="*">
タグやwww/index.html
内のCSPメタタグが欠けていないか確認します。www/
内でeval(
、new Function(
、またはCSPバイパスをXSSに変える可能性のある動的に構築されたHTMLをgrepします。plugins/
内の埋め込まれたプラグインを特定し、npm audit --production
またはosv-scanner --lockfile
を実行して既知のCVEを見つけます。
動的分析のヒント
リモートWebViewデバッグ
アプリケーションがデバッグモードでコンパイルされている場合(または明示的にWebView.setWebContentsDebuggingEnabled(true)
を呼び出している場合)、Chrome DevToolsを接続できます:
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から行われる呼び出しを監視または改ざんすることができます:
// 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ファイルに
<meta http-equiv="Content-Security-Policy" ...>
タグを追加し、config.xml
で<access>
のオリジンを制限します。 最小限のCSPの例(インラインスクリプトをブロック):
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src 'self' data:; object-src 'none'; frame-ancestors 'none'">
- クリアテキストトラフィックの無効化:
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
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。