Android 4.2版本如下使用WebView组件addJavascriptInterface方法存在JS漏洞

JS注入漏洞存在的Android版本:Android < 4.2javascript


综述:
Android的SDK中提供了一个WebView组件,用于在应用中嵌入一个浏览器来进行网页浏览。WebView组件中的addJavascriptInterface方法用于实现本地Java和JavaScript的交互。这个方法能够经过js脚本在本地执行任意Java代码,从而以当前用户身份执行任意命令。

尽管Android官方已经提醒了此功能在访问不可信网页内容时存在严重安全风险,不少应用开发人员仍未意识到此问题,大量Android应用特别是浏览器应用受到此问题影响,可能被攻击者利用来进行对Android移动终端进行网页挂马等恶意攻击行为。

分析:
Android下不少应用在使用WebView访问html页面时都会调用addJavascriptInterface方法,这类应用程序通常都会有相似以下的代码:html

webView.addJavascriptInterface(javaObj, "jsObj");

此段代码将javaObj对象暴露给js脚本,能够经过jsObj对象对其进行引用,调用javaObj的方法。
结合Java的反射机制能够经过js脚本执行任意Java代码,相关代码以下:java

<script>
  function execute(cmdArgs) {
      return jsobj.getClass().forName("java.lang.Runtime").getMethod("getRuntime",null).invoke(null,null).exec(cmdArgs);
  }
  execute(someCmd);
</script>

当受影响的应用程序执行到上述脚本的时候,就会执行someCmd指定的命令。
Android系统下许多应用程序(浏览器,微博等)使用webView进行界面展现,都有可能受到此问题的影响。
攻击者能够经过诱使受害者打开恶意网页、浏览恶意微博或者向受害者发送恶意邮件等方式来利用此漏洞,获取用户敏感信息、控制用户系统。

应对方案:web


APP研发者:
1. 确保只在访问可信页面数据时才使用addjavascriptInterface。 
2. 在调用Java对象方法前对参数进行检查,避免执行恶意操做。
3. 对于在4.2(API 17+)系统运行的应用,使用JavascriptInterface代替addjavascriptInterface。
4. 限制对于该接口的使用来源,只容许可信来源访问该接口。例如使用WebViewClient中的shouldOverrideUrlLoading()来对加载的URL进行检查。

APP使用者:
1. 关注应用厂商更新状况,尽快升级应用程序到最新版本。
2. 在厂商修补前,用户应尽可能避免使用应用浏览不可信的网页连接和邮件。

Android 官方:
Android官方已提醒此功能是有安全风险的,在可能访问不可信网页内容时须要当心处理。
Android 4.2 (api 17)已经开始采用JavascriptInterface代替addjavascriptInterface。api

相关文章
相关标签/搜索