About Sigma Watch
Why this exists, how it decides what counts as "covered", and where I would not trust it.
The question that started it
A CVE drops. It trends. Within a day somebody on your team is asking whether we need to write a detection for it — and the honest answer is usually "let me go look." That means opening several repositories, each with its own file format and its own conventions, and grepping around for a CVE ID that may not appear in any structured field at all. I have burned afternoons on that lookup, and the worst part is that the answer was frequently "yes, SigmaHQ shipped one four days ago."
So I built the thing that answers it in two seconds. Sigma Watch continuously tracks seven public detection ecosystems - SigmaHQ, Elastic detection-rules, Splunk ESCU, YARA (Yara-Rules/rules), Microsoft Sentinel analytics rules, and the Snort/Suricata network signatures in Emerging Threats Open - extracts every CVE and ATT&CK technique each rule actually covers, and cross-references all of it against NVD, CISA KEV, and the MITRE ATT&CK catalog. One search box, one answer.
The half I actually care about
Coverage lookups are useful. The gap list is the reason I kept building. Filter to CVEs that CISA has confirmed are being actively exploited and that have no rule in any of these repositories, and you get a short, specific list of vulnerabilities where writing your own detection is demonstrably worth the hours. That list is not published anywhere else that I know of, and it is the part of this tool I would check on a Monday morning.
How coverage is determined
Each source exposes its metadata differently, and this matters more than you would expect — so here is exactly what happens rather than a vague claim about "parsing rules":
| Source | CVE reference | ATT&CK reference |
|---|---|---|
| splunk | Dedicated cve: field — structured |
Dedicated mitre_attack_id: field — structured |
| elastic | None. CVE appears only in the rule name or description text | Structured [[rule.threat.technique]] tables |
| sigma | cve.YYYY-NNNNN tag, but most rules don't use it |
attack.tNNNN tags — structured |
| sentinel | None. CVE appears only in the rule name or description text | Dedicated relevantTechniques field — structured |
| snort / suricata | Dedicated reference:cve, field — structured, present on most exploit-class rules |
A metadata: mitre_technique_id key on newer/updated rules only — most rules predate this convention and have none |
| yara | No convention at all across rule authors. Read from a meta: cve field when one
exists, else pattern-matched out of the rule name and every other meta value |
Same situation — scanned loosely across meta values, rarely present |
Where a structured field exists, I read it. Where it does not — Elastic and Sentinel always for CVEs, Sigma most of the time, YARA essentially never for either — I pattern-match CVE IDs and ATT&CK technique IDs out of whatever free text the rule actually has. Every link is stored with how it was found, so the distinction is preserved in the data even though the interface presents both the same way. In practice the inferred matches are reliable, because rule authors put the CVE in the title when the rule is about a CVE. But "in practice reliable" is not "guaranteed correct", and you should know which one you are looking at.
What a "gap" does and does not mean
A gap is a CVE published — or added to CISA KEV — inside the window you selected, with no non-deleted rule in any of these repositories referencing it. That is a precise, checkable claim, and it is narrower than it sounds.
It does not mean no detection exists. Your EDR vendor almost certainly ships private coverage that no public repository knows about. It does not mean you are exposed, and it is not a risk score. Treat the gap list as a research shortlist for rule authoring, not as an audit of your security posture — anyone selling you the second interpretation is overselling this data, and I would rather say so myself than have you find out later.
The other honest limitation: a rule that detects a CVE's exploitation technique without ever naming the CVE will not be credited here. Behavioral rules covering a whole technique class are common and genuinely valuable, and this tool systematically undercounts them. That is a real weakness of CVE-keyed coverage analysis, not an implementation bug I plan to fix.
Data sources
The five git-hosted sources (Sigma, Elastic, Splunk ESCU, YARA, Sentinel) are cloned locally and re-synced on a schedule, diffed commit-to-commit so changes are picked up without hammering anyone's API. Snort and Suricata come from Emerging Threats Open instead, which isn't a git repository but a periodically-updated downloadable bundle - those two are re-synced the same way, just diffed by content hash against the previous download rather than by commit. CVE metadata comes from the NVD API; exploitation status comes from CISA's Known Exploited Vulnerabilities catalog; technique names and tactics come from MITRE's ATT&CK STIX data. Everything this site knows is also available as JSON at /docs, free and unauthenticated.
Live sync status
| Source | Repository | Rules tracked | Last synced | Status |
|---|---|---|---|---|
| sigma | SigmaHQ/sigma | 3763 | 2026-10-02 20:43 UTC | ok |
| elastic | elastic/detection-rules | 2194 | 2026-10-02 20:43 UTC | ok |
| splunk | splunk/security_content | 2175 | 2026-10-02 20:43 UTC | ok |
| yara | Yara-Rules/rules | 3028 | 2026-10-02 20:43 UTC | ok |
| sentinel | Azure/Azure-Sentinel | 482 | 2026-10-02 20:43 UTC | ok |
| snort | Emerging Threats Open (Snort) | 23887 | 2026-10-02 20:45 UTC | ok |
| suricata | Emerging Threats Open (Suricata) | 23879 | 2026-10-02 20:46 UTC | ok |
Enrichment feeds
| Feed | Last run | Status |
|---|---|---|
| nvd_backfill | 2026-10-01 22:07 UTC | ok |
| attack | 2026-10-02 18:29 UTC | ok |
| kev | 2026-10-02 18:29 UTC | ok |
| nvd_recent | 2026-10-02 18:37 UTC | ok |
Rule repositories are polled every 120 minutes.
Methodology note: all coverage data on this site is derived from the public contents of the seven sources named above, parsed automatically, with no manual curation. Nothing here is vendor-supplied and nothing is sponsored. Where a rule's CVE reference was inferred from free text rather than read from a structured field, that inference is recorded in the underlying data and available through the API.