1. 问题说明
Android 系统通过 WebView.addJavascriptInterface 方法注册可供 JavaScript 调用的 Java 对象,以用于增强 JavaScript 的功能。但是系统并没有对注册 Java 类的方法调用进行限制,导致攻击者可以利用反射机制调用未注册的其它任何 Java 类,最终使得 JavaScript 能力的无限增强。攻击者利用该漏洞可以根据客户端执行任意代码。
2. 测试步骤
Webview 代码执行漏洞出现在安卓 2.1~4.3.1 版本,检查 targetSdkVersion、minSdkVersion(MobSF),若 targetsdkVersion>=19 或通过 minSdkVersion 进行限制则无此问题。
在 XML 文件下查看 targetsdkVersion 的值,新版的 Jadx 中也可以直接看到。
相关 drozer 命令:
>run scanner.misc.checkjavascriptbridge -a 包名
3. 修复建议
- 使用 removeJavascriptInterface(“searchBoxJavaBridge”) 移除 searchBoxJavaBridge、accessibility、accessibilityTraversal 对象
- 确保只在访问可信页面数据时才使用 addjavascriptInterface。
- 在调用 Java 对象方法前对参数进行检查,避免执行恶意操作。
- 对于在 4.2(API 17+) 系统运行的应用,使用 JavascriptInterface 代替 addjavascriptInterface。
- 限制对于该接口的使用来源,只允许可信来源访问该接口。例如使用 WebViewClient 中的 shouldOverrideUrlLoading() 来对加载的 URL 进行检查。