Skip to main content

脆弱性の開示:PHPのセキュリティバグとCVE、先に発見されるのはどちら?

著者
Headshot of DeveloperSteve Coochin

DeveloperSteve Coochin

blog feature open source security

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として識別されました。

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のこうした取り組みにより、ユーザーの皆さまができるだけ早く情報を得て、安全を確保できるよう支援しています。

最近の脆弱性一覧と「3192件の脆弱性を公開しました」と記載されたイラストが表示されている、Snykの脆弱性開示ページ。

続きを読む

Blog

フロンティアモデルは脆弱性を発見した。攻撃者だけがエクスプロイトチェーンを見つけた。

静的解析で欠陥は見つかりましたが、ライブ攻撃テストで侵害につながる連鎖を実証できたのは唯一でした。Evo COS、Claude Security、Claude Code Securityを比較します。

feature insights context
Blog

自律型攻撃はすでに始まっている。防御もそのスピードに追いつかなければならない。

自律型攻撃者によって、防御に使える時間は短くなっています。継続的な検出、修復、検証、予防で、セキュリティチームが攻撃に歩調を合わせる方法をご紹介します。

Blog

AIコーディングエージェントが不適切なアクセス制御を繰り返し実装する理由

AIコーディングエージェントは、コンパイルが通りレビューも通過する一方で、あるテナントのデータを別のテナントに公開してしまう認可ロジックを生成することがあります。不適切なアクセス制御が検出しにくい理由と、その防止策をご紹介します。