Product 01
CVE Triage
Is this vulnerability being exploited, and how likely is it to be? One lookup merges the CISA Known Exploited Vulnerabilities catalogue, FIRST EPSS scores and NVD into one flat record with a triage priority.
LiveRefreshed nightly
Endpoints
| Endpoint | Credits | Notes |
|---|---|---|
| GET /v1/cve/{id} | 1 | Look up one CVE. |
| POST /v1/cve/batch | 1 per 10 ids | Look up 1 to 100 CVEs in one call. |
| GET /v1/cve/recently-exploited?days=7&limit=50 | 1 | CVEs added to the KEV catalogue in the window, enriched. |
Lookups are cached for 24 hours (a repeat costs 1 credit). Batch calls take 1 to 100 ids, are never cached, and return results keyed by id, with null for an id that is unknown or suppressed. CVE ids are case insensitive and must match CVE-YYYY-NNNN; anything else returns 422.
Look up one CVE
curl https://api.stackbyte.app/v1/cve/CVE-2021-44228 \ -H "X-API-Key: $STACKBYTE_KEY"
Look up a batch
curl -X POST https://api.stackbyte.app/v1/cve/batch \
-H "X-API-Key: $STACKBYTE_KEY" \
-H "Content-Type: application/json" \
-d '{"ids": ["CVE-2021-44228", "CVE-2023-4966", "CVE-2024-3400"]}'Recently exploited
CVEs added to the KEV catalogue in the last days (default 7), enriched with EPSS and NVD data, up to limit results (default 50). Useful as a daily feed into a ticket queue.
curl "https://api.stackbyte.app/v1/cve/recently-exploited?days=7&limit=50" \ -H "X-API-Key: $STACKBYTE_KEY"
Record fields
Keys follow the Elastic Common Schema vulnerability.* fields where one exists, and everything Stackbyte adds lives under stackbyte.*. The record is flat: each key is a single string containing dots, not a nested object, so it maps straight to a column in Splunk, Sentinel, a data warehouse or a spreadsheet. A field with no value is null, never guessed.
| Field | Meaning |
|---|---|
| vulnerability.id | The CVE id, for example CVE-2021-44228. |
| vulnerability.enumeration | Always CVE. |
| vulnerability.description | English description from NVD. |
| vulnerability.classification | Scoring system of the score below: CVSS. |
| vulnerability.score.base | CVSS base score from NVD. |
| vulnerability.score.version | CVSS version of that score, for example 3.1. |
| vulnerability.severity | Severity from the CVSS score, lower case: critical, high, medium, low. |
| vulnerability.cwe[] | CWE ids, for example CWE-917. |
| vulnerability.reference[] | Reference URLs from NVD. |
| stackbyte.kev.listed | true if the CVE is in the CISA KEV catalogue. |
| stackbyte.kev.date_added | Date CISA added it to the catalogue. |
| stackbyte.kev.due_date | Remediation due date CISA set for US federal agencies. |
| stackbyte.kev.vendor_project | Vendor or project named by CISA. |
| stackbyte.kev.product | Product named by CISA. |
| stackbyte.kev.name | CISA's name for the vulnerability. |
| stackbyte.kev.required_action | The action CISA requires. |
| stackbyte.kev.known_ransomware_campaign_use | Known or Unknown, as published by CISA. |
| stackbyte.epss.score | Probability of exploitation activity in the next 30 days, 0 to 1. |
| stackbyte.epss.percentile | Rank of that score among all scored CVEs, 0 to 1. |
| stackbyte.epss.model_version | EPSS model that produced the score. |
| stackbyte.epss.score_date | Date of the EPSS score. |
| stackbyte.nvd.published | When NVD published the CVE. |
| stackbyte.nvd.last_modified | When NVD last changed the record. |
| stackbyte.nvd.status | NVD's analysis status, for example Analyzed. |
| stackbyte.nvd.cvss_vector | The CVSS vector string. |
| stackbyte.triage.priority | P1, P2, P3 or P4 (rules below). |
| stackbyte.triage.reason | Why the record got that priority, in words. |
| stackbyte.sources[] | Ids of the sources that contributed to this record, for example cisa-kev. |
Triage rules
The first rule that matches sets the priority.
| Priority | Rule |
|---|---|
| P1 | Listed in CISA KEV (exploited in the wild). |
| P2 | EPSS 0.5 or higher, or CVSS 9 or higher with EPSS 0.1 or higher. |
| P3 | CVSS 7 or higher, or EPSS 0.1 or higher. |
| P4 | Everything else. |
The rules rank by evidence of exploitation first, then likelihood, then severity. They are a starting order, not a replacement for knowing your own exposure: a flaw in software you do not run can wait whatever its priority.
Splunk
Score the CVEs your scanner reports once a night, write the result to a lookup file, then join it in any search. open_cves.json holds {"ids": [...]} with up to 100 ids per call; loop for more.
# Score the CVEs your scanner found and write a Splunk lookup file.
# Run nightly from cron on a search head, after the scanner import.
curl -s -X POST https://api.stackbyte.app/v1/cve/batch \
-H "X-API-Key: $STACKBYTE_KEY" -H "Content-Type: application/json" \
-d @open_cves.json \
| jq -r '["cve","priority","epss","kev","ransomware"],
(.data | to_entries[] | select(.value != null) | [
.key,
.value["stackbyte.triage.priority"],
.value["stackbyte.epss.score"],
.value["stackbyte.kev.listed"],
.value["stackbyte.kev.known_ransomware_campaign_use"]
]) | @csv' \
> "$SPLUNK_HOME/etc/apps/search/lookups/stackbyte_cve.csv"Microsoft Sentinel
KQL externaldata cannot send an API key header, so pull the scores in with a Logic App and query them from a custom table:
- Recurrence trigger, once a day after your vulnerability data refreshes.
- HTTP action:
POST https://api.stackbyte.app/v1/cve/batchwith headerX-API-Key(from Key Vault) and body{"ids": [...]}. - Send the records to a custom table, for example
StackbyteCve_CL, through the Logs Ingestion API with a data collection rule that mapsstackbyte.triage.prioritytoTriagePriority,stackbyte.epss.scoretoEpssScoreandstackbyte.kev.listedtoKevListed.
// StackbyteCve_CL: filled daily by a Logic App (see steps above),
// columns CveId, TriagePriority, EpssScore, KevListed.
let triage = StackbyteCve_CL
| where TimeGenerated > ago(2d)
| summarize arg_max(TimeGenerated, *) by CveId;
DeviceTvmSoftwareVulnerabilities
| join kind=inner triage on CveId
| where TriagePriority in ("P1", "P2")
| summarize Devices = dcount(DeviceId) by CveId, TriagePriority, EpssScore, KevListed
| order by TriagePriority asc, EpssScore descDeviceTvmSoftwareVulnerabilities comes from Microsoft Defender Vulnerability Management; any table with a CVE id column works the same way.
Sources and licences
| Source | Licence | Refreshed |
|---|---|---|
| CISA KEV | CC0 1.0 | Nightly |
| FIRST EPSS | FIRST EPSS usage agreement, attribution requested | Nightly (daily scores) |
| NVD API 2.0 | US government work; NVD API terms of use | Nightly, incremental |
null. KEV and EPSS cover every CVE they list.Every response carries these attribution sentences, and so does this page:
- Includes data from the CISA Known Exploited Vulnerabilities Catalog (CC0). Not endorsed by CISA.
- EPSS scores by FIRST.org (https://www.first.org/epss/), used with attribution as requested by FIRST.
- This product uses the NVD API but is not endorsed or certified by the NVD. CVE is a registered trademark of The MITRE Corporation.
Data attribution
- Includes data from the CISA Known Exploited Vulnerabilities Catalog (CC0). Not endorsed by CISA.
- EPSS scores by FIRST.org (https://www.first.org/epss/), used with attribution as requested by FIRST.
- This product uses the NVD API but is not endorsed or certified by the NVD. CVE is a registered trademark of The MITRE Corporation.
- Stackbyte Limited is not affiliated with any government entity or data publisher. Sources and licences are listed on our data sources page.