GHSAセキュリティアドバイザリIDを誤検知リストに追加

rails/rails-contributors

GitHub Security Advisory(GHSA)識別子がコントリビューター名として誤認識される問題を修正しました。既存のCVE識別子パターンと同様の仕組みで、GHSAパターンをfalse positives(誤検知)リストに追加しています。

背景

rails-contributorsは、Railsのコミットメッセージからコントリビューターの名前を抽出するシステムですが、セキュリティ修正コミットに含まれるアドバイザリ識別子を名前として誤検知する問題がありました。これまでCVE識別子(例: CVE-2024-12345)については誤検知対策が施されていましたが、GitHub独自のセキュリティアドバイザリ形式であるGHSA識別子(例: GHSA-xxxx-yyyy-zzzz)は対象外でした。

最近のRailsのセキュリティ修正コミットにGHSA識別子が含まれていたことで、これらのIDがコントリビューター名としてクレジットページに表示される事態が発生しています。PR内のスクリーンショットは、GHSA識別子がコントリビューターとして一覧に現れている様子を示しています。

技術的な変更

app/models/names_manager/false_positives.rbhandle_false_positives メソッドに、GHSAパターンを検出する正規表現が1行追加されました。

変更前:

when /\ACVE-[\d-]+\z/i
when 'and'

変更後:

when /\ACVE-[\d-]+\z/i
when /\AGHSA-[\w-]+\z/i
when 'and'

追加されたパターン /\AGHSA-[\w-]+\z/i は、文字列の先頭から末尾まで GHSA- で始まり、その後に英数字・アンダースコア・ハイフンが続く形式にマッチします。CVEパターンが数字とハイフンのみを許容する [\d-]+ を使うのに対し、GHSAパターンは英数字も含む [\w-]+ を使用しており、GHSA-xxxx-yyyy-zzzz のような英数字混在のIDに対応しています。

テストファイル test/credits/false_positives_test.rb にも対応するテストケースが追加されました。コミット 4df8089 を対象に、コントリビューターが John Hawthorn 単独として認識されることを確認しています。

test 'GHSA-\w+' do
  assert_contributor_names '4df8089', 'John Hawthorn'
end

設計判断

既存のCVEパターンと対称的な構造を踏襲することで、将来的な識別子形式の追加時にも見通しの良いコードになっています。

when 節の並びはCVEパターンの直後にGHSAパターンを配置しており、セキュリティ関連の識別子がグループとして読みやすくなっています。また、実際に問題が発生したコミットハッシュを使ったテストケースを追加することで、リグレッションを防ぐ設計になっています。

パターンマッチング方式による誤検知の除外は、コミットメッセージのパース処理に手を加えることなく、識別子の形式ごとにルールを追加できる拡張性の高いアプローチです。

まとめ

最小限の1行追加で、セキュリティアドバイザリIDがコントリビューターとして誤ってクレジットされる問題を解消しました。CVEとGHSAという2種類のセキュリティ識別子パターンが揃ったことで、今後のセキュリティ修正コミットに対しても正確なコントリビューター表示が維持されます。

記事メタデータ

Generated by:
Claude Sonnet 4.6 for DiffDaily
LLM Trace:
69261ccb

この記事はAIによって自動生成されています。内容の正確性については、必ずソースコードやPRを確認してください。

品質レビュー結果

Review Status:
承認済み
Review Count:
1回
Reviewed by:
Gemini 2.5 Pro for DiffDaily

Review Criteria:

記事構成 ✓ OK

Title, Context, Technical Detailの存在と明確さ

カスタムMarkdown構文 ✓ OK

シンタックスハイライト・GitHubリンク記法の正確性

対象読者への適合性 ✓ OK

エンジニア向けの適切な技術レベルと表現

パラグラフ・ライティング ✓ OK

トピックセンテンス・1段落1トピック・段落長

Diff内容との照合 ✓ OK

コードブロックとDiff内容の一致

技術用語の正確性 ✓ OK

技術用語の正確な使用

説明の技術的正確性 ✓ OK

技術的主張の正確性と論理性

事実の突合 ✓ OK

PR情報による主張の裏付け(ハルシネーション検出)

数値・固有名詞の確認 ✓ OK

PR番号・コミットID・バージョン等の正確性

タイトル・説明との一致 ✓ OK

記事タイトル・説明とPR内容の一致

外部知識の正確性 ✓ OK

PRに記載のない外部知識(LTS、サポート状況など)の不使用

時間表現の正確性 ✓ OK

時間表現がPR情報と一致しているか