# Cordova Apps {{#include ../banners/hacktricks-training.md}} **有关更多详细信息,请查看 [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 代码,提供更好的源代码保护。 ### 克隆 Cordova 应用程序 在克隆 Cordova 应用程序之前,请确保已安装 NodeJS 以及 Android SDK、Java JDK 和 Gradle 等其他先决条件。官方 Cordova [文档](https://cordova.apache.org/docs/en/11.x/guide/cli/#install-pre-requisites-for-building) 提供了这些安装的全面指南。 考虑一个名为 `Bank.apk` 的示例应用程序,其包名为 `com.android.bank`。要访问源代码,请解压 `bank.apk` 并导航到 `bank/assets/www` 文件夹。该文件夹包含应用程序的完整源代码,包括 HTML 和 JS 文件。应用程序的配置可以在 `bank/res/xml/config.xml` 中找到。 要克隆应用程序,请按照以下步骤操作: ```bash 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](https://cordova.apache.org/docs/en/11.x/guide/platforms/android/)。 要确定适当的 Cordova Android 平台版本,请检查原始应用程序的 `cordova.js` 文件中的 `PLATFORM_VERSION_BUILD_LABEL`。 设置平台后,安装所需的插件。原始应用程序的 `bank/assets/www/cordova_plugins.js` 文件列出了所有插件及其版本。逐个安装每个插件,如下所示: ```bash cd bank-new cordova plugin add cordova-plugin-dialogs@2.0.1 ``` 如果插件在 npm 上不可用,可以从 GitHub 获取: ```bash cd bank-new cordova plugin add https://github.com/moderna/cordova-plugin-cache.git ``` 确保在编译之前满足所有先决条件: ```bash cd bank-new cordova requirements ``` 要构建APK,请使用以下命令: ```bash cd bank-new cordova build android — packageType=apk ``` 此命令生成一个启用调试选项的 APK,便于通过 Google Chrome 进行调试。在安装之前签署 APK 是至关重要的,特别是如果应用程序包含代码篡改检测机制。 ### 自动化工具 对于那些希望自动化克隆过程的人,**[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` 的开发者机器都应视为已被攻陷。审计 `package.json`/`package-lock.json` 以查找意外的 Cordova 插件,并固定可信版本。 [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/` 中 grep `eval(`、`new Function(` 或动态构建的 HTML,这可能将 CSP 绕过转变为 XSS。 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 ⇄ Native 桥接 大多数插件的 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和允许列表:** 在每个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插件深度链接XSS {{#include ../banners/hacktricks-training.md}}