これは、2016年にIPAにソフトウェアの脆弱性を約500件報告したときの話です。つい最近IPAにウェブサイトの脆弱性を報告する機会があり、2016年の苦行の日々がフラッシュバックしました。
当時、私は暇つぶしに PHP向けの脆弱性スキャナを作っていました。仕組みとしては静的解析型のもので、PHP のコードを独自の中間コードに変換、その中間コードを疑似実行するというものです。そして、その実行中に、ユーザ入力などの危険な値により汚染される変数を追跡して、脆弱性を特定します。未経験の分野でしたが、大きな問題もなく作ることができました。
続いて、動作テストを行いました。最初は、IPA の「Japan Vulnerability Notes (JVN)」サイトに載っている、PHP製のウェブアプリケーションの脆弱性を対象に、脆弱性を正しく検出できるかテストしました。意図した通りに動いたので、今度は動作の安定性を見るために、大量の PHPコードを与えてみました。このテストには、WordPress のプラグインを利用しました。当時公開されていたプラグインを全てダウンロードし、脆弱性スキャナに入力します。これにより、バグを取り除くことができました。暇つぶしとしては、十分満足できる結果でした。
しかし、ここで問題が起きました。暇つぶしの副産物として、プラグインの脆弱性レポートが数千件残っているのです。誤検知も含まれているとは思いますが、本物の脆弱性も含まれている可能性があります。倫理的には報告すべきと思うものの、数千件の脆弱性の確認作業は、想像するだけでやる気を失いそうです。仕方がないので、明らかに攻撃が簡単で、それなりに危険な脆弱性だけを抽出するスクリプトを書きました。そして、そのスクリプトを使ってレポートを厳選し、数を絞り込んでみました。しかし、厳選したにも関わらず約 500 件のレポートが残りました。もう覚悟を決めて取り組むしかありません。ここからは苦行の日々です。WordPress にプラグインをインストール、有効化、攻撃を繰り返します。1 日約 10 件のノルマを自分に課し、1ヶ月以上かけて IPA の窓口へ報告しました。
その後、IPA とやり取りを行い、最終的に IPA から WordPress の開発チームにまとめて報告されることになりました。その後しばらくして、脆弱性報告したプラグインの公開ページを見てみましたが、ほとんどが削除されていました。報告は無事届いたようです。
脆弱性の中で印象深かったのは、WordPress をガラケーでの表示に対応させるプラグインに存在した「任意のコード実行」です。2016 年当時、すでにガラケーは廃れていましたが、プラグインの公開ページに載っている利用者数はそれなりの多さでした。実際、当時は政府系のサイトでも利用されていたようです。脆弱性の原因は、セキュリティ専門家が見たらブチ切れそうな、正規表現の危険なオプションを使っていたことでした。しかも、外部の第三者がコメントを書き込むだけで攻撃できるというものでした。日本人しか利用しないものであるため、おそらく海外のバグハンターは見向きもしておらず、外部からの指摘を受けることが無かったのだと思います。更新日時が古かったり、マニアックな機能のプラグインには注意が必要です。
私の話は以上です。特に教訓などはありませんし、約 500 件報告して良かったことも特にありません。強いて言えば、「なぜそんな大変そうなことをやろうと思ったんだろう?」と思うことが世の中にはありますが、実はそれは何か別の作業の副産物でしか無く、それ自体に意味はないのかもしれません。
ちなみに、2016 年当時の JPCERT/CC の報告書には以下の推移グラフが載っていました。最後の青いバーが異常に伸びています。
