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

相關文章
相關標籤/搜索