突然届いたメールは何者?
突然、Open Bug Bounty というところから、上の画像のようなメールが、独自ドメインのメールアドレス宛に届きました。(当サイト右上にあるメールです。)
登録したことのないサイトであるうえにすべて英語なので、初めは迷惑メールがフィルタをすり抜けてきたのかと思い込みました。
僕が運営するサイトのセキュリティー脆弱性をOpenBugBountyで指摘された話し
しかし、上のサイトにあるとおり、決して迷惑メールなどではなく、どうやら当サイトにセキュリティ上の脆弱性があったようで、そのことを通知してくれたそうです。
というわけで今回は、メールが届いてからのやりとりの仕方について。
送信者に連絡を取る。
まずはメール本文にある「https://www.openbugbounty.org/reports/○○○/」というURLにアクセスします。

開かれたページによると、どうやらXSS攻撃ができる脆弱性が見つかったようですが、このページだけでは、どうすれば攻撃できてしまうのか、どうすれば対策できるのかは書かれていません。
先述の記事にあるとおり、発見者に直接連絡を取ってみることにします。
「Discovered and Reported by」の横に発見者の名前があり、そこがアカウントページへのリンクになっているので、クリックします。
アカウントページには発見者のメールアドレスが記載されていました。

今回は、その発見者のメールアドレス宛に、英文で「脆弱性について教えてください」といった旨のメールを送信しました。
いちおう、Open Bug Bounty から届いたメールも引用しておきました。
(なお、Open Bug Bounty からのメールに直接返信しても、返信には対応していないアドレスなので返ってきてしまいます。)
脆弱性を教えてもらい、対策する。
しばらくすると発見者から英文のメールが届きます。
どのような行動をすればXSS攻撃できてしまうのかということを、教えてもらえました。
今回は対策がすぐにわかったので、対策後に「確認をお願いします。」といった旨のメールを送信後、問題が解決したことを確認していただけました。
その後、できればPaypalあてに金銭の寄付をしてほしいということも言われました。
強制ではないと思いますが、脆弱性を見つけたにも関わらず悪いことは一切せず、善意で解決まで導いてくれたので、今回はちゃんとお礼のつもりで寄付を行っておきました。
いちおう発見者から希望の寄付金額は指定されていました、さすがに高すぎたので、金額を減らして送りましたが、とくに問題なく受け取っていただけました。
なお、Open Bug Bounty にはTwitterアカウントがあればログインできるのですが、今回はとくに必要ありませんでした。
今回見つかった脆弱性について。
当サイトには右上に検索窓があり、検索を実行後に開かれるページには、検索窓とページタイトル部分に、検索ワードが表示されています。
しかし、その検索ワードの表示部分がエスケープされていませんでした。

検索ワードにスクリプトを入れてしまうと、それが実行できてしまうという状態でした。
上の画像だと、本来出てくるはずのないメッセージウインドウが表示されています。
まず、修正前の検索窓のコードです。
1 |
input(type="text", name="s", value="<?php echo filter_input(INPUT_GET, 's'); ?>", target="_self") |
そして修正後はこちら。
1 |
input(type="text", name="s", value="<?php echo esc_html(filter_input(INPUT_GET, 's')); ?>", target="_self") |
当サイトはWordpressを使用しているので、Wordpressにおける対策となりますが、これで検索ワードにスクリプトを入れられてしまっても、esc_htmlのおかげで実行できない形に変換してくれました。

もうメッセージウインドウが出てくることはありません。
今回は検索ワードの表示部分が該当しましたが、とにかくフォームの入力値のことです。
フォームの入力値の表示部分は、かならずエスケープしましょう。
さらに続々と脆弱性が発覚。
XSSに対する修正を行った翌日、今度は別の発見者からOpen Bug Bounty を通じてメールが届きました。
どうやらphpinfo.phpを放置したままになっているせいで、サーバの情報が丸見えの状態でした。
よって、すぐさまphpinfo.phpを削除しました。
その対処後、さらに今度はREST APIとかいうのを通じてアカウント名がバレたり、xml-rpc.phpからブルートフォースアタックができてしまう脆弱性もあったとの連絡が…。
これらに関しては、Wordfenceというプラグインを導入するだけで対処できました。
Wordfence Security – Firewall & Malware Scan – WordPress プラグイン | WordPress.org 日本語
先程の脆弱性に対しては、おそらくインストール直後のデフォルト設定で対応済みです。
今回の脆弱性の対策まとめ。
- フォームの入力値が表示される部分には、必ずエスケープを行う。
- phpinfo.phpは放置しない。
- アカウント名バレ、ブルートフォースアタックに対しては、Wordfenceを入れるだけで対処可能。
百発百中レビィショット