Androidの脆弱性を見つけちゃった話
今回はtamaさんのブログ『いまさらブログ』からご寄稿いただきました。
Androidの脆弱性を見つけちゃった話
JVN#53768697 Android OS において任意の Java のメソッドが実行される脆弱性*1が公表されました。
*1:「JVN#53768697 Android OS において任意の Java のメソッドが実行される脆弱性」 2013年12月17日 『JVN』
http://jvn.jp/jp/JVN53768697/index.html
不肖私が昨年9月にIPAに届け出たものです。
これまでは情報非開示依頼があったので多くを語ることができませんでした。
ヤバい内容なのでみんなに注意喚起したかったけれどそれができない苦しさ。
周りでICS端末を使ってる人を見かけたら「事情は言えないけどブラウザにはChromeを使って。標準ブラウザ使わないで」と言うくらいしかできなくて申し訳ありませんでしたm(_ _)m
当時のいきさつを日記から掘り起こして記録に残しておきたいと思います。
2012年9月15日(土)
WebViewを使ったビジネスアプリのフレームワークを作りたいという構想があって(PhoneGapにはないビジネス用の固有の機能を入れようと思って。バーコードリーダーとか印刷機能とか)、そういえばaddJavascriptInterface()がキケンという話があったのでブログ記事*2等を参考に検証してみる。
*2:「AndroidのWebView#addJavascriptInterfaceがどれだけ危険か検証してみたAdd Star」 2012年04月04日 『Kanasansoft Web Lab.』
http://www.kanasansoft.com/weblab/2012/04/webview_addjavascriptinterface_of_android_is_dangerous.html
tama@tamacjp
WebViewのJavaScriptインタフェイスは、透過的にJavaオブジェクトにアクセスできるのね。object として。これは怖い…
2012年09月14日
https://twitter.com/tamacjp/statuses/246652947231027200
tama@tamacjp
わぁ… ContextにアクセスできればホントにstartActivity()まで呼べちゃうんだこれ。Intent作れるしUriも作れるし。こわっ
2012年09月14日
https://twitter.com/tamacjp/statuses/246664023037333505
その頃JCROMをいじっていたので念のためAndroidのソースコードを追いかけてみたら、なんと、WebView自体が内部的にaddJavascriptInterface()と同じことをしているのを発見。え?あれ?
JellyBeanなGalaxyNexusで試してみたら、たしかにそこを入口として標準ブラウザ上でJavaScriptからContextにアクセスできちゃう。当時常用していたGingerbreadなGalaxyNoteでは発生しないのでHoneycombかから?ICSから?JellyBeanから?
tama@tamacjp
あれ、えっと… ICS? JB?
2012年09月14日
https://twitter.com/tamacjp/statuses/246672054252871680
KDDI標準ICSなXOOMでも発生する。
tama@tamacjp
CSのブラウザ…
2012年09月14日
https://twitter.com/tamacjp/statuses/246682797572497408
このときはまだContextにアクセスできることの致命的なヤバさに気付いていなくて、ブラウザからIntent飛ばして他アプリを起動したりandroid.os.BuildやWi-Fi情報を取得できるくらいかなーと思っていたんだけど。
tama@tamacjp
うーん惜しいところまで行ってる気がするけど、、決め手がない
2012年09月14日
https://twitter.com/tamacjp/statuses/246708134444404736
tama@tamacjp
やっぱりマズそうな気がするー><
2012年09月14日
https://twitter.com/tamacjp/statuses/246724276483403776
とは言え脆弱性だと思うので誰かに伝えないと。IPA? AOSP?
ひとまずAOSPに詳しくて信用のできる眼鏡の先生*3にDMで相談。
*3:「Keiji ARIYAMA@keiji_ariyama 」 『twitter』
https://twitter.com/keiji_ariyama
仮眠後に追加検証してみたらRuntime#load()とか呼び出せちゃうのでわりとクリティカルにヤバげな気がしてくる。
1. こっそりSDカードに外部ライブラリ(Android用にビルドした .so)をダウンロード
2. Runtime#load()を呼び出してその外部ライブラリをロード
3. 外部ライブラリのJNI_OnLoad()で任意のネイティブコードが実行される
A山さんのアドバイスでIPAとAndroid Security Teamにメールで報告をすることに。PGPめんどくさいーと言いながらAppleMailのセットアップ(普段はGmailしか使ってないから)
tama@tamacjp
PGP、、めどーい( ̄д ̄)エー
2012年09月14日
https://twitter.com/tamacjp/statuses/246825646347649025
13:57、IPAにソフトウエア製品脆弱性関連情報の届出だん。
16:04、Android Security Teamにもなんちゃって英語メールだん。
一通り今できることは終わった
tama@tamacjp
リリースしたプロダクトに自分のバグを見つけたときのような焦りとぐったり疲労感(‘、3)_ヽ)_ とりあえずできることはしたと思うので支度してお出かけ
2012年09月14日
https://twitter.com/tamacjp/statuses/246870794238570496
2012年9月18日(火)
日本時間9:50にAndroid Security Teamから
This does indeed appear to be a serious issue
というメールが届く。デスヨネー
11:21 にIPAから
取扱い対象かどうかを検討いたします
ていう定型メールが届く。IPAさんにお手紙するの初めてだったのでこんなもんなのかーって感想。もっと早く動いてくれるわけじゃないのね。
2012年9月21日(金)
最初の届出を出してから1週間。ようやくIPAから届出情報受理の連絡(19:18)
これでまぁ、あとはキャリアやGoogleとよろしく調整してくれることでしょう。
tama@tamacjp
やっと、、届出情報受理、とのこと。ふぅ。これでもうあとは向こうでよろしくやってくれると思うのでもうこの件はひとまず忘れよう…
2012年9月21日
https://twitter.com/tamacjp/statuses/249090886435209216
2012年9月22日(土)
週末を使って脆弱性検証の続きをしてみる。
ファイルのコピーができちゃうなー。com.android.browserのプライベートファイルをSDカードにコピーできるし、外部ライブラリからソケット通信でサーバに送ることもできちゃうなー。
それどころかJavaScriptからCookieや保存したパスワード情報とか取り出せるんちゃうか…!(標準ブラウザのソースを読むに、保存時に暗号化とかしてなさそうだった)
JavaScriptの検証コード書いて常用GalaxyNote(検証のためICSにバージョンアップ)でアクセスしてみたら、、
表示された。自分のユーザ名&パスワード。
これはトラウマになる衝撃だった。自分しか知らない、どこにも書き留めていないパスワードが平文で表示されるの。今でも思い出して想像しただけで息が苦しい><
(パスワード保存すんなって話はもっともで、PCのブラウザではパスワード保存していないけれど、モバイル端末はパスワード入力が大変でめんどくさくてつい…)
これは、つまり、あれだよ? このカラクリを仕込んだWebページにICSの標準ブラウザでアクセスすると、DBからユーザ名&パスワード情報やCookieを読み取られて、Ajaxでサーバに送信されてしまう可能性がある。
Cookieを設定すればGmailとか丸見え! ユーザ名&パスワードが保存されていれば勝手にログインしてなりすましできちゃう! /(^o^)\
あかん。これはあかん。
任意のネイティブコードが実行できると言ってもLinuxカーネルレベルのセキュリティはあって、別アプリの情報まで読み書きはできないので大丈夫… みたく思ってたけど、標準ブラウザだけで保存されたパスワードやCookieが読み取れるとなると話が違う。
例えばこんな感じ。
1. 「ICS端末を使ってる人は注意!こんな情報が http://bit.ly/…」みたいなツイートをする
2. 短縮URLのリンク先にあるJavaScriptでCookieやユーザ名&パスワードを取得してサーバにAjax送信
3. その後(自動的に)本当の情報のあるページにリダイレクト
気付かないうちにCookieや(保存していれば)ユーザ名&パスワードが抜かれちゃう。
これからどんどんICS端末が増えていく = 脆弱性のある製品に機種変更する人が増えていく。一歩間違うと(誰かがセンセーショナルに話題にしたりすると)Android終了になりかねないのでは。マズいよう。恐いよう>< 自分が悪いわけじゃないのに「どうしよう、どうしよう…」て抱え込んでた時期。
tama@tamacjp
当初思ってた以上に深刻で、自分のことじゃないのに胃が痛い(´;ω;`)ウッ… どーすんのこれまじで。。
https://twitter.com/tamacjp/statuses/249445342267981824
検証コードと追加情報をIPAとAndroid Security Teamに報告。
2012年9月27日(木)
IPAから
2012年9月27日(起算日)に製品開発者との調整機関である JPCERT/CC から製品開発者へ連絡を開始
との連絡が。初報から12日も経ってるよう><
* * * * *
その後Android 4.2(Jelly Bean)で件の問題が修正されているのを確認したり、ときおりIPAに状況を問い合せたりしながら、結局1年以上かかって昨日(2013年12月17日)JVN公表に至りました。長かった…
この一件で得たもの。
・トラウマ。Android OSいじるの怖くなっちゃった。昨夏はJCROMにいろいろ機能を入れて遊んでいたけれど「またAndroidのバグ見つけたらどうしよう」「自分が脆弱性を入れこんじゃったらどうしよう」という恐怖心を抱くように。
・Androidこえー。オープンソースであんなにみんな見てるはずなのにICSがリリースされてから数ヶ月、件の問題を誰も見つけていなかったの…? そしてメーカーも機種も多様で、今もまだ対策されていない(バージョンアップできない)機種があるわけで、メーカー各社にはがんばっていただきたいです。(ソースが公開されていないiOSの方がもっと恐いのは言うまでもありません。iOSのクリティカルなバグはA社によってもみ消されているかもしれないし今もまだ放置されているかもしれないわけで)
・1年は長い。こんなクリティカルな脆弱性を1年以上も黙ってるのしんどいし、その間みんなキケンに晒されていたわけで。自分が知らない同様なキケンは今もあるのかもって思うとやっぱりコワい。
最初に書いた通り、標準ブラウザを使わなければとりあえず回避できる問題もあります(WebViewを使ったアプリで何かあるとしてもそれはアプリ側の問題)。
Android版Chrome*4を使えば回避できるはずです。
*4:「Chromeブラウザ-Google」 『Google play』
https://play.google.com/store/apps/details?id=com.android.chrome
一人でも多くのICSユーザの方にこの問題を知っていただき、できるかぎり最新OSにバージョンアップして、標準ブラウザは使わずにChromeを使ってもらえるように願います。
こちらのまとめもご一読ください
「Androidの脆弱性(まとめ版)」 2013年12月18日 『いまさらブログ』
http://tama-sand.blogspot.jp/2013/12/android-browser.html
執筆: この記事はtamaさんのブログ『いまさらブログ』からご寄稿いただきました。
寄稿いただいた記事は2013年12月25日時点のものです。
ガジェット通信はデジタルガジェット情報・ライフスタイル提案等を提供するウェブ媒体です。シリアスさを排除し、ジョークを交えながら肩の力を抜いて楽しんでいただけるやわらかニュースサイトを目指しています。 こちらのアカウントから記事の寄稿依頼をさせていただいております。
TwitterID: getnews_kiko
- ガジェット通信編集部への情報提供はこちら
- 記事内の筆者見解は明示のない限りガジェット通信を代表するものではありません。