Submit Search
バグハンターの哀しみ
•
69 likes
•
48,491 views
Masato Kinugawa
Follow
AVTOKYO2015の発表資料です。
Read less
Read more
1 of 59
Download now
Downloaded 56 times
More Related Content
バグハンターの哀しみ
1.
バグハンター の哀しみ Masato Kinugawa か な
2.
自己紹介 Masato Kinugawa 孤独のバグハンター XSSだけが友達
3.
普段のお仕事 職場 自宅 勤務時間 やる気がある時 仕事
セキュリティバグを探す 収入 Bug Bounty ➡これだけでやっていける?
4.
去年の年収
5.
去年の年収 41050707 円
6.
去年の年収 41050707 円 (8進数)
7.
あかるい話は ここまでだ!
8.
話すこと 前 インターネットを 止められた話 後 哀しいバグ
9.
インターネットを 止められた話
10.
概要 BenesseのサイトのXSSを探した 自宅のネット回線がとまった 紆余曲折あり ➡なぜBenesseのXSSを探していたか?
11.
2013年夏 U+2028/2029を使ったDOM based XSS の可能性に気付いた http://masatokinugawa.l0.cm/2013/09/u2028 u2029.domxss.html アバウトな正規表現を書くと簡単にハマる 詳細はBlogで:U+2028/2029とDOM
based XSS 影響を調べていた ハマってる人多いかも? ということで
12.
調査方法 ❶ URLの#以降にU+2028とDOM based XSSが起き得る文字列をつけて まわる ❷
変なエラーがでないかみる http://host/#[U+2028]'"><svg/onload=alert(1)>
13.
すると Benesseのサイトにメチャ普通のDOM based XSSがあった https://web.archive.org/web/20130723155109/http://manabi.benes se.ne.jp/#"><svg/onload=alert(1)> function writeAccesskeyForm(){ var
htm = ''; var ownURI = location.href; //略 htm+= '<input type="hidden" name="backurl" value="' + ownURI + '">'; //略 document.write(htm); } writeAccesskeyForm();
14.
それから 2013/08/05 報告 2013/08/06 応答 "この度は、「Benesseマナビジョン」の脆弱性をご指摘 いただき、誠にありがとうございます。
至急こちらでも 事実を確認の上、対応を進めるようにいたします。 この 度はご連絡いただき誠にありがとうございました。" 2013/8下旬 修正を確認
15.
この対応を受け 修正する姿勢、 報告を受け入れる姿勢を感じた 別のとこも探して報告しよう! これが XSS-Nightmare の はじまりであった…
16.
探した 普通のReflected XSSがすぐみつかった この度は、新たに3件のXSS脆弱性をご指摘いただき 、 誠にありがとうございます。
今回についても弊社 でも事実確認の上、 鋭意対策を進めさせていただき ます。 前回に引き続き、大変貴重なご指摘を賜りま したこと、 重ねがさね御礼申し上げます。 2013/08/28 報告 2013/08/30 応答
17.
同じころ manabi.benesse.ne.jpに突然アクセス できなくなる IPを変えるとアクセスできるようになる 詳しくみると ➡検査のリクエストが原因で アクセス拒否してる?
18.
そういうこともあるだろう (問題の報告のついでに)一応連絡: 「検査のリクエストでアク禁してるかもし れないけど報告の通りなのでよろしく」 後日 修正が不適切であるとのこと、 ご指摘ありがとう ございます。 確認・検討のうえ、
対応を進めさせ ていただきます。 誠にありがとうざいました。 ➡アク禁のことはスルー まあ伝わっているよね
19.
その後も報告を続ける 修正方法が悪く何度も不完全だと伝える その確認のたびにアクセス拒否… IPを変更して確認を繰り返す
20.
そして 2013/9/7夕方に事件は起きた
21.
なにが起きた?! 最初は障害や機器の故障を疑った ところがどれも違う プロバイダのメールを見ると 警告がきていることに気付く そこから不審なアクセスがあった、ウイルスに 感染などして踏み台になっていないか
22.
不審なアクセス 思い当たると言えば思い当たる 警告メールの前後に脆弱性を検査・ 報告したサービス: Google、excite、Benesse (というか、日頃やっていること、 アクセスだけみたら全部不審) ➡これまで報告していなかったサービス アクセス拒否もあるし、どう考えても怪しい
23.
ねじれ ご指摘、誠にありがとうございます。 9月6日、9月7 日にいただきましたメールの内容についても 弊社でも 確認のうえ、鋭意対策を進めさせていただきます。
た いへん貴重なご指摘を賜りましたこと、 重ねがさね御 礼申し上げます。 9月9日、返信では相変わらず感謝:
24.
@niftyからお手紙が届く 攻撃行為をしないという誓約書が同封 待ってくれ、違うんだ…
25.
Benesse/@niftyに 電話でコンタクト 両「セキュリティ上の理由で答えられない」 僕「家のネットが止まって困っている。 事実関係を確認させてほしい。」
26.
らちが明かない!! まともに仕事ができないのでWiMAXを契約 テザリングを使ってすがる思いでBlogに書く もうだめだ… そんなときに現れた救世主 それが http://masatokinugawa.l0.cm/2013/09/xss.benesse.html たぶんXSSが理由でインターネットがとまった
27.
徳丸先生である!
28.
DMを頂く ブログ読みました。この件について、 ベネッセと連絡をとっています。メー ルアドレスを教えて頂けますか? あなたが神か!
29.
その後のやりとり ベネッセはセキュリティ業者に侵入 検知システムの運用を委託していて、 攻撃を検知すると、ブロックやISP への連絡をしているそう。 ふむふむ
30.
その後のやりとり そのフローにひっかかり、 IPS(侵入防止システム)検知 ➡ セキュリティベンダの監視 ➡ ISPへの連絡 ➡
ISPによる遮断 となったようだ なるほど~
31.
その後のやりとり やりとりの結果、ベネッセからISPに 連絡することは可能と言われた。 報告時点のIPアドレスを教えてもらえ れば報告と照合するとのこと。 ええ、記録あるかな…
32.
あった 日頃、自ドメイン(vulnerabledoma.in)で ブラウザの動作テストをしているので、 自分のアクセスが毎日のようにあった! 8月28日: XX.X.XX.2 8月29日: XX.X.XX.25 8月30日:
XX.X.XX.195 8月31日: XX.X.XX.14 9月01日: XX.X.XX.14 .... こんなかんじです:
33.
連絡後 「不正アクセス情報の取り下げ」 および「停止についての解除のお願 い」をしたとのこと。あとはプロバイ ダの判断になる。 ありがたい・・
34.
そしてついに 感涙 9月13日夕方(停止から約1週間)、 インターネット再開!
35.
改めて 徳丸さんの協力なしには自力で事情を 説明することは難しかったです。 この時は本当にありがとうございました! ※ みみりん では ありません
36.
そんな徳丸先生の本が 絶賛発売中だ! http://www.amazon.co.jp/dp/ 4822279987/ http://www.amazon.co.jp/dp/ 4797361190/ 今すぐ購入!!
37.
大きな会社の中は複雑 なんだろうなぁ… 問題を通して感じたこと そりゃ情報の持ち出し も起こるよな…
38.
他人事ではない あなたにBenesseのサイトへXSSっぽい リクエストを送らせるリンクを送る http://manabi.beness(略)/?<script>alert(1)</script> サイトが利用不可に 最悪インターネットが止まる?! あなたがアクセス ※危険なのでリンクできない
39.
侵入検知会社の間違い 攻撃かどうかを精査していない 攻撃の性質を理解していない XSSの対処にIPブロックする意味を問いたい サイト全体を止める方がまだわかる 今回は報告と照合すれば済んだはず 根は遠隔操作事件の問題に近い? ➡根本を修正する手助けをするべき XSSの対処にはそれしかないと思う
40.
XSSの脅威 勝手な操作の実行 機密情報の奪取 ページ内容変更によるフィッシング
41.
XSSの脅威 勝手な操作の実行 機密情報の奪取 ページ内容変更によるフィッシング ネット回線の停止
42.
教訓:世の中には つついてはいけないものがある
43.
実は最近も止められた! 料金の未納で。 (勘違いで手続きができてなかった)
44.
世間は厳しい…
45.
哀しいバグ
46.
ネット再開後 Benesseに事前にIPアドレスを伝えれば、 検査をしてもよいということになった 100件近い脆弱性を報告 (全てをわずかな期間で修正してくれた。 この姿勢は本当に素晴らしい。) その結果 ➡今回はこの中から2つ紹介!
47.
DOM based XSS
❶ https://web.archive.org/web/20130904143057/http://www. benesse.co.jp/s/land/pass/ jQuery("#nav-pw li a, a.tab-link") .bind("click touchstart", function(event){ setTimeout(function(){ hash = location.hash; if (hash != "" && jQuery(hash).length) { //省略 } }, 500); });
48.
DOM based XSS
❶ 特定のリンクのクリック時に イベント を動作させる jQuery("#nav-pw li a, a.tab-link") .bind("click touchstart", function(event){ ...
49.
特定のリンク <div id="nav-pw"> <ul> <li id="nav-first"><a
href="#first-login"><img src="img/nav_pw_01.png" width="260" height="50" alt=" はじめてログインするかたへ"></a></li> <li id="nav-passmodif"><a href="#passmodif"><img src="img/nav_pw_02.png" width="270" height="50" alt=" パスワードを変更(へんこう)したい"></a></li> <li id="nav-passlost"><a href="#passlost"><img src="img/nav_pw_03.png" width="270" height="50" alt=" パスワードを忘(わす)れたので再発行(さいはっこう)したい ... jQuery("#nav-pw li a, a.tab-link") どれも # へのリンク
50.
これを踏まえ jQuery("#nav-pw li a,
a.tab-link") .bind("click touchstart", function(event){ setTimeout(function(){ hash = location.hash; if (hash != "" && jQuery(hash).length) { //省略 } }, 500); }); もう一度よくみてほしい
51.
これを踏まえ jQuery("#nav-pw li a,
a.tab-link") .bind("click touchstart", function(event){ setTimeout(function(){ hash = location.hash; if (hash != "" && jQuery(hash).length) { //省略 } }, 500); }); 0.5秒の間にhashは変えられる! もう一度よくみてほしい
52.
現在のソース hash = location.hash; //
2013.10.4 XSS対応 if(hash == "#first-login"|| hash == "#passmodif" || hash == "#passlost") { }else { hash = ""; } if (hash != "" && jQuery(hash).length) { ... http://www.benesse.co.jp/s/land/pass/ 内のtabs.jsを参照 !
53.
DOM based XSS
❷ <script type="text/javascript"> $(document).ready(function(){ result = "./answer/answer_" + $.query.get('result') + ".html"; $("#answer_box").load(result); }); </script> ... <div id="answer_box"></div> resultというパラメータからパスを組立→ そのURLのレスポンスをページに書き出す
54.
DOM based XSS
❷ パスは同一ドメイン内に制限、セーフ? <script type="text/javascript"> $(document).ready(function(){ result = "./answer/answer_" + $.query.get('result') + ".html"; $("#answer_box").load(result); }); </script> ... <div id="answer_box"></div> https://web.archive.org/web/20120329044331/http://wm.benesse.ne.jp/ contents/oyashindan/answer.html?
55.
No! 同じドメインでユーザのアップロードする アバター画像をホストしている 画像のコメント領域などに<script>…とか書い ておけばそのままの内容をアップロード
56.
こうすれば /vulnpage?result=/../../../../uploads/profile/icon.jpg%23 $(document).ready(function(){ result = "./answer/answer_"
+ $.query.get('result') + ".html"; $("#answer_box").load(result); }); ➡画像のバイナリをページ内に書き出す
57.
DEMO http://vulnerabledoma.in/avtokyo2015/
58.
まとめ これからもできるだけ皆さんに迷惑を かけないようバグを探しますので どうぞよろしくお願いします
59.
@kinugawamasato masatokinugawa [at]gmail.com Thanks!
Download