Translated ['src/mobile-pentesting/cordova-apps.md'] to zh

This commit is contained in:
Translator 2025-07-22 18:11:32 +00:00
parent 5313af0e97
commit 2fa966264d

View File

@ -4,7 +4,7 @@
**有关更多详细信息,请查看 [https://infosecwriteups.com/recreating-cordova-mobile-apps-to-bypass-security-implementations-8845ff7bdc58](https://infosecwriteups.com/recreating-cordova-mobile-apps-to-bypass-security-implementations-8845ff7bdc58)**。这是一个总结: **有关更多详细信息,请查看 [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 应用程序
@ -12,7 +12,7 @@ Apache Cordova 以支持使用 **JavaScript、HTML 和 CSS** 开发 **混合应
考虑一个名为 `Bank.apk` 的示例应用程序,其包名为 `com.android.bank`。要访问源代码,请解压 `bank.apk` 并导航到 `bank/assets/www` 文件夹。该文件夹包含应用程序的完整源代码,包括 HTML 和 JS 文件。应用程序的配置可以在 `bank/res/xml/config.xml` 中找到。 考虑一个名为 `Bank.apk` 的示例应用程序,其包名为 `com.android.bank`。要访问源代码,请解压 `bank.apk` 并导航到 `bank/assets/www` 文件夹。该文件夹包含应用程序的完整源代码,包括 HTML 和 JS 文件。应用程序的配置可以在 `bank/res/xml/config.xml` 中找到。
要克隆应用程序,请按照以下步骤操作: 要克隆应用程序,请按照以下步骤操作:
```bash ```bash
npm install -g cordova@latest npm install -g cordova@latest
cordova create bank-new com.android.bank Bank cordova create bank-new com.android.bank Bank
@ -44,10 +44,82 @@ cordova requirements
cd bank-new cd bank-new
cordova build android — packageType=apk 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` 的开发者机器都应视为已被攻陷。审计 `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` 中是否存在过于宽松的 `<access origin="*">` 标签或在 `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文件中添加 `<meta http-equiv="Content-Security-Policy" ...>` 标签,并在 `config.xml` 中限制 `<access>` 来源。
示例最小CSP阻止内联脚本
```html
<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插件深度链接XSS
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}