addJavaScriptInterface Remote Code Execution.
addJavaScriptInterface 远程代码执行
描述
在 API 级别 JELLY_BEAN 或更低版本上的 addJavascriptInterface() 方法可能被通过反射(reflection)滥用,从而在正在运行的应用程序的上下文中远程执行命令。
addJavascriptInterface 方法将 WebView 中提供的 Java 对象暴露给 JavaScript。对于针对低于 17 的 API 级别编译或链接的应用程序,可以访问所有公共方法(包括继承的方法)。通过使用反射,还可以调用任何其他未注册的 Java 类。
建议
此问题已在为 Android 4.2(API 级别 17)及更高版本开发的应用程序中得到解决。从 Android 4.2(API 级别 17)及更高版本开始,只有明确标记有 @JavascriptInterface 注释的方法才可供 WebView 中的 JavaScript 代码使用。@JavascriptInterface 注释必须添加到打算通过原生桥(native bridge)公开的任何方法中(该方法也必须是公共的)。下面给出了一个示例:
@JavascriptInterfacepublic void method() {dostuff();}
要解决该问题,您需要针对 API 17 或更高版本构建您的应用程序并重新分发。用户将需要升级其应用程序以使用无漏洞的新应用程序。
链接
- DRD13. Do not provide addJavascriptInterface method access in a WebView which could contain untrusted content. (API level JELLY_BEAN or below)
- CVE-2013-4710
- WithSecure Labs
- Metasploit Public Exploit
标准
- OWASP_MASVS_L1:
- MSTG_PLATFORM_7
- OWASP_MASVS_L2:
- MSTG_PLATFORM_2
- GDPR:
- ART_5
- ART_32
- PCI_STANDARDS:
- REQ_2_2
- REQ_6_2
- REQ_6_3
- REQ_11_3
- OWASP_MASVS_v2_1:
- MASVS_PLATFORM_2
- MASVS_CODE_4
- SOC2_CONTROLS:
- CC_2_1
- CC_4_1
- CC_7_1
- CC_7_2
- CC_7_4
- CC_7_5
- HIPAA_CONTROLS:
- SECURITY212
- SECURITY213
- SECURITY255
- SECURITY258