Cordova Apps
Reading time: 10 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 群组 或 Telegram 群组 或 在 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 文档 提供了这些安装的全面指南。
考虑一个名为 Bank.apk
的示例应用程序,其包名为 com.android.bank
。要访问源代码,请解压 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
的开发者机器都应视为已被攻陷。审计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
或更高版本。
渗透测试期间的快速检查
- 在反编译的
AndroidManifest.xml
中查找android:debuggable="true"
。 可调试构建通过chrome://inspect
暴露 WebView,允许完全的 JS 注入。 - 审查
config.xml
中是否存在过于宽松的<access origin="*">
标签或在www/index.html
中缺失的 CSP 元标签。 - 在
www/
中 grepeval(
、new Function(
或动态构建的 HTML,这可能将 CSP 绕过转变为 XSS。 - 识别
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 ⇄ Native 桥接
大多数插件的 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和允许列表: 在每个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插件深度链接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 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。