理系学生日記

おまえはいつまで学生気分なのか

npm auditのaudit-levelとCVSSの関係

npm auditにはaudit-levelオプションがありますが、このオプションで渡せるSeverityとCVSSにはどのような関係があるのでしょうか。

この興味が湧いたのは、運用設計においてどの程度のCVSS値を持つ脆弱性から真剣に対応するかを定めようとしているからです。

npm audit

Webアプリケーションを運用するということは脆弱性との戦いの始まりでもあり、自分たちが使っているライブラリに脆弱性があるかどうかを監視し続けることになります。

npmにはnpm auditというサブコマンドがあり、利用しているライブラリに内在する脆弱性をレポートし、場合によっては修正までしてくれます。

asks for a report of known vulnerabilities. If any vulnerabilities are found, then the impact and appropriate remediation will be calculated. If the fix argument is provided, then remediations will be applied to the package tree.

npm-audit | npm Docs

audit-level

ここで興味が湧いたのは、npm auditコマンドの持つaudit-levelオプションです。このaudit-levelオプションには以下のSeverityを渡すことができます。npm auditは、渡したSeverity以上の脆弱性を見つけた場合は、終了ステータス非0で終了します。

  • null,
  • info
  • low
  • moderate
  • high
  • critical
  • none

これらはCVSSの定めるQualitative Severity Rating Scaleと似ているようですが、実際のところどうなのでしょうか。

npm auditの参照する脆弱性データベースはどこなのか

まず、npm auditが参照している脆弱性データベースはどこなのでしょうか。答えはGitHub Advisory Database · GitHubでした。

npm auditがGitHub Advisory Databaseと統合されたことは、以下のエントリに記述があります。

Today, we’re adding a proxy on top of the GitHub Advisory Database that speaks the npm audit protocol. This means that every version of the npm CLI that supports security audits is now talking directly to the GitHub Advisory Database.

GitHub Advisory Database now powers npm audit - The GitHub Blog

GitHub Advisory DatabaseのSeverityはどう定義されるのか

これはGitHub Advisory Database についてに解説があります。

重要度レベルは、"共通脆弱性評価システム (CVSS) セクション 5" で定義されている 4 つの可能なレベルのいずれかです。

  • Medium/Moderate
  • Critical

実際にCVSSで定義されているのは以下のようになっています。 これと上述のGitHubのドキュメントを対照すると、MediumとModerateは共にCVSS Score 4.0-6.9を指すようですね。

Rating CVSS Score
None 0.0
Low 0.1 - 3.9
Medium 4.0 - 6.9
High 7.0 - 8.9
Critical 9.0 - 10.0