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


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


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

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

    分析:
    Android下很多应用在使用WebView访问html页面时都会调用addJavascriptInterface方法,这类应用程序一般都会有类似如下的代码:

    webView.addJavascriptInterface(javaObj, "jsObj");

    此段代码将javaObj对象暴露给js脚本,可以通过jsObj对象对其进行引用,调用javaObj的方法。
    结合Java的反射机制可以通过js脚本执行任意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进行界面展示,都有可能受到此问题的影响。
    攻击者可以通过诱使受害者打开恶意网页、浏览恶意微博或者向受害者发送恶意邮件等方式来利用此漏洞,获取用户敏感信息、控制用户系统。

    应对方案:


    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。

  • 相关阅读:
    25.清除浮动的方法
    23、flex响应式布局原理
    22.垂直上下居中的方法
    web自动化测试(十二)----类似日期选择框
    web自动化测试(十一)------滚动条
    web自动化测试(九)---下拉列表
    web自动化测试(八)---鼠标操作
    web自动化测试(五)——xpath定位
    【C++】《C++ Primer 》第十五章
    【C++】《C++ Primer 》第十四章
  • 原文地址:https://www.cnblogs.com/renhui/p/5899520.html
Copyright © 2020-2023  润新知