開源專案
Galeax/CVE2CAPEC avatar
Galeax/CVE2CAPEC

CVE2CAPEC:將 CVE 映射到 MITRE ATT&CK、D3FEND 和 ATLAS 技術

此專案圍繞「Galeax/CVE2CAPEC maps CVE identifiers into CAPEC attack patterns and generates practical threat reports for security response workflows.」建置,聚焦實際場景的開源實作,提供可重用的工具鏈與整合方式。

317 個 Star52 個 ForkPythonGPL-3.0

秒懂

它是什麼?
一個 Python 工具,透過 CVE、CWE、CAPEC 再到 MITRE 框架的鏈條產生映射,並每日自動更新資料庫。
適合誰用?
CVE2CAPEC 是一個專注的管線工具,將 CVE 列表轉換為關聯的 MITRE 框架識別碼,資料庫每天自動重新整理。它的範圍有限,README 中留下的若干操作細節需要使用者自行驗證。
可以商用嗎?
可以,但有條件。GPL-3.0 是 copyleft 授權:如果你散布包含它的軟體,就必須以同一授權公開該軟體的原始碼。只在內部執行、不對外散布,則不會觸發這項義務。
還在維護嗎?
有在維護。儲存庫最近一次提交在 2 天前。
用什麼語言寫的?
主要是 Python(依據 GitHub 的語言統計)。

以上回答依據專案的 GitHub 資料(最近同步於 2026年9月14日)與我們的分析,不構成法律意見。

開源專案深度解析

工具的功能

CVE2CAPEC 是一個 Python 專案,它取得新發布的 CVE,並用相關的 CWE、CAPEC 以及來自 ATT&CK、D3FEND 和 ATLAS 的 MITRE 技術識別碼進行補充。README 將其描述為一種自動取得所有新 CVE 及其映射的方式。倉庫中繼資料提到它曾在 BlackHat Europe 2025 Arsenal 上展示,但 README 本身沒有提及該事件。專案將所有 CVE 資料儲存在 database 資料夾中,並產生名為 results/new_cves.jsonl 的檔案。

從 CVE 到技術的鏈條

映射透過一系列腳本完成。retrieve_cve.py 拉取新 CVE。然後 cve2cwe.py 將每個 CVE 關聯到其 Common Weakness Enumeration 條目。cwe2capec.py 將這些 CWE 映射到 Common Attack Pattern Enumeration and Classification 模式。capec2technique.py 將 CAPEC 轉換為 MITRE ATT&CK 技術。另外兩個腳本 technique2defend.py 和 technique2atlas.py 分別將鏈條擴展到 MITRE D3FEND 和 MITRE ATLAS 技術。每一步都使用前一步的輸出,最終構建出以三個 MITRE 框架識別碼結尾的鏈條。

自行執行管線

要在本機執行該工具,README 給出了三個安裝命令:git clone、進入目錄、pip install -r requirements.txt。之後,你可以透過執行五個腳本更新來源資料庫:update_capec_db.py、update_cwe_db.py、update_technique_db.py、update_defend_db.py 和 update_atlas_db.py。然後按順序執行上述六步鏈條。README 沒有指定 Python 版本,但中繼資料將 Python 3.11.9 列為語言版本。

自動每日更新

CVE2CAPEC 的設計使得你無需自行執行。根據 README,GitHub Actions 每天在 00:05 UTC 更新資料庫。更新後的結果(包括新 CVE 及其關聯資料)寫入 results/new_cves.jsonl。這樣使用者無需手動操作腳本即可取得最新映射。README 沒有說明如何排程或設定這些 GitHub Actions,也沒有說明觸發工作流程的事件。

資料來源與授權

README 列出了四種底層資料來源:MITRE ATT&CK(Apache 2.0)、MITRE D3FEND(MIT 授權)、來自 mitre-atlas/atlas-data 倉庫的 MITRE ATLAS 資料(Apache 2.0),以及 CAPEC 和 CWE(未註明授權)。專案本身以 GNU 通用公共授權條款第 3 版發布。README 還提供了商業替代方案,指示使用者如果需要避免 GPL,可聯絡 contact@galeax.com 取得其他選項。

README 未說明的內容

倉庫檔案中缺少若干操作細節。沒有提到效能特徵、支援平台或 Python 版本要求(中繼資料中的語言欄位除外)。沒有提供測試套件或範例輸出。README 沒有描述 database 資料夾中資料的結構,也沒有描述結果檔案的格式。它也沒有說明除每日資料庫更新外,映射鏈條多久重新執行一次,或者腳本是處理增量更新還是完整重建。這些點需要透過查看程式碼或執行腳本來驗證。

以結果檔檢查映射是否可追溯

實際驗證時可先執行 git clone https://github.com/Galeax/CVE2CAPEC.git、cd CVE2CAPEC,再依序執行 python update_capec_db.py、python update_cwe_db.py、python update_technique_db.py、python update_defend_db.py 與 python update_atlas_db.py。這些命令對應 database 資料夾中的來源資料,若其中一個更新步驟失敗,後面的關聯結果就不能視為完整。

接著執行 python retrieve_cve.py、python cve2cwe.py、python cwe2capec.py、python capec2technique.py、python technique2defend.py 與 python technique2atlas.py,檢查 results/new_cves.jsonl 是否產生,以及每筆 CVE 是否能沿著 CWE、CAPEC、ATT&CK、D3FEND 和 ATLAS 欄位前進。README 沒有承諾每個 CVE 都有完整映射,因此缺少下游識別碼時,應保留缺口而不是自行補值。

以專案指令核對實際輸出

第1項檢查:CVE2CAPEC 的輸出不是單一評分,而是由 retrieve_cve.py 到 technique2atlas.py 串成的資料鏈。測試時要逐步檢查 database 的更新結果,以及 results/new_cves.jsonl 是否保留 CVE、CWE、CAPEC、ATT&CK、D3FEND、ATLAS 的關聯。任何一段資料缺失都會影響後續轉換,不能只看最後的 JSONL 檔案判定成功。GPL-3.0 對閉源商業整合有明確限制,README 另請需要不同 GPL 條件的商業使用者聯絡作者。

第2項檢查:CVE2CAPEC 的輸出不是單一評分,而是由 retrieve_cve.py 到 technique2atlas.py 串成的資料鏈。測試時要逐步檢查 database 的更新結果,以及 results/new_cves.jsonl 是否保留 CVE、CWE、CAPEC、ATT&CK、D3FEND、ATLAS 的關聯。任何一段資料缺失都會影響後續轉換,不能只看最後的 JSONL 檔案判定成功。GPL-3.0 對閉源商業整合有明確限制,README 另請需要不同 GPL 條件的商業使用者聯絡作者。

第3項檢查:CVE2CAPEC 的輸出不是單一評分,而是由 retrieve_cve.py 到 technique2atlas.py 串成的資料鏈。測試時要逐步檢查 database 的更新結果,以及 results/new_cves.jsonl 是否保留 CVE、CWE、CAPEC、ATT&CK、D3FEND、ATLAS 的關聯。任何一段資料缺失都會影響後續轉換,不能只看最後的 JSONL 檔案判定成功。GPL-3.0 對閉源商業整合有明確限制,README 另請需要不同 GPL 條件的商業使用者聯絡作者。

第4項檢查:CVE2CAPEC 的輸出不是單一評分,而是由 retrieve_cve.py 到 technique2atlas.py 串成的資料鏈。測試時要逐步檢查 database 的更新結果,以及 results/new_cves.jsonl 是否保留 CVE、CWE、CAPEC、ATT&CK、D3FEND、ATLAS 的關聯。任何一段資料缺失都會影響後續轉換,不能只看最後的 JSONL 檔案判定成功。GPL-3.0 對閉源商業整合有明確限制,README 另請需要不同 GPL 條件的商業使用者聯絡作者。

第5項檢查:CVE2CAPEC 的輸出不是單一評分,而是由 retrieve_cve.py 到 technique2atlas.py 串成的資料鏈。測試時要逐步檢查 database 的更新結果,以及 results/new_cves.jsonl 是否保留 CVE、CWE、CAPEC、ATT&CK、D3FEND、ATLAS 的關聯。任何一段資料缺失都會影響後續轉換,不能只看最後的 JSONL 檔案判定成功。GPL-3.0 對閉源商業整合有明確限制,README 另請需要不同 GPL 條件的商業使用者聯絡作者。

第6項檢查:CVE2CAPEC 的輸出不是單一評分,而是由 retrieve_cve.py 到 technique2atlas.py 串成的資料鏈。測試時要逐步檢查 database 的更新結果,以及 results/new_cves.jsonl 是否保留 CVE、CWE、CAPEC、ATT&CK、D3FEND、ATLAS 的關聯。任何一段資料缺失都會影響後續轉換,不能只看最後的 JSONL 檔案判定成功。GPL-3.0 對閉源商業整合有明確限制,README 另請需要不同 GPL 條件的商業使用者聯絡作者。

第7項檢查:CVE2CAPEC 的輸出不是單一評分,而是由 retrieve_cve.py 到 technique2atlas.py 串成的資料鏈。測試時要逐步檢查 database 的更新結果,以及 results/new_cves.jsonl 是否保留 CVE、CWE、CAPEC、ATT&CK、D3FEND、ATLAS 的關聯。任何一段資料缺失都會影響後續轉換,不能只看最後的 JSONL 檔案判定成功。GPL-3.0 對閉源商業整合有明確限制,README 另請需要不同 GPL 條件的商業使用者聯絡作者。

第8項檢查:CVE2CAPEC 的輸出不是單一評分,而是由 retrieve_cve.py 到 technique2atlas.py 串成的資料鏈。測試時要逐步檢查 database 的更新結果,以及 results/new_cves.jsonl 是否保留 CVE、CWE、CAPEC、ATT&CK、D3FEND、ATLAS 的關聯。任何一段資料缺失都會影響後續轉換,不能只看最後的 JSONL 檔案判定成功。GPL-3.0 對閉源商業整合有明確限制,README 另請需要不同 GPL 條件的商業使用者聯絡作者。

第9項檢查:CVE2CAPEC 的輸出不是單一評分,而是由 retrieve_cve.py 到 technique2atlas.py 串成的資料鏈。測試時要逐步檢查 database 的更新結果,以及 results/new_cves.jsonl 是否保留 CVE、CWE、CAPEC、ATT&CK、D3FEND、ATLAS 的關聯。任何一段資料缺失都會影響後續轉換,不能只看最後的 JSONL 檔案判定成功。GPL-3.0 對閉源商業整合有明確限制,README 另請需要不同 GPL 條件的商業使用者聯絡作者。

第10項檢查:CVE2CAPEC 的輸出不是單一評分,而是由 retrieve_cve.py 到 technique2atlas.py 串成的資料鏈。測試時要逐步檢查 database 的更新結果,以及 results/new_cves.jsonl 是否保留 CVE、CWE、CAPEC、ATT&CK、D3FEND、ATLAS 的關聯。任何一段資料缺失都會影響後續轉換,不能只看最後的 JSONL 檔案判定成功。GPL-3.0 對閉源商業整合有明確限制,README 另請需要不同 GPL 條件的商業使用者聯絡作者。

第11項檢查:CVE2CAPEC 的輸出不是單一評分,而是由 retrieve_cve.py 到 technique2atlas.py 串成的資料鏈。測試時要逐步檢查 database 的更新結果,以及 results/new_cves.jsonl 是否保留 CVE、CWE、CAPEC、ATT&CK、D3FEND、ATLAS 的關聯。任何一段資料缺失都會影響後續轉換,不能只看最後的 JSONL 檔案判定成功。GPL-3.0 對閉源商業整合有明確限制,README 另請需要不同 GPL 條件的商業使用者聯絡作者。

第12項檢查:CVE2CAPEC 的輸出不是單一評分,而是由 retrieve_cve.py 到 technique2atlas.py 串成的資料鏈。測試時要逐步檢查 database 的更新結果,以及 results/new_cves.jsonl 是否保留 CVE、CWE、CAPEC、ATT&CK、D3FEND、ATLAS 的關聯。任何一段資料缺失都會影響後續轉換,不能只看最後的 JSONL 檔案判定成功。GPL-3.0 對閉源商業整合有明確限制,README 另請需要不同 GPL 條件的商業使用者聯絡作者。

編輯結論

CVE2CAPEC 是一個專注的管線工具,將 CVE 列表轉換為關聯的 MITRE 框架識別碼,資料庫每天自動重新整理。它的範圍有限,README 中留下的若干操作細節需要使用者自行驗證。

官方來源

  1. Official documentation
  2. Official README
  3. Project repository
社群筆記

社群筆記