Webサービスの脆弱性と
報奨金制度
2018-06-13 TSG 第2回脆弱性ハンティング分科会 発表資料
@hakatashi
※博多市はWebセキュリティの素人です!
このスライドは適当に調べながら書いたので
鵜呑みにしないでください
TL;DR
Kinugawaさんのブログ/スライドを読もう!!!
脆弱性報奨金制度
(Vulnerability Reward / Bug Bounty)
- サービスの管理者が主催する制度の1つ
- Webサービスやソフトウェアの脆弱性を報告すると、
内容に応じた報奨金を受け取ることができる - 報奨金の額は$100,000単位になることも
- 国内だと主にサイボウズが首魁となって始めた
脆弱性を探す場所
- BugBounty: https://bugbounty.jp/
- HackerOne: https://hackerone.com/
- awesome-bug-bounty
- Facebook: https://www.facebook.com/whitehat
- GitHub: https://bounty.github.com/
- Google: https://bughunter.withgoogle.com/
- Intel: https://www.intel.com/content/www/us/en/security-center/bug-bounty-program.html
- Microsoft: https://technet.microsoft.com/en-us/library/dn425036.aspx
- Cybozu: https://cybozu.co.jp/products/bug-bounty/
- LINE: https://bugbounty.linecorp.com/
弊社でもやってます
BugBounty対応側から
見た知見など
CTFとかでよく見る
Webサービスの脆弱性
- XSS
- SQLi
- CSRF
- Timing Attack
- Race Condition
実際に報告されることが多い
Webサービスの脆弱性
- Cross-domain Referer leakage
- Open Redirect
- Click Jacking
- Insecure Direct Object Reference
実際に報奨金が出た例
- 投稿された画像に位置情報が残っている
- 一度発行されたセッションが永久に破棄されない
- セッションハイジャックされると、
ずっとハイジャックされたままになる
- セッションハイジャックされると、
- パスワードを変更しても
他のセッションが無効化されない - セッションのクッキーが http only になっていない
- IDN homograph 攻撃が可能
- クリックジャッキング
もっと複雑で
面白い脆弱性を見つけたい!
もっと複雑で
面白い脆弱性の例
https://github.com/ngalongc/bug-bounty-reference
に実際に見つかった脆弱性がいっぱい載ってるので参考に
ユーザ入力を使った
正規表現から生じる
DOM based XSS
LINE Bug Bounty Program: $500
var template = '<img src="https://hoge.com/{{id}}.png">';
var re = new RegExp('{{' + key + '}}', 'gm');
var safe = escapeHTML(value);
template = template.replace(re, safe);
document.body.innerHTML = template;
key, value に任意の文字列をURLから入力可能
PoC
key = '|(.)h|';
value = '$1a$1onerror%3Dalert(1)//';
var re = new RegExp('{{' + key + '}}', 'gm');
//=> /{{|(.)h|}}/gm
'<img src="https://hoge.com/{{id}}.png">'
.replace(re, '$1a$1onerror=alert(1)//');
//=> '<img src="a"onerror=alert(1)//ttps://hoge.com/{{id}}.png">'
- 正規表現の | を用いることで{{}}以外の部分にマッチ
- テンプレートの "h の部分を置換
- $1 を用いることでHTMLエスケープを回避
Google Issue Tracker
における複数の脆弱性
Google Vulnerability Reward Program: $15,600
脆弱性1
Google Issue Tracker の機能の1つとして、
buganizer-system+<componentID>+<issueID>@google.com
にメールを送ることでスレッドに投稿できる
→ @google.com に送信されたメールを閲覧できる
脆弱性1
- GoogleのSlackチームへのRegist
- なぜか失敗
脆弱性1
- Googleアカウントの作成
- そのまま登録しようとしたら弾かれるので、
別のアドレスで登録したあとアドレスを変更することで回避 - 成功!
- Google社員の特権を持ったアカウントを作成できた
- そのまま登録しようとしたら弾かれるので、
脆弱性2
- 権限を持たないIssueをスターすることができる
- そのIssueに関する通知をメール経由で閲覧可能
脆弱性3
- 権限を持たないIssueを指定することで、
Response Body からIssueの詳細を閲覧できる - JSファイルに記述されているAPIエンドポイントを
地道に調べていってみつc
POST /action/issues/bulk_edit HTTP/1.1
{
"issueIds":[
67111111,
67111112
],
"actions":[
{
"fieldName":"ccs",
"value":"test@example.com",
"actionType":"REMOVE"
}
]
}
不適切なブラックリスト
検査による
CRLFインジェクション
Twitter Vulnerability Report on HackerOne: $3,500
脆弱性
- ?reported_tweet_id=hoge なる
パラメーターを渡すことでレスポンスに
Set-Cookie: reported_tweet_id=hoge が反映される - ただしhogeの部分はフィルタがかけられており、
CRやLF, ASCII外の文字などは除去される
脆弱性
- Unicode文字を利用して、CRLFをインジェクション可能
- UTF-8の入力に対してフィルタを適用したあと、
(なぜか) UTF-16に変換してからさらに除去フィルタを
実行するという仕組みだったらしい
- UTF-8の入力に対してフィルタを適用したあと、
脆弱性報告の際のTips
- PoCの動画があるとよりよさそう
- Google VRP では動画でのPoCの撮影を推奨している
便利リンク
END
脆弱性は
どうやって見つかるか
参考資料: https://www.ipa.go.jp/files/000064918.pdf
Webサービスの脆弱性と報奨金制度
By Koki Takahashi
Webサービスの脆弱性と報奨金制度
2018-06-13 TSG 第2回脆弱性ハンティング分科会 発表資料
- 1,632