OSS脆弱性の急増と修復の限界:CI/CDにおけるAI活用の検証
公開日
セキュリティ
オープンソースソフトウェア(OSS)は現代のシステム開発において不可欠な基盤となっていますが、依存関係の拡大に伴いセキュリティリスクの管理が急速に難しくなっています。脆弱性の報告数が増え続けるなかで、プロジェクトのメンテナーによる修正作業が追いつかず、未修正の脆弱性が蓄積し続ける問題が深刻化しています。
本記事では、Seyed Ali Akhavani氏らによる研究論文「Vulnerability Evolution and the Promise of Automated Gatekeeping in Open-Source Software」を基に、OSSエコシステムにおける脆弱性の推移と、CI/CDパイプライン上でLLMを活用した自動検知の有効性について解説します。
10言語・8つのパッケージマネージャーを網羅した大規模調査
本研究では、オープンソースのセキュリティ状況を長期的に把握するため、GitHub Advisory DatabaseおよびSnykから収集したデータを統合し、2017年から2025年後半までの脆弱性報告を分析しています。
調査対象となったのは、Node.js(NPM)、Python(PyPI)、Java(Maven)、PHP(Packagist)、Ruby(RubyGems)、Go、Rust(Crates)、.NET(NuGet)の8つのパッケージマネージャーと、C/C++を含む10種類のプログラミング言語です。
除外基準として、MITREによって定義が曖昧または広範すぎると判定されたCWE(CWE-400やCWE-200など)の6,363件や重複データを除去した結果、最終的なデータセットは30,572件の一意な脆弱性報告、467種類のCWE、16,802個のパッケージで構成されています。
脆弱性報告の急増と修復能力の乖離
調査の結果、エコシステムの拡大速度と脆弱性の発見速度、そして実際の修正速度の間に著しい不均衡が存在することが確認されました。
パッケージ増加率を大幅に上回る脆弱性の増加
調査対象となったエコシステム全体において、総パッケージ数は年平均26%で増加していました。一方で、脆弱性が報告されたパッケージの数は年平均91.54%のペースで増加しており、エコシステムの成長スピードの3倍以上で脆弱性の報告が拡大しています。
図1:各エコシステムにおける脆弱性報告数の年別累積推移
年間約1,650件で頭打ちとなっている修正件数
報告数の急増に対して、メンテナーによる脆弱性の修正件数は2022年以降、年間約1,650件前後で横ばいの状態が続いています。
図2:新規報告された脆弱性数と修正済み脆弱性数の年別推移
図2が示す通り、修正数と新規報告数の比率は約0.44にとどまり、報告される脆弱性の半数以上が未修正のまま残されています。2022年から2024年の3年間だけでも、7,000件以上の未解決な脆弱性が蓄積しており、年間約2,500件のペースでバックログが拡大している計算になります。
また、脆弱性が導入されてから修正されるまでの期間(脆弱性の寿命)は、2017年の平均1,215日から2022年にはピークとなる1,988日まで長期化しました。2025年には1,475日まで減少したものの、2017年の水準と比較すると依然として21%長い状態が続いています。近年の寿命の短縮は過去の古い脆弱性が解消されたわけではなく、新しく報告された脆弱性への対応が優先された結果であることが示されています。
CWEの偏りと悪意あるパッケージ(CWE-506)の集中
エコシステム全体で報告された脆弱性を分類すると、リスクが特定の弱点タイプやプラットフォームに集中している傾向が明らかになりました。
上位6種類のCWEが全体の過半数を占める
分析対象となった467種類のCWEのうち、わずか6種類のCWEがエコシステム全体の脆弱性報告の50%以上を占めていました。
図3:各エコシステムにおける上位CWEの累積寄与率
図3から分かるように、NPMやPackagistなどのエコシステムでは上位数種類のCWEへの集中が顕著です。クロスサイトスクリプティング(CWE-79)、パストラバーサル(CWE-22)、コードインジェクション(CWE-94)などのWebアプリケーションに関連する弱点は、言語を問わず広く確認されています。一方で、JavaScriptにおけるプロトタイプ汚染(CWE-1321)や、C/C++およびRustにおけるUse After Free(CWE-416)のように、言語特有の仕様やメモリ管理に起因する脆弱性も確認されています。
NPMとPyPIに集中する悪意あるパッケージ
意図的に悪意あるコードを埋め込むサプライチェーン攻撃(CWE-506: Embedded Malicious Code)は、2018年の38件から2025年には2,952件へと急増しています。
表1:エコシステムごとのCWE-506(悪意あるコード)の分布
| エコシステム | CWE-506件数 | 全CWE-506に対する割合 | エコシステム内での割合 |
|---|---|---|---|
| NPM | 6,679 | 90.28% | 67.24% |
| PyPI | 578 | 7.81% | 14.02% |
| RubyGems | 64 | 0.87% | 8.07% |
| NuGet | 40 | 0.54% | 5.59% |
| Go | 19 | 0.26% | 0.82% |
| Crates | 15 | 0.20% | 1.45% |
| その他 | 3 | 0.04% | - |
| 合計 | 7,398 | 100.00% | - |
表1が示す通り、CWE-506の98%以上がNPMとPyPIに集中しています。特にNPMにおいては、報告された全脆弱性の67.24%が悪意をもって作成されたパッケージによるものでした。
攻撃手法の分析では、タイポスクワッティング(有名パッケージに似せた名前を使用する手法が11.4%)や、内部プライベートパッケージ名を偽装する依存関係の混乱(スコープ名付きパッケージが15.6%)、さらにはNPMのインストールフック(preinstallやpostinstall)を悪用してダウンロード時に自動実行させる手口などが確認されています。
CI/CDにおけるLLMゲートキーパーの検証結果
手動によるコードレビューや修正対応が限界を迎えている背景から、研究チームはパッケージ公開時やCI/CDパイプライン内での自動検知ゲートキーパーとしてLLMを活用する実験を行いました。
diff形式による脆弱性検知性能の比較
実験では、実世界の脆弱性修正前後のコード差分(diff)から作成された582ペア(計1,164データポイント、1,434件のアドバイザリをカバー)を対象に、商用APIモデルおよびローカルで動作するオープンウェイトモデルの計10種類を評価しました。
表2:評価対象モデルのプロパティ、検知性能、コストの比較
| モデル | 規模 | 適合率 (Precision) | 再現率 (Recall) | F1スコア | 平均処理時間 (秒) |
|---|---|---|---|---|---|
| CodeGemma:7B | 7B | 40.1% | 59.4% | 47.9% | 1.68 |
| DeepSeek-Coder-V2:16B | 16B | 47.7% | 37.3% | 41.9% | 4.46 |
| DeepSeek-R1:70B | 70B | 53.5% | 65.6% | 59.0% | 49.90 |
| Qwen-2.5-Coder:32B | 32B | 47.8% | 45.4% | 46.6% | 5.00 |
| Phi-3:14B | 14B | 52.6% | 34.2% | 41.4% | 4.30 |
| LLaMA-2:70B | 70B | 45.8% | 84.9% | 59.5% | 6.81 |
| LLaMA-3.3 | 70B | 39.9% | 34.4% | 36.9% | 9.55 |
| Mixtral:8x7B | 8×7B | 90.1% | 11.0% | 19.6% | 2.52 |
| GPT-4o | - | 53.2% | 69.7% | 60.3% | 2.39 |
| GPT-5.1 | - | 63.9% | 61.8% | 62.8% | 2.50 |
結果として、GPT-5.1が最もバランスの取れた性能(F1スコア 62.8%)を達成しました。一方で、各モデルには明確なトレードオフが見られます。
- 再現率重視モデル:LLaMA-2:70Bは84.9%の高い再現率を示したものの、適合率は45.8%と低く、誤検知(偽陽性)が多発する傾向がありました。
- 適合率重視モデル:Mixtral:8x7Bは適合率90.1%と高精度でしたが、再現率は11.0%にとどまり、多くの脆弱性を見逃す結果となりました。
- 推論コストの課題:推論特化型モデルのDeepSeek-R1:70Bは59.0%のF1スコアを記録したものの、1サンプルあたりの平均処理時間が約50秒と長く、高速なフィードバックが求められるCI/CD環境ではコストが課題となります。
CWE分類における偏りと悪意あるコードの検知
LLMによるCWE分類の詳細分析では、多くのモデルにおいて頻出する弱点タイプ(特にCWE-79: XSS)へ過剰に分類してしまう傾向(Prevalence Bias)が確認されました。コードインジェクション(CWE-94)など別の脆弱性であっても、学習データ内の出現頻度が高いCWE-79と判定してしまう事例が多く見られました。
また、Datadogのデータセットから抽出した600件の悪意あるパッケージ(CWE-506)を対象とした単一ファイルの検証では、GPT-5.1(83.5%)やLLaMA-3.3(83.3%)が高い検知率を示しました。ただし、外部依存関係の更新を介して間接的に攻撃コードを取り込むようなサプライチェーン攻撃に対しては、ソースコード単体の解析だけでは検知が困難である点も報告されています。
開発現場におけるセキュリティ対策の考慮点
本研究の結果は、ソフトウェアサプライチェーンの防衛において、人手による確認やLLM単体の活用だけでは対応しきれない領域が存在することを示しています。
人手によるレビューはリソースの制約から増加する脆弱性に対応しきれず、LLMもモデルごとの精度の偏りや、間接的な依存関係の追跡が困難であるといった制約を抱えています。そのため、開発現場ではCI/CD上での高速なスクリーニングと高精度な解析を組み合わせた多段構成を検討するだけでなく、専門的な脆弱性管理ツールや、Flatt Securityが提供している Takumi Guard をはじめとするセキュリティ管理サービスの活用を選択肢の1つとして検討することが有効です。
あわせて、NPMなどのパッケージマネージャー側でのインストールフック制限や、Provenance(出所証明)の導入を進めることで、ツールとガバナンスの両面からサプライチェーンのリスクを低減することが期待されます。
まとめ
本研究では、オープンソースエコシステムにおける脆弱性の年間報告数が91.54%で急増する一方、メンテナーによる修正能力が年間約1,650件で頭打ちとなっており、未解決の脆弱性が蓄積し続けている現状が定量的に示されました。
CI/CDにおけるゲートキーパーとしてLLMを検証した実験では、GPT-5.1がF1スコア62.8%を記録したものの、モデルごとの精度と処理速度のトレードオフや、CWE-79への分類バイアスといった課題も浮き彫りになりました。
自動化による検知はバックログの拡大を防ぐ有効な手段となり得ますが、ツールの特性を理解した多段防御の設計と、エコシステム全体のセキュリティ基準の見直しが重要になります。
Webサービスや社内のセキュリティにお困りですか? 弊社のサービス は、開発チームが抱える課題を解決し、生産性と幸福度を向上させるためのさまざまなソリューションを提供しています。ぜひお気軽にご相談ください!
参考資料: