脆弱性の開示:PHPのセキュリティバグとCVE、先に発見されるのはどちら?
DeveloperSteve Coochin
2023年12月19日
0 分で読めますセキュリティ研究者が潜在的な脆弱性を報告するまでには、その問題が広く認識されるずっと前から、いくつもの壁があります。実証例があっても、まずプロジェクトのメンテナーに問題の存在を納得してもらわなければなりません。
脆弱な経路が特定されたとき、それがバグなのかセキュリティ脆弱性なのか、その境界が曖昧な場合があります。反対に、報告された脆弱性が攻撃ベクトルとして利用されたにもかかわらず、バグとして扱われることもあります。
その好例が、DeveloperSteveがPHPのコア言語で追跡した脆弱性の開示です。`concat()` 関数でUse After Free型の脆弱性が確認され、キャプチャー・ザ・フラッグイベントで実証されました。チームはセキュリティ上の問題を報告しましたが、脆弱性が実際に利用されたにもかかわらず、数回の投稿を経て報告がバグとして扱われることになりました。
ご存じですか?
Snykでは、毎年「Fetch The Flag」というキャプチャー・ザ・フラッグイベントを開催しています。CTFのスキルをさらに深めたい方は、SnykのCTF Hubをご覧ください。
最近、dompdfライブラリのインシデントでCVE取得のプロセスを経験しました。この対応によって、インシデントのタイムラインは7か月に及びました。CVE公開に伴うさまざまな調整の裏にある取り組みへの理解と感謝が、いっそう深まりました。
ここで留意したいのは、このような多くのオープンソースプロジェクトが、情熱を持つ人々によって運営され、貢献されていることです。その多くはフルタイムで働きながら、このような大規模プロジェクトを管理し、私たちと同じ日々のプレッシャーにも直面しています。
それでは、インシデントのタイムラインを見てみましょう。
dompdfインシデントの報告タイムラインを理解する
2022年3月、Positive Securityが情報を公開した際、開示に至るまでのタイムラインも公表しました。
プロジェクトのメンテナーへの最初の報告は2021年10月に行われ、プロジェクトのセキュリティ報告ページの手順を利用しました。数か月間返答がなかったため、Positive Securityチームは、リポジトリ上のバグとして報告する形でエスカレーションを試みました。
最終的に、この脆弱性の一般公開後、修正済みバージョンがリリースされました。このインシデントではさらに、DeveloperSteveが脆弱な経路を利用し、リバースシェルが作成される条件を整えることに成功しました。
これはSnyk独自のSnyk-Labs PHP-Goofアプリケーションで実証されています。このアプリケーションには元の脆弱性が含まれており、DeveloperSteveはそこにPHP関連のセキュリティ脆弱性を追加しました。
これまでの調査と、リバースシェルの概念実証コード例を活用し、DeveloperSteveは最初の報告から7か月後に、このインシデントのCVEを取得できました。
CVEプロセスを理解する
最近CVE取得のプロセスを経験したことで、脆弱性を報告するセキュリティ研究者の取り組みへの理解と感謝が深まりました。
DeveloperSteveは、元の調査内容をすべて添えてMitreにCVEを申請しました。現在、さらなる分析を待っているところです。この脆弱性はPHP-Goofデモアプリケーションにも事例として追加されました。
最近の事例では、研究者が1月にUse After Free型の脆弱性を報告しました。この脆弱性はSnykの脆弱性ページに掲載され、CVE-2021-21708として識別されました。
SnykはPHPプロジェクトをスキャンし、Composerのマニフェストファイルに含まれる脆弱なPHPパッケージを見つけて修正を自動化します。また、Docker上のPHPアプリケーションに含まれる脆弱なPHPランタイムも検出できます。Snykを使ってPHPアプリケーションのセキュリティ対策を始めましょう。
CVEを申請する
当初、このプロセスは簡単そうに思えました。ウェブフォームを送信し、誰かが調査結果を検証するのを待つだけです。CVE.orgの報告・申請ページを確認したDeveloperSteveは、申請するまでにいくつかの手順があることに気づきました。
最初の手順は、報告する脆弱性に関連するCVEの予約と公開を認可された、CVEパートナー組織を特定することです。こうした組織はCVE Numbering Authority(CNA)と呼ばれます。
CNAに指定された組織は、セキュリティ脆弱性をトリアージし、報告された脆弱性の開示に対してCVE識別子を予約・公開できます。
たとえば2021年、SnykはNode.jsエコシステムの脆弱性開示プログラムを担うことになりました。そのためSnykはCNAとして、npmなど、さまざまなエコシステムのCVEセキュリティレポートを定期的に公開しています。
注:Snykには、セキュリティ脆弱性を報告するための、簡単に記入できる 脆弱性開示フォーム があります。
CVE報告についてのまとめ
報告された脆弱な経路が、脆弱性ではなくバグと判断されるなど、境界が曖昧な場合があります。また、報告されたバグが脆弱な経路を生み、実際にはセキュリティ上の脅威となっているケースもあります。
コミュニティ、セキュリティ研究者、またはコントリビューターによって最初のセキュリティバグや問題が発見された後には、報告された問題をさらに調査する段階があります。悪意のある攻撃者がバグを攻撃ベクトルとして利用し、アプリケーションやインフラに望ましくない動作を引き起こすことは少なくありません。
Snykのセキュリティチームは、正式なCVEになる前のバグ報告の段階から、セキュリティ脆弱性を発見することに注力しています。Snykのこうした取り組みにより、ユーザーの皆さまができるだけ早く情報を得て、安全を確保できるよう支援しています。




