SBOM 漏洞掃描器
上傳鎖定檔或 SBOM,對照已知漏洞檢查每一個固定版本 — 本地解析,對照 OSV 資料庫比對。
鎖定檔是建置實際安裝版本的精確清單 — 而每一個固定版本,都是一次押注:押注自你固定它以來,還沒有人發現其中的漏洞。本掃描器讀取這份清單(package-lock.json、requirements.txt、go.mod,或 CycloneDX / SPDX 格式的 SBOM),只把名稱與版本傳送給公開的 OSV.dev 漏洞資料庫,報告哪些套件存在已知漏洞、嚴重程度如何、哪個版本修復了每個漏洞,以及其中是否有 CVE 列入 CISA 已知遭利用漏洞清單。配套指南你的鎖定檔是否藏著漏洞?說明了掃描結果能證明什麼、不能證明什麼。如果掃描標記了某個 CVE,大量 CVE 分流台可以把它放進利用背景中去看。
最後更新:
你的鎖定檔或 SBOM
支援:package-lock.json、requirements.txt、go.mod、CycloneDX JSON、SPDX JSON。檔案大小上限 5 MB。
格式會根據檔案名稱和內容自動辨識;你也可以在下方自行選擇。
🔒 鎖定檔在瀏覽器內解析,永不上傳。只有套件名稱和版本會傳送給 OSV.dev;只有 CVE 編號會傳送給本站的檢查器,用於查詢 KEV 標誌。
掃描結果
尚未掃描。請在上方上傳或貼上鎖定檔或 SBOM,然後按下「掃描漏洞」。
未發現已知漏洞
掃描的版本均未在 OSV 資料庫中比對到漏洞。這表示還沒有人回報過這些精確版本存在漏洞 — 並不保證程式碼就是安全的。未回報的漏洞、惡意套件和仿冒套件是這項檢查看不到的;文章中說明了這條界線。
你的鎖定檔永不離開本頁
解析完全在瀏覽器內進行:你上傳的檔案 — 或貼上的文字 — 都在本地讀取,絕不上傳到任何地方。只有擷取出的套件名稱和版本會被傳送出去,傳給公開的 OSV.dev 漏洞資料庫(無需帳號、無需金鑰),由它對照已知漏洞進行比對。比對結果中的 CVE 編號隨後會傳送給本站自己的檢查器,用於查詢 CISA KEV。除此之外沒有任何內容離開本頁:沒有檔案內容,沒有路徑,沒有專案名稱。
掃描上限
每次最多掃描 500 個套件 — 超出的部分會列為未掃描。最多取得 200 條漏洞詳情。結果來自 OSV 資料庫,針對檔案中記錄的精確版本;資料庫從未見過的套件版本不會回傳比對結果,這與「安全無虞」不是一回事。
如實說明的限制
「未發現漏洞」是指在 OSV 資料庫中,這些精確版本沒有記錄在案的漏洞。這並不表示程式碼安全:尚未有人回報的漏洞、惡意套件、仿冒名稱和遭到入侵的發布版本,在版本比對檢查面前都是隱形的。
比對是精確到版本的。如果你的檔案固定的是版本範圍而非精確版本,它會被跳過並如實列出 — 掃描器不會猜測你實際安裝的是哪個版本。同樣,掃描器無法對應其生態系的套件也會列為已跳過,絕不會悄悄捨棄。
KEV 標誌來自對本站自有檢查器的一次查詢(CISA KEV 資料,每日更新)。如果該查詢失敗或遭到限流,掃描仍會完成 — KEV 欄只會顯示「unknown」,而不會阻擋你的結果。
為什麼固定版本就是攻擊面
鎖定檔之所以存在,是因為「最新版」不是一個版本號。它記錄建置實際安裝的精確相依樹,讓每台機器、每次部署都得到相同的程式碼。這種確定性也正是鎖定檔可以被掃描的原因:漏洞資料庫以精確的套件和版本為鍵,固定版本一次查詢即可判定,而浮動範圍則做不到。因此掃描結果的好壞取決於檔案本身 — 提交鎖定檔、保持更新,掃描器才能如實告訴你,你交付的是什麼。
這項檢查本身是有意收窄的。OSV.dev 彙整了 GitHub 安全公告、NVD 和各語言生態的漏洞記錄,並對照你的版本進行比對。它做不到的是評判程式碼:一個沒有任何已知 CVE 的套件,仍可能是惡意的、已被放棄的,或是你本想安裝的那個套件的仿冒品。版本比對是一道快速而廉價的首層過濾 — 它能抓住你忘了升級的那個 lodash — 而不是一次安全稽核。
為什麼 KEV 標誌比高 CVSS 分數更重要
CVSS 分數衡量的是漏洞一旦被利用會有多嚴重。CISA 已知遭利用漏洞(KEV)目錄衡量的則是另一件事:它是否正在野外被實際利用。一個中等嚴重程度、但列入 KEV 清單的 CVE,值得本週就修補;一個嚴重程度為重大、但還沒有人武器化的 CVE,往往可以等到下一次計畫升級。這就是為什麼本掃描器把 KEV 的列單獨打上標記,也是為什麼結果按最嚴重程度優先排序 — 但最先要處理的是帶 KEV 標記的那一個。
修復版本本身也有風險。漏洞的修復通常是一個小版本或修補版本,但「已在 4.17.21 中修復」也可能意味著會破壞建置的行為變更,而且有些漏洞根本還沒有修復版本 — 掃描器會如實說明,而不會憑空編一個。先修 KEV 項目,再修已有公開修復版本的重大項目,其餘的排進計畫;固定新版本、提交鎖定檔、重新掃描。同樣的循環也屬於 CI,在每次提取請求時執行,而不是一個季度跑一次。
此 SBOM 中的授權
這裡列出的授權僅來自 SBOM 自身攜帶的授權欄位。鎖定檔(package-lock.json、requirements.txt、go.mod)不攜帶授權資料,因此不會顯示任何內容 — 本頁不會逐一查詢每個套件的授權,因為沒有哪個公開資料庫能可靠地提供這些資訊。
鎖定檔與 SBOM 術語,一一說清
Lockfile. 記錄建置安裝的每一個套件精確版本的檔案 — npm 的 package-lock.json、Python 用 == 固定的 requirements.txt、Go 的 go.mod/go.sum — 讓安裝可以重現。
SBOM. 軟體物料清單(Software Bill of Materials):一份軟體中所有元件的機器可讀清單,通常採用 CycloneDX 或 SPDX 格式。它是把鎖定檔推廣到整個供應鏈。
OSV.dev. Google 的公開漏洞資料庫,彙整 GitHub、NVD 和各語言生態的安全公告,可按精確的套件名稱、生態系和版本查詢。
GHSA. GitHub 安全公告編號(GHSA-xxxx-xxxx-xxxx)。OSV 中大多數 npm、PyPI 和 Go 漏洞都有一個,通常還伴隨一個 CVE 編號。
CVE. 通用漏洞揭露(Common Vulnerabilities and Exposures):共用的編號體系(CVE-YYYY-NNNNN),讓每個資料庫、掃描器和廠商都能談論同一個漏洞。
CVSS. 通用漏洞評分系統(Common Vulnerability Scoring System):0–10 分,衡量漏洞一旦被利用會有多嚴重。9.0 及以上為 CRITICAL,7.0 及以上為 HIGH,4.0 及以上為 MEDIUM,4.0 以下為 LOW。
KEV. CISA 已知遭利用漏洞(Known Exploited Vulnerabilities)目錄:已確認在野外被利用的漏洞,每個都有修復截止日期。KEV 標誌意味著「立即修補」,無論 CVSS 怎麼說。
Fixed version. 漏洞不再存在的第一個套件版本,取自安全公告中受影響範圍的事件記錄。有些漏洞目前還沒有發布修復版本。
Purl. 套件 URL(pkg:npm/[email protected]):用生態系和版本命名套件的標準方式。SBOM 攜帶 purl,掃描器據此知道元件屬於哪個生態系。
常見問題
我的鎖定檔會離開瀏覽器嗎?
不會。檔案在本地解析,永不上傳。只有擷取出的套件名稱和版本會傳送給公開漏洞資料庫 OSV.dev,只有比對結果中的 CVE 編號會傳送給本站自己的檢查器,用於查詢 KEV。檔案內容、路徑和專案名稱永不離開本頁。
為什麼某個套件被列為「已跳過」?
有三個原因:該行不是精確固定(像 ~= 或 >= 這樣的範圍、-r 引用、replace 指令),生態系無法對應到 OSV.dev 支援的生態系,或者掃描觸及了 500 個套件的上限。被跳過的項目總會連同原因一起列出 — 沒有任何內容會被悄悄捨棄。
「未發現漏洞」 — 我就安全了嗎?
不一定。這只表示在 OSV 資料庫中,這些精確版本沒有回報在案的漏洞。未回報的漏洞、惡意或仿冒套件、遭到入侵的發布版本,都不會出現在任何漏洞資料庫中。請把掃描當作首層過濾,而不是安全合格證。
應該先修什麼?
先處理帶 KEV 標記的 — 這些漏洞正在被利用,CISA 會為每個設定截止日期。然後是已有公開修復版本的 CRITICAL 和 HIGH 列,從應用程式實際匯入的套件開始。可以用本站的大量 CVE 分流台,了解每個 CVE 背後的利用背景。
某個漏洞沒有修復版本,怎麼辦?
先檢查是否存在安全公告尚未記錄的更新版本 — 安全公告往往落後於發布。如果確實沒有修復辦法,可以選擇移除該相依性、替換它,或者緩解易受攻擊的程式碼路徑(例如不再把不受信任的輸入傳給受影響的函式),並關注安全公告的更新。做過任何更動後重新掃描。