🎁

【PHP】composer auditの脆弱性のチェックを意図的に無視(ignore)する方法

に公開

この記事は カオナビ Advent Calendar 2025 4日目の記事です。

はじめに

Composerにはauditコマンドを使ってインストール済みパッケージの脆弱性をチェックする機能があります。

このauditコマンドの使い方については、以前こちらの記事で紹介しました。

https://zenn.dev/naopusyu/articles/64beb2e676cace

今回はauditコマンドで検出された脆弱性をチェック対象から無視(ignore)する方法がドキュメントに記載されていたので、実際に手を動かしながら検証したいと思います。

https://getcomposer.org/doc/06-config.md#ignore

環境

  • PHP 8.5.0
  • Composer 2.9.2

そもそも無視する必要があるのか

検知した脆弱性を放置する方が危険なので修正されたバージョンまでアップデートする方が良いです。
ただ、以下のような理由でチェック対象から無視したいこともあると考えられます。

  • 脆弱性が含まれているコードは存在するが該当コードを利用していないため、影響がないと判断できる
  • 何かしらの理由ですぐにアップデートができないため、一時的にチェックを無視したい

試してみる

今回はsymfony/http-foundationを使って検証します。
まず、検証のために意図的に脆弱性が含まれているバージョン(例:7.3.0)を入れています。

composer require symfony/http-foundation:7.3.0

この状態でauditコマンドを実行すると以下のように脆弱性が報告されます。(終了コードが1)

composer audit --locked
Found 1 security vulnerability advisory affecting 1 package:
+-------------------+----------------------------------------------------------------------------------+
| Package           | symfony/http-foundation                                                          |
| Severity          | high                                                                             |
| Advisory ID       | PKSA-365x-2zjk-pt47                                                              |
| CVE               | CVE-2025-64500                                                                   |

~~~ 省略 ~~~

| Reported at       | 2025-11-12T11:09:14+00:00                                                        |
+-------------------+----------------------------------------------------------------------------------+
% echo $?                            
1

次に無視する方法ですが、ドキュメントを読むとcomposer.jsonのconfigスキーマに設定(CVE-1234などの無視したいID)を書くことで無視できるようです。

今回はドキュメントに書かれている 理由なしのシンプルなフォーマット(Simple format without reasons) で試します。

composer.json
{
    "require": {
        "symfony/http-foundation": "7.3.0"
    },
+    "config": {
+        "audit": {
+            "ignore": ["CVE-2025-64500"]
+        }
+   }
}

composer.jsonに書いたら再びauditコマンドを実行します。

% composer audit --locked
Found 1 ignored security vulnerability advisory affecting 1 package:
+-------------------+----------------------------------------------------------------------------------+
| Package           | symfony/http-foundation                                                          |
| Severity          | high                                                                             |
| Advisory ID       | PKSA-365x-2zjk-pt47                                                              |
| CVE               | CVE-2025-64500                                                                   |

~~~ 省略 ~~~

| Reported at       | 2025-11-12T11:09:14+00:00                                                        |
| Ignore reason     | None specified                                                                   |
+-------------------+----------------------------------------------------------------------------------+
% echo $?
0

実行結果では脆弱性が報告されますが、メッセージにFound 1 ignored security vulnerability advisory affecting 1 packageとあるように無視対象になっていることが分かります。(終了コードが0)

フォーマットの種類

ドキュメントを読むと先ほど試した方法以外にもフォーマットがあります。

  • 理由ありのシンプルなフォーマット(Simple format with reasons)
  • 理由なしのシンプルなフォーマット(Simple format without reasons)
  • 詳細なフォーマット(Detailed format with apply scope)

理由ありのシンプルなフォーマット(Simple format with reasons)

https://getcomposer.org/doc/06-config.md#simple-format-with-reasons-

このフォーマットは無視したいIDをキーとして無視する理由を書けます。

"config": {
    "audit": {
        "ignore": {
            "CVE-1234": "xxxxxx",
            "PKSA-xxxx": "xxxxxx",
        }
    }
}

理由なしのシンプルなフォーマット(Simple format without reasons)

https://getcomposer.org/doc/06-config.md#simple-format-without-reasons-

このフォーマットは無視したいIDを配列に書くだけです。

"config": {
    "audit": {
        "ignore": ["CVE-1234", "PKSA-xxxx"]
    }
}

詳細なフォーマット(Detailed format with apply scope)

https://getcomposer.org/doc/06-config.md#detailed-format-with-apply-scope-

このフォーマットは各IDに対して無視設定の適用範囲(apply)と理由(reason)をそれぞれに書けます。
また、無視設定の適用範囲(apply)にはaudit、block、allの3つのうちいずれかを指定できます。

無視設定の適用範囲 説明
audit 監査レポートを無視します
block バージョンブロッキングを無視します
all 監査レポート、バージョンブロッキングを無視します
"config": {
    "audit": {
        "ignore": {
            "CVE-1234": {
                "apply": "audit",
                "reason": "xxxxx"
            },
            "PKSA-xxxx": {
                "apply": "block",
                "reason": "xxxxx"
            },
            "CVE-zzzz": {
                "apply": "all",
                "reason": "xxxxx"
            },
        }
    }
}

フォーマットの補足

このフォーマットは混在して書くことができます。

"config": {
    "audit": {
        "ignore": {
            "CVE-1234": {
                "apply": "audit",
                "reason": "xxxxx"
            },
            "CVE-zzzz": "xxxxx",
        }
    }
}

まとめ

今回、Composerのauditコマンドのチェック対象から無視する方法を試しました。

基本的には見つかった脆弱性は放置せずに修正することが望ましいです。
しかし、影響ないと判断できる場合や、何かしらの理由で修正できない場合には役立つ方法かと思います。

また無視設定するとauditコマンドは成功(終了コードは0)を返すようになります。(全て無視した場合です。)
これにより、CIで脆弱性チェックを導入しやすくなります。
例えば、未対応の脆弱性があっても無視設定があればCIは成功(終了コード0)し、新たな脆弱性が検知された場合のみCIが失敗(終了コードは1)する、といった運用が可能になります

GitHubで編集を提案

Discussion