CVEにコントリビュートしてみた話

CVEにコントリビュートしてみた話

    こんにちは、ご無沙汰しています。 本日は CVE にコントリビュートしてみた話をします。

    CVE (Common Vulnerabilities and Exposures) は、アメリカの非営利団体である MITRE 社が管理している脆弱性のデータベースです。 先日、CVE の中に誤った情報を発見しました。 CVE は多くの人に参照されるので、いい機会だと思い CVE の修正リクエストを投げてみることにしました。

    CVE-2021-33194

    CVE-2021-33194は Go の golang.org/x/net パッケージに存在していた脆弱性です。 悪意のある文字列をパースさせようとすると、プログラムが無限ループするというものでした。 攻撃者は悪意のある文字列を送信することで、サーバーに DoS 攻撃を仕掛けたり、クライアントのプログラムをクラッシュさせることができます。

    Description
    golang.org/x/net before v0.0.0-20210520170846-37e1c6afe023 allows attackers to cause a denial of service (infinite loop) via crafted ParseFragment input.

    以前は CVE-2021-33194 の Description が以下のように掲載されていました(Internet Archive2021 年 5 月 26 日の記録より)。

    Description
    Go through 1.15.12 and 1.16.x through 1.16.4 has a golang.org/x/net/html infinite loop via crafted ParseFragment input.

    この脆弱性は golang.org/x/net 内の不具合なので、Go のバージョンには依存しません。 おそらく、同時期に報告されたCVE-2021-31525と Description や影響範囲が似ていることから、間違った情報が掲載されたのだと思われます。 現在は正しい Description が反映されています。

    CVE リクエストを送る

    まずリクエストを送る前に、本当に Go のバージョンに依存しないかを確認しました。 Google Group のアナウンス修正パッチから、脆弱性の中身や再現手順を確認します。 幸いにも修正パッチには、脆弱性を再現するテストケースに追加されていました。

    srcs := []string{
            "<math><html><template><mn><template></template></template>",
            "<math><math><head><mi><template>",
    }

    この文字列を使い該当の脆弱性を手元で再現させて、本当に Go のバージョンが関係ないかを確認しました。

    Go のバージョンが関係ないという確証が得られると、次は CVE に対して変更リクエストを送ります。 CVE に関する問い合わせはCVE Request Web Formから送信できるのを知りました。 自分は CVE リクエストの作法は知りませんでしたが、以下のように拙い英語で説明しまいsた。

    CVEリクエストの送信フォーム。Descriptionの訂正を依頼。

    フォームの情報を送信すると、指定したメールアドレスにメールが届きます。

    CVEリクエストの返信。リクエストが送られたという連絡が来る。

    そして 1 日以内に、送ったリクエストが受理されたというメールが届きました。

    CVEリクエストの返信。リクエストが受理されて数時間後に反映されるという連絡が来る。

    このメールを受け取った数時間後、自分が送った CVE の変更リクエストが反映されているのを確認しました。

    まとめ

    自分の中ではセキュリティ界隈は(GitHub の議論より)厳格なものだと思ってたのですが、あっさりと受理してもらえました。 CVE フォームの向こう側にいるのも同じ人間なので、丁寧にリクエストを送ると真摯に対応してもらえます。 今回のケースは決して大きな修正ではないですが、同じ脆弱性を参照する人が正しい情報を参照できれば幸いです。

    CVE リクエストを送るのは OSS 活動と似ている部分があります。 OSS でも提案やバグ報告をするだけで、立派なコントリビュートです。 CVE も同じで、管理者が気づかないミスや、改善できる点がまだ眠っているかもしれません。 そういった観点で眺めることができると、CVE をより楽しむことができるでしょう。


    Profile picture

    Shin'ya Ueoka

    B2B向けSaaSを提供する会社の、元Webエンジニア。今はエンジニアリング組織のマネジメントをしている。