こちらは長いので、ざっくりバッサリ、なるべく簡潔に、何ができちゃうのか・何がヤバいのかをまとめます。
【原因】
WebViewの addJavascriptInterface()の危険性(参考)が、Android 3.x/4.0/4.1 ではWebViewそのものに存在する。
このためWebViewをそのまま使っているアプリや、WebViewのラッパにすぎない標準ブラウザに同様の脆弱性がある。(Android版ChromeはWebViewを使っていないので問題ないです)
【何ができてしまうか】
JVNに書かれている通り
Android 標準ブラウザや WebView クラスを利用しているアプリで、細工されたウェブページを閲覧した際に、ユーザの意図に反して Android OS の機能を起動されたり、任意のコードを実行されたりする可能性があります。なのですが、標準ブラウザでできてしまうことの一例を具体的に挙げてみます。
- Intentを飛ばして他アプリを起動できる
- Androidの端末情報を読み込まれてしまう(Android.os.BuildやWi-Fi情報など)
- アクセスしただけでこっそりファイルをダウンロードされる
- 外部ライブラリを実行できる(任意のネイティブコードを実行できる)
- こっそりダウンロードと組み合わせたら…((((;゚Д゚))))
- 標準ブラウザが保持しているCookieやユーザ名・パスワードを読み込まれてしまう
- それをAjax等でサーバに送ることもできるので…((((;゚Д゚))))
【あかんコード】
Androidのソースを追っていて「!!!」となったのはこの一行。
お察しください。
【対策】
- 最新版OSを使ってください。各メーカーが提供している最新OSを使ってください。
- 標準ブラウザを使わないでください。Android版Chromeなら大丈夫です。WebViewも使われていないはずです。※他のブラウザソフトは表示エンジンにWebViewを使っている可能性があるので安全とは言いきれません。
個人的にはWebView全般に影響があることよりも標準ブラウザに穴があるということの方がインパクトが大きい気がしています。危険なアプリを入れなくても、普通にブラウザを使っているだけで悪意あるコードが実行されたりブラウザが持っている情報(Cookieなど)が抜かれてしまうので。。