SlideShare une entreprise Scribd logo
1  sur  59
Télécharger pour lire hors ligne
バグハンター
の哀しみ
Masato Kinugawa
か な
自己紹介
Masato Kinugawa
孤独のバグハンター
XSSだけが友達
普段のお仕事
職場 自宅
勤務時間 やる気がある時
仕事 セキュリティバグを探す
収入 Bug Bounty
➡これだけでやっていける?
去年の年収
去年の年収
41050707 円
去年の年収
41050707 円
(8進数)
あかるい話は
ここまでだ!
話すこと
前
インターネットを
止められた話
後 哀しいバグ
インターネットを
止められた話
概要
BenesseのサイトのXSSを探した
自宅のネット回線がとまった
紆余曲折あり
➡なぜBenesseのXSSを探していたか?
2013年夏
U+2028/2029を使ったDOM based XSS
の可能性に気付いた
http://masatokinugawa.l0.cm/2013/09/u2028
u2029.domxss.html
アバウトな正規表現を書くと簡単にハマる
詳細はBlogで:U+2028/2029とDOM based XSS
影響を調べていた
ハマってる人多いかも?
ということで
調査方法
❶ URLの#以降にU+2028とDOM
based XSSが起き得る文字列をつけて
まわる
❷ 変なエラーがでないかみる
http://host/#[U+2028]'"><svg/onload=alert(1)>
すると
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();
それから
2013/08/05 報告
2013/08/06 応答
"この度は、「Benesseマナビジョン」の脆弱性をご指摘
いただき、誠にありがとうございます。 至急こちらでも
事実を確認の上、対応を進めるようにいたします。 この
度はご連絡いただき誠にありがとうございました。"
2013/8下旬 修正を確認
この対応を受け
修正する姿勢、
報告を受け入れる姿勢を感じた
別のとこも探して報告しよう!
これが XSS-Nightmare の
はじまりであった…
探した
普通のReflected XSSがすぐみつかった
この度は、新たに3件のXSS脆弱性をご指摘いただき
、 誠にありがとうございます。 今回についても弊社
でも事実確認の上、 鋭意対策を進めさせていただき
ます。 前回に引き続き、大変貴重なご指摘を賜りま
したこと、 重ねがさね御礼申し上げます。
2013/08/28 報告
2013/08/30 応答
同じころ
manabi.benesse.ne.jpに突然アクセス
できなくなる
IPを変えるとアクセスできるようになる
詳しくみると
➡検査のリクエストが原因で
アクセス拒否してる?
そういうこともあるだろう
(問題の報告のついでに)一応連絡:
「検査のリクエストでアク禁してるかもし
れないけど報告の通りなのでよろしく」
後日
修正が不適切であるとのこと、 ご指摘ありがとう
ございます。 確認・検討のうえ、 対応を進めさせ
ていただきます。 誠にありがとうざいました。
➡アク禁のことはスルー
まあ伝わっているよね
その後も報告を続ける
修正方法が悪く何度も不完全だと伝える
その確認のたびにアクセス拒否…
IPを変更して確認を繰り返す
そして
2013/9/7夕方に事件は起きた
なにが起きた?!
最初は障害や機器の故障を疑った
ところがどれも違う
プロバイダのメールを見ると
警告がきていることに気付く
そこから不審なアクセスがあった、ウイルスに
感染などして踏み台になっていないか
不審なアクセス
思い当たると言えば思い当たる
警告メールの前後に脆弱性を検査・
報告したサービス:
Google、excite、Benesse
(というか、日頃やっていること、
アクセスだけみたら全部不審)
➡これまで報告していなかったサービス
アクセス拒否もあるし、どう考えても怪しい
ねじれ
ご指摘、誠にありがとうございます。 9月6日、9月7
日にいただきましたメールの内容についても 弊社でも
確認のうえ、鋭意対策を進めさせていただきます。 た
いへん貴重なご指摘を賜りましたこと、 重ねがさね御
礼申し上げます。
9月9日、返信では相変わらず感謝:
@niftyからお手紙が届く
攻撃行為をしないという誓約書が同封
待ってくれ、違うんだ…
Benesse/@niftyに
電話でコンタクト
両「セキュリティ上の理由で答えられない」
僕「家のネットが止まって困っている。
事実関係を確認させてほしい。」
らちが明かない!!
まともに仕事ができないのでWiMAXを契約
テザリングを使ってすがる思いでBlogに書く
もうだめだ…
そんなときに現れた救世主 それが
http://masatokinugawa.l0.cm/2013/09/xss.benesse.html
たぶんXSSが理由でインターネットがとまった
徳丸先生である!
DMを頂く
ブログ読みました。この件について、
ベネッセと連絡をとっています。メー
ルアドレスを教えて頂けますか?
あなたが神か!
その後のやりとり
ベネッセはセキュリティ業者に侵入
検知システムの運用を委託していて、
攻撃を検知すると、ブロックやISP
への連絡をしているそう。
ふむふむ
その後のやりとり
そのフローにひっかかり、
IPS(侵入防止システム)検知
➡ セキュリティベンダの監視
➡ ISPへの連絡
➡ ISPによる遮断 となったようだ
なるほど~
その後のやりとり
やりとりの結果、ベネッセからISPに
連絡することは可能と言われた。
報告時点のIPアドレスを教えてもらえ
れば報告と照合するとのこと。
ええ、記録あるかな…
あった
日頃、自ドメイン(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
....
こんなかんじです:
連絡後
「不正アクセス情報の取り下げ」
および「停止についての解除のお願
い」をしたとのこと。あとはプロバイ
ダの判断になる。
ありがたい・・
そしてついに
感涙
9月13日夕方(停止から約1週間)、
インターネット再開!
改めて
徳丸さんの協力なしには自力で事情を
説明することは難しかったです。
この時は本当にありがとうございました!
※ みみりん では
ありません
そんな徳丸先生の本が
絶賛発売中だ!
http://www.amazon.co.jp/dp/
4822279987/
http://www.amazon.co.jp/dp/
4797361190/
今すぐ購入!!
大きな会社の中は複雑
なんだろうなぁ…
問題を通して感じたこと
そりゃ情報の持ち出し
も起こるよな…
他人事ではない
あなたにBenesseのサイトへXSSっぽい
リクエストを送らせるリンクを送る
http://manabi.beness(略)/?<script>alert(1)</script>
サイトが利用不可に
最悪インターネットが止まる?!
あなたがアクセス
※危険なのでリンクできない
侵入検知会社の間違い
攻撃かどうかを精査していない
攻撃の性質を理解していない
XSSの対処にIPブロックする意味を問いたい
サイト全体を止める方がまだわかる
今回は報告と照合すれば済んだはず
根は遠隔操作事件の問題に近い?
➡根本を修正する手助けをするべき
XSSの対処にはそれしかないと思う
XSSの脅威
勝手な操作の実行
機密情報の奪取
ページ内容変更によるフィッシング
XSSの脅威
勝手な操作の実行
機密情報の奪取
ページ内容変更によるフィッシング
ネット回線の停止
教訓:世の中には
つついてはいけないものがある
実は最近も止められた!
料金の未納で。
(勘違いで手続きができてなかった)
世間は厳しい…
哀しいバグ
ネット再開後
Benesseに事前にIPアドレスを伝えれば、
検査をしてもよいということになった
100件近い脆弱性を報告
(全てをわずかな期間で修正してくれた。
この姿勢は本当に素晴らしい。)
その結果
➡今回はこの中から2つ紹介!
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);
});
DOM based XSS ❶
特定のリンクのクリック時に イベント
を動作させる
jQuery("#nav-pw li a, a.tab-link")
.bind("click touchstart", function(event){
...
特定のリンク
<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")
どれも # へのリンク
これを踏まえ
jQuery("#nav-pw li a, a.tab-link")
.bind("click touchstart", function(event){
setTimeout(function(){
hash = location.hash;
if (hash != "" && jQuery(hash).length) {
//省略
}
}, 500);
});
もう一度よくみてほしい
これを踏まえ
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は変えられる!
もう一度よくみてほしい
現在のソース
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を参照
!
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のレスポンスをページに書き出す
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?
No!
同じドメインでユーザのアップロードする
アバター画像をホストしている
画像のコメント領域などに<script>…とか書い
ておけばそのままの内容をアップロード
こうすれば
/vulnpage?result=/../../../../uploads/profile/icon.jpg%23
$(document).ready(function(){
result = "./answer/answer_" +
$.query.get('result') + ".html";
$("#answer_box").load(result);
});
➡画像のバイナリをページ内に書き出す
DEMO
http://vulnerabledoma.in/avtokyo2015/
まとめ
これからもできるだけ皆さんに迷惑を
かけないようバグを探しますので
どうぞよろしくお願いします
@kinugawamasato
masatokinugawa
[at]gmail.com
Thanks!

Contenu connexe

Tendances

Tendances (20)

PWNの超入門 大和セキュリティ神戸 2018-03-25
PWNの超入門 大和セキュリティ神戸 2018-03-25PWNの超入門 大和セキュリティ神戸 2018-03-25
PWNの超入門 大和セキュリティ神戸 2018-03-25
 
ウェブセキュリティのありがちな誤解を解説する
ウェブセキュリティのありがちな誤解を解説するウェブセキュリティのありがちな誤解を解説する
ウェブセキュリティのありがちな誤解を解説する
 
とある診断員とSQLインジェクション
とある診断員とSQLインジェクションとある診断員とSQLインジェクション
とある診断員とSQLインジェクション
 
ウェブ・セキュリティ基礎試験(徳丸基礎試験)の模擬試験問題
ウェブ・セキュリティ基礎試験(徳丸基礎試験)の模擬試験問題ウェブ・セキュリティ基礎試験(徳丸基礎試験)の模擬試験問題
ウェブ・セキュリティ基礎試験(徳丸基礎試験)の模擬試験問題
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
初心者向けCTFのWeb分野の強化法
初心者向けCTFのWeb分野の強化法初心者向けCTFのWeb分野の強化法
初心者向けCTFのWeb分野の強化法
 
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
TLS, HTTP/2演習
TLS, HTTP/2演習TLS, HTTP/2演習
TLS, HTTP/2演習
 
セキュリティを楽しむ(CTFとbugbountyの始め方)
セキュリティを楽しむ(CTFとbugbountyの始め方)セキュリティを楽しむ(CTFとbugbountyの始め方)
セキュリティを楽しむ(CTFとbugbountyの始め方)
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
 
リクルート式 自然言語処理技術の適応事例紹介
リクルート式 自然言語処理技術の適応事例紹介リクルート式 自然言語処理技術の適応事例紹介
リクルート式 自然言語処理技術の適応事例紹介
 
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
 
若手エンジニアのためのセキュリティ講座
若手エンジニアのためのセキュリティ講座若手エンジニアのためのセキュリティ講座
若手エンジニアのためのセキュリティ講座
 
Fluentd, Digdag, Embulkを用いたデータ分析基盤の始め方
Fluentd, Digdag, Embulkを用いたデータ分析基盤の始め方Fluentd, Digdag, Embulkを用いたデータ分析基盤の始め方
Fluentd, Digdag, Embulkを用いたデータ分析基盤の始め方
 
老害について
老害について老害について
老害について
 
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
 
ChatGPT 人間のフィードバックから強化学習した対話AI
ChatGPT 人間のフィードバックから強化学習した対話AIChatGPT 人間のフィードバックから強化学習した対話AI
ChatGPT 人間のフィードバックから強化学習した対話AI
 

Plus de Masato Kinugawa (6)

X-XSS-Nightmare: 1; mode=attack XSS Attacks Exploiting XSS Filter
X-XSS-Nightmare: 1; mode=attack XSS Attacks Exploiting XSS FilterX-XSS-Nightmare: 1; mode=attack XSS Attacks Exploiting XSS Filter
X-XSS-Nightmare: 1; mode=attack XSS Attacks Exploiting XSS Filter
 
Bug-hunter's Sorrow
Bug-hunter's SorrowBug-hunter's Sorrow
Bug-hunter's Sorrow
 
SecurityCamp2015「バグハンティング入門」
SecurityCamp2015「バグハンティング入門」SecurityCamp2015「バグハンティング入門」
SecurityCamp2015「バグハンティング入門」
 
SecurityCamp2015「CVE-2015-4483解説」
SecurityCamp2015「CVE-2015-4483解説」SecurityCamp2015「CVE-2015-4483解説」
SecurityCamp2015「CVE-2015-4483解説」
 
いでよ、電卓!
いでよ、電卓!いでよ、電卓!
いでよ、電卓!
 
見つけた脆弱性について(cybozu.com Security Challenge)
見つけた脆弱性について(cybozu.com Security Challenge)見つけた脆弱性について(cybozu.com Security Challenge)
見つけた脆弱性について(cybozu.com Security Challenge)
 

バグハンターの哀しみ