SlideShare una empresa de Scribd logo
1 de 59
Descargar para leer sin conexión
バグハンター
の哀しみ
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!

Más contenido relacionado

La actualidad más candente

イベント・ソーシングを知る
イベント・ソーシングを知るイベント・ソーシングを知る
イベント・ソーシングを知る
Shuhei Fujita
 
Twitterのsnowflakeについて
TwitterのsnowflakeについてTwitterのsnowflakeについて
Twitterのsnowflakeについて
moai kids
 

La actualidad más candente (20)

チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
 
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
 
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
実践 NestJS
実践 NestJS実践 NestJS
実践 NestJS
 
CVE、JVN番号の取得経験者になろう!
CVE、JVN番号の取得経験者になろう!CVE、JVN番号の取得経験者になろう!
CVE、JVN番号の取得経験者になろう!
 
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかシリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのか
 
イベント・ソーシングを知る
イベント・ソーシングを知るイベント・ソーシングを知る
イベント・ソーシングを知る
 
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
 
Rust で RTOS を考える
Rust で RTOS を考えるRust で RTOS を考える
Rust で RTOS を考える
 
最近のやられアプリを試してみた
最近のやられアプリを試してみた最近のやられアプリを試してみた
最近のやられアプリを試してみた
 
Twitterのsnowflakeについて
TwitterのsnowflakeについてTwitterのsnowflakeについて
Twitterのsnowflakeについて
 
静的解析を使った開発ツールの開発
静的解析を使った開発ツールの開発静的解析を使った開発ツールの開発
静的解析を使った開発ツールの開発
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
 
SecurityCamp2015「バグハンティング入門」
SecurityCamp2015「バグハンティング入門」SecurityCamp2015「バグハンティング入門」
SecurityCamp2015「バグハンティング入門」
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
JavaScript難読化読経
JavaScript難読化読経JavaScript難読化読経
JavaScript難読化読経
 

Más 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
 
X-XSS-Nightmare: 1; mode=attack ~XSSフィルターを利用したXSS攻撃~
X-XSS-Nightmare: 1; mode=attack ~XSSフィルターを利用したXSS攻撃~X-XSS-Nightmare: 1; mode=attack ~XSSフィルターを利用したXSS攻撃~
X-XSS-Nightmare: 1; mode=attack ~XSSフィルターを利用したXSS攻撃~
 
Bug-hunter's Sorrow
Bug-hunter's SorrowBug-hunter's Sorrow
Bug-hunter's Sorrow
 
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)
 

Último

Último (12)

LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 

バグハンターの哀しみ