はじめに📕
この記事にたどり着いてくれて、ありがとうございます!
今回は業務で出てきた CVE について知るための記事です!
この3文字を見たときになんとなく 脆弱性の番号 だなーって思うくらいで、
これ以上のことは正直あんまり詳しくないです。
そのため、「そもそもCVEってなに?」から「危険度の判断の仕方」、
「実際にフロントエンド開発ではどう活用するか?」という点を踏まえてまとめていきます!
備忘録に近い記事なので軽い気持ちで見てもらえたら嬉しいです🙏
CVEとは🐛
CVEとは Common Vulnerabilities and Exposures の略で、
ソフトウェアやシステムで見つかった既知の脆弱性を識別するための世界共通のIDです。
7月にリリースされたNode.jsのアップデート記事を見ると、以下のようなものがあります。
https://nodejs.org/en/blog/vulnerability/july-2026-security-releases
CVE-2026-56846
CVE-2026-56848
CVE-2026-58043
これらは「脆弱性そのもの」を表しているのではなく、
脆弱性に付けられた識別番号だと考えるとイメージしやすいです!
また似ているものに「GHSA(GitHub Security Advisory)」というものもあります。
こちらは、GitHubが管理している脆弱性情報の識別番号で、
GitHub上でライブラリの脆弱性を扱うためのものになります。
IDは以下のようになっています。
GHSA-xxxx-xxxx-xxxx
そして間違ってはいけないのは、CVEとGHSAは、
*必ずどちらも存在するわけではないということです。
CVEとGHSAは別々の仕組みで管理されています。
同じ脆弱性に対して、
CVE IDとGHSA IDの両方が付与される場合もありますが、
必ず両方存在するわけではありません。
全体的に見た場合このようなイメージなります。
脆弱性発見
↓
┌─────────────┐
↓ ↓
GHSAが付与 CVEが付与
(GitHub管理) (世界共通管理)
↓ ↓
└──────┬──────┘
↓
同じ脆弱性を指す場合もある
CVE IDの見方🔍
今回は最近見つかった、Vitestの脆弱性を例として解説していきます。
https://github.com/advisories/GHSA-2h32-95rg-cppp
CVE IDは以下のような形式になっています。
CVE-2026-47428
それぞれ以下の意味があります。
| 項目 | 内容 |
|---|---|
| CVE | Common Vulnerabilities and Exposures |
| 2026 | CVE IDが採番された年 |
| 47428 | その年の通し番号 |
ここで注意したいのが、
採番された年 = 脆弱性が発見された年ではない
という点です。
発見されたタイミングや公開されたタイミングによって前後することもあります。
また、通し番号が大きいから危険というわけでもありません。
あくまで「識別するための番号」であり、
番号そのものに意味はありません。
危険度については次でまとめます👉
CVEの危険度はどう判断する🤔
「じゃあこのCVEは危険なの?」というと、
CVE IDだけでは判断できません。
危険度を表すために使われるのが 、
CVSS(Common Vulnerability Scoring System) です。
CVSSでは0.0〜10.0のスコアで危険度が評価されています。
| スコア | 危険度 |
|---|---|
| 0.0 | None |
| 0.1〜3.9 | Low |
| 4.0〜6.9 | Medium |
| 7.0〜8.9 | High |
| 9.0〜10.0 | Critical |
例えば
CVE-2026-47428
CVSS:9.6(Critical)
と書かれていれば、
「CVE-2026-47428という脆弱性は、非常に危険度が高い」
という意味になります。
つまり、
- CVE = 脆弱性の名前(ID)
- CVSS = 危険度
という役割の違いがあります。
またCVSSにはv3.xやv4.0などのバージョンがあります。
CVSS v4.0では、
従来の攻撃可能性や影響度に加えて、
実際の脅威状況や環境ごとのリスクをより考慮できるようになりました。
現在はv4.0への移行が進んでいますが、
脆弱性情報によってはCVSS v3のみ提供されている場合もあります。
(今回の CVE-2026-47428 はv3のみのようでした。)
フロントエンド開発ではどのように検知するか🧑💻
フロントエンド開発では、
普段利用しているツールが自動で検知してくれます。
代表的なのは以下です。
npm audit- GitHub Dependabot
- GitHub Security Advisories
npm audit
例えばローカルにあった古いプロジェクトに対して npm audit を実行すると、
以下のように脆弱性情報が表示されます。
js-cookie <=3.0.5
Severity: high
JavaScript Cookie: Per-instance prototype hijack in assign() enables cookie-attribute injection - https://github.com/advisories/GHSA-qjx8-664m-686j
fix available via `npm audit fix`
node_modules/js-cookie
セキュリティバージョンアップであれば、
npm audit fix で修正可能ですが、
メジャーアップデートの場合は、 npm audit fix --force のように、
強制アップデートを勧められる場合があるため、
どのようなアップデートかを確認してから対応しましょう。
GitHub Dependabot
GitHubではDependabotが自動で脆弱性を検知し、
- 「このライブラリに脆弱性があります」
- 「このバージョンへ更新してください」
とPull Requestまで作成してくれることがあります。
実際にリポジトリに設定してみました。
- 該当リポジトリを開く
- Settings
- Security and quality
- Dependabot security updates を Enableする(スクショはenable後です)
そうすると、プルリクが作成されました🎉
こちらはSettingsでの設定も可能ですし、
.github/dependabot.yml での設定も可能です。
(プルリク作成の最大数やどの期間でチェックするかなどもチューニング可能です)
また個別でCVE番号を検索する際は「NVD」で検索が可能です。(サイトがやや重い・・・)
https://nvd.nist.gov/vuln/search#/nvd/home?resultType=records
最後に🙏
今回はCVEについて簡単にまとめてみました!
この記事を書く前は「脆弱性の番号なんだろうな〜」くらいの認識でしたが、
調べてみると
- CVEは脆弱性を識別するための世界共通ID
- 危険度はCVSSで判断する
- フロントエンドでは
npm auditやDependabotなどが検知してくれる
ということが分かりました。
私と同じように「なんとなく聞いたことはあるけど詳しくは知らない」という方の参考になれば嬉しいです🙌


