ワイヤード・パンチ

Open Bug Bounty からメールが届いたときの対処法。

2020年2月17日

突然届いたメールは何者?

突然、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アカウントがあればログインできるのですが、今回はとくに必要ありませんでした。

今回見つかった脆弱性について。

当サイトには右上に検索窓があり、検索を実行後に開かれるページには、検索窓とページタイトル部分に、検索ワードが表示されています。

しかし、その検索ワードの表示部分がエスケープされていませんでした。

検索ワードにスクリプトを入れてしまうと、それが実行できてしまうという状態でした。

上の画像だと、本来出てくるはずのないメッセージウインドウが表示されています。

まず、修正前の検索窓のコードです。

input(type="text", name="s", value="<?php echo filter_input(INPUT_GET, 's'); ?>", target="_self")

そして修正後はこちら。

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を入れるだけで対処可能。