AI security · detection engineering
From vulnerability to detection
AI is speeding up how fast vulnerabilities are found and exploited. Detection rules have not kept up. This piece lays out the gap, a flow that closes it, and an experiment with open tools that shows how it works.
Usman Chaudhary · Field CISO at Google Cloud · written in a personal capacity, views are my own · October 2026
TL;DR
- The gap. AI finds vulnerabilities faster than teams can patch them. Until the fix is live, a SIEM detection rule is how the SOC sees an attack, and writing that rule is left to the customer.
- The fix. Build a SIEM rule for every vulnerability you find, as part of the vulnerability and patch process: check existing coverage, draft or translate what's missing, verify it, deploy it, and retire it once the patch is proven.
- The experiment. I built that flow with open tools. It turned vulnerabilities in custom and vendor code into SIEM rules, and agentic checks caught bad rules before anyone reviewed them.
The gap this piece is trying to close
The idea: a vulnerability should not stop at a ticket. It should also get a detection decision that covers the time until the patch is proven in production.
Part 1 · The problem and the fix
1AI is finding vulnerabilities faster than we can patch them
AI scanners now read code, find real vulnerabilities, and in many cases confirm them with a working reproduction. On the vendor side, CISA's catalog of known exploited vulnerabilities stood at 1,734 entries this week, with 300 added in the last twelve months. Attackers have access to the same class of tools.
Patching has not sped up at the same rate. Change windows, regression testing, and vendor fixes that arrive late all set the pace. The result is simple arithmetic: at any given moment, more vulnerabilities are known and exploitable than are fixed.
2Between discovery and patch, detection is the missing layer
Every vulnerability has a window. It opens when the vulnerability is known and closes when the fix is running in production and proven to work. What fills that window depends on whose code it is:
- Custom code: the fix exists, often an AI-generated patch, but it is still in review, testing, and the release cycle.
- Vendor code: you are waiting on the vendor to ship a patch, and then on your own change window to apply it.
Mitigations can reduce exploitability, but inside that window, detection is what tells the SOC whether someone is trying. By detection I mean a SIEM detection rule that matches an exploit attempt in the logs you collect; I'll call it a rule for short. Without it, you may hear about the attempt later, from the incident.
In Handling the Vulnerability Deluge Without Panic I argued for prioritizing the flood. This piece asks what the SOC can watch for while the fix is still coming.
3But writing the SIEM rule is left to the customer
I keep seeing the same gap from two directions:
- Custom code: an AI scanner confirms a vulnerability, it goes into a ticket, and everyone waits for the patch, increasingly an LLM-generated one. No one writes a rule for the meantime.
- Vendor code: an advisory says a CVE is exploited and indicators are published. Sometimes a rule follows. Often it exists only in another SIEM's language, or not at all.
In both cases the burden of turning a vulnerability into a detection lands on the customer's SOC, the team with the least time to do it.
To see how thin open coverage is, I checked every CVE on CISA's exploited list against four widely used open SIEM rulesets: SigmaHQ, Splunk, Elastic and Google SecOps community rules. A CVE counts as covered if any rule in any of the four mentions it.
Some of that gap is by design. Open rulesets favor behavior, like "web server spawns a shell," which catches many exploits without naming any. Network devices are often covered by IPS signatures and vendors' private content. Some vulnerabilities leave little in logs at all. But none of that answers the question a SOC gets the day a CVE lands: are we covered for this one, on these assets, with the logs we collect?
- A behavior rule still has to be mapped and tested against the CVE.
- Private content only helps if you bought it.
- A vulnerability with no log signature still needs a clear "patch only" answer.
All of that work lands on the customer, and for nine of every ten new exploited CVEs, there is no open rule to start from.
4One flow builds a SIEM rule for every vulnerability
The pieces already exist. Scanners find vulnerabilities. Open rulesets hold a lot of detection content. Models can draft and translate rules. What is missing is the sequence that connects them, so that every vulnerability you find ends in one of three places: a rule you deploy, a log you start collecting, or a clear statement that only the patch will help.
Every tool named is public. The model in stage 3 is whichever you have access to.
Four design choices matter most:
- Every vulnerability, no triage gate. Nobody should have to decide first whether a vulnerability is exploited or important enough. Exploitation data can set the order of the queue, but it should not decide what gets a rule.
- Check coverage before writing anything. Often a rule already exists in another format and only needs translating, or it exists and the asset doesn't send the log it reads. That is a log pipeline fix, not a new rule.
- Verify every rule in layers before it alerts, covered in section 7.
- Keep the rule on after the patch as insurance, until the fix is proven and no unpatched copies remain, then retire it so the ruleset doesn't grow forever.
Part 2 · The experiment
5So I built the flow with open tools
To test whether this holds up outside a diagram, I built it, and ran it on two targets:
- Custom code: a deliberately vulnerable open source web app, scanned by VVAH, Visa's open source vulnerability harness.
- Vendor code: a fictional company I called Example Corp, with real, publicly listed exploited CVEs mapped onto its assets.
For each vulnerability, the flow checks coverage against four open rulesets, has a model draft or translate a rule where none exists, and runs agentic checks on every draft. AI wrote the code under my direction; I set the requirements and made the calls on what went in. Everything uses public sources, and there are no exploit details on this page.
6It turned vulnerabilities in custom and vendor code into SIEM rules
Custom code. VVAH confirmed 63 vulnerabilities in the test app, found and verified in a lab rather than seen exploited in the wild. The flow gave every one of them an answer:
- 18 covered by just 5 rules. One of them, the app spawning a shell, covered 12 on its own.
- 8 need request-body logging, which ordinary web logs don't record.
- 17 need behavioral baselines, because the attack looks like a normal request from the wrong person.
- 20 leave no signal at request time, so the patch is the only control.
Detection engineering cannot manufacture telemetry that does not exist, but knowing which bucket a vulnerability falls into is useful even when the answer is "patch it."
Vendor code. Example Corp had 99 exposures to known exploited CVEs. I started with these because that is where public detail exists to write a rule from; the flow treats every other vulnerability the same way.
Of the 48 on assets that send logs, 5 were correctly marked as having no rule possible, so the answer is to patch. Most of the rest lacked enough public detail to write a responsible rule.
The 11 surprised me most. A public rule already existed, written for Splunk or Elastic. They were still gaps, because a rule that isn't deployed detects nothing, and it has to be converted to whatever SIEM you run before it can be. But translating an existing rule is far cheaper than writing a new one, and a model is good at it. In the flow, the model translates it to Sigma, an open rule format that converts to most SIEMs.
7I used agentic code checks to speed up approval
A model can draft a rule in seconds, but a bad rule costs more than no rule. A noisy one burns analyst time. A silent one gives false confidence. Today every rule waits for a detection engineer to read it, and as volume grows, that review becomes the slowest step.
So I put layers of agentic checks in front of the reviewer. By the time a rule reaches a person, it has already been checked and questioned, and approval is quick. Each layer catches what the one before it cannot. I built the first two.
Layer 1Automated checks
Each rule must be valid Sigma, read a log the asset actually sends, and use only values that appear in the source material. That last check earned its place: in one case a model wrote a rule from what it remembered about a CVE instead of the sources it was given, and the check flagged every value as untraceable.
Layer 2An AI reviewer
A second model, separate from the one that drafted the rule, reviews it the way a detection engineer would. Would it fire on normal traffic? Is it really about this CVE? Did a translation change the logic? Do our logs carry the fields it needs? I first did this review in a working session, then automated it as a step in the flow. It caught:
- A rule that would have fired on every failed VPN login, not only the targeted one.
- A "CVE rule" that was really a generic Java-spawns-a-shell rule with a CVE name on it.
- A translation stricter than its source, which would have missed variants the original caught.
- Web-request rules for assets whose firewall logs contain no URLs, so they could never fire.
- Rules for hosts already on a fixed version, where a hit means an attempt, not a compromise.
All of this happened before any person looked at a rule. But the two reviews did not always agree on what to do with a rule. An AI reviewing an AI is still an opinion, not evidence.
Layer 3Prove it before it alerts
A natural extension is a third layer: proof. Many AI scanners already produce a working reproduction of the vulnerability. Replay that attack in your SIEM's development environment and confirm the rule fires. It never touches production, and it turns a reviewed rule into a proven one.
The standard is simple: a rule fires on the attack, in your own SIEM, on the logs you actually collect. The reviewer then approves on evidence and spends their time on the exceptions.
Conclusion
You now have a working model from vulnerability to SIEM rule. Every vulnerability you find gets a rule, a log to collect, or a clear "patch only" answer, and that protects your environment in the window before the patch lands. The pieces are open tools, the drafting is automated, and agentic checks keep approval quick.
Recap
- 1
The problem
AI finds vulnerabilities faster than we patch them
More are known and exploitable at any moment than are fixed.
- 2
The problem
Detection is the missing layer
Until the fix is live, a SIEM rule is how the SOC sees an attempt.
- 3
The problem
Writing that rule is left to the customer
For nine in ten new exploited CVEs, no open rule exists.
- 4
The fix
One flow covers every vulnerability
Check coverage, draft or translate, verify, deploy, retire.
- 5
The experiment
I built it with open tools
Vulnerabilities in custom and vendor code became SIEM rules.
- 6
The experiment
Agentic checks speed up approval
Bad rules were caught before anyone looked.
Call to action
Embed detection in your vulnerability and patch process.
Every vulnerability ticket should answer two questions, not one: when will it be patched, and how will we see an attack until then? The second answer is a SIEM rule, a log to start collecting, or "patch only." It ships with the ticket and retires when the patch is proven.
Try it yourself
The code, the example data and the reviewed rules are open source.
github.com/usmanaminch/ai-mastery-2026 · vvah-to-sigma ↗Open tools used
- Visa Vulnerability Agentic Harness (VVAH)
- CISA Known Exploited Vulnerabilities catalog · FIRST EPSS
- SigmaHQ rules and sigma-cli
- Splunk security_content · Elastic detection-rules · Google SecOps community rules
- ProjectDiscovery Nuclei templates
Appendix · How the code maps to the flow
The repository has two programs, one per input:
- Custom code (
vvah_to_sigma) works like a translator. It turns a known weakness type into a rule template. No model is needed, because VVAH has already done the analysis. - Vendor code (
exposure_to_sigma) works like a detective. It first asks whether a rule already exists and would fire on your logs, and drafts one with a model only when it does not.
| Stage | Custom code | Vendor code | Where in the code | Status |
|---|---|---|---|---|
| Signal | ||||
| 1Find | Reads VVAH's report of confirmed vulnerabilities | Reads Trivy or Grype scans, an inventory CSV, or a scanner export. Every vulnerability gets a verdict and a draft; CISA KEV and EPSS only set the order | vvah_to_sigma/convert.pyexposure_to_sigma/adapters.pyfeeds.py | Built |
| Create | ||||
| 2Check coverage | Not yet: writes a rule for every detectable weakness | Your rules plus SigmaHQ, Splunk, Elastic and SecOps rules, and whether the asset sends the log each rule reads | rulesets.pyanalyze.pyreport.py | Partly |
| 3Draft or translate | No model needed: each weakness type maps to a rule template, scoped to the exact URL route in your code | Your chosen model translates an existing rule, or drafts one from advisory text and scanner checks | cwe_map.pyroutes.pydraft.py | Built |
| Verify | ||||
| 4Automated checks | Templates are fixed, so nothing to ground | Every value traced to the source, the log is one the asset sends, and the rule is valid Sigma | draft.py | Built |
| 5AI review | Not needed for fixed templates | A second model reviews each rule like a detection engineer and answers keep, edit, hunt or reject | draft.py --review | Built |
| 6Prove it | Replay VVAH's reproduction in the SIEM's development environment and confirm the rule fires | Replay the scanner check in the SIEM's development environment and confirm the rule fires | Not built | Extension |
| Operate | ||||
| 7Deploy | Convert to your SIEM's language with sigma-cli | Same | pipelines/secops_webserver.yml | Partly |
| 8Retire | Each rule says when to retire it | Re-running the coverage check shows what is patched | Rule descriptions | Partly |
Files are under vvah-to-sigma/ in the repository. "Partly" means the step exists as a manual action or a note, not as automation yet.