Blog / AI & OSS Security

The Commit Is the CVE

AI agents, silent fixes, and the collapse of the patch-gap window in open-source software.

BK
Bernhard Kreinz
~10 min read

The silent fix — a security-relevant commit landing in public source without a CVE, advisory, or flag — is now the dominant pre-disclosure attack surface in open-source software. AI agents are collapsing the patch-gap window from days to hours, and from the long tail of OSS repositories to all of them. The TLCTC reading is restrained: this is not a new threat cluster, it is a velocity collapse in the attacker-preparation phase of #2 and #3 exploitation. The consequences for advisory-driven vulnerability management are not.

1. What "silent fix" means

A silent fix is a security-relevant commit that lands in a public source repository without being announced as such — no CVE at the time of commit, no security advisory, often no flag in the commit message beyond a technical description of the change. The bug is fixed in the tree; the world is not told it was a bug.

For the Linux kernel this is policy, not accident. Greg Kroah-Hartman and Sasha Levin have stated the position repeatedly: all bugs are potential security bugs, gating fixes on coordinated disclosure delays everyone's safety, and CVE assignment is a downstream administrative process that should not throttle upstream merges. The 2024 elevation of the Linux kernel to its own CNA formalised retroactive CVE assignment; it did not change the underlying disclosure asymmetry. The fix is public the moment it lands in linux-next. The CVE may follow days, weeks, or — for most fixed bugs — never.

This is the extreme version. Mature OSS projects with formal security teams (OpenSSL, Mozilla, PostgreSQL, Apache) embargo security fixes and coordinate disclosure. Even these are not airtight — embargo leaks, accidental disclosure via test suites, fix patterns visible in pre-release branches. The middle and long tail — widely-deployed libraries without dedicated security programs — sits closer to the kernel model than to the embargoed one. The silent fix is the default for most OSS, not the exception.

2. The traditional patch-diffing cycle

Patch diffing as an attacker discipline is twenty years old. The canonical Microsoft case — Patch Tuesday on the second Tuesday, working PoCs by Wednesday morning — was built on small teams of skilled reverse engineers diffing binary updates against the previous version. The same workflow applies to OSS source, more cheaply: pull the upstream tree before and after the commit, examine the diff, hypothesise the bug class from the shape of the change, build a PoC against the unpatched version.

The bottleneck has always been skilled human time per repository. Diffing the Linux kernel requires subsystem expertise. Diffing Chromium requires sandbox knowledge. Diffing PostgreSQL requires planner internals. A given attacker covers a small handful of high-value targets; the long tail of OSS dependencies receives almost no attention from this workflow at all.

3. What AI agents change

The shift is economic, not categorical. Three things change together:

  • Scale. A modest AI-agent harness can monitor commits across thousands of repositories continuously. The marginal cost of adding another repo is approximately zero. The long tail becomes addressable for the first time.
  • Specialisation collapse. A general-purpose code-understanding model does not need kernel-subsystem expertise to recognise that a commit changing buffer-handling logic in a code path reachable from a syscall is security-relevant. It does not need planner internals to flag a SQL-injection mitigation. The skill barrier that previously gated patch-diffing collapses to the model's competence ceiling, which is rising fast.
  • Pipeline integration. Once commit triage is automated, the downstream stages — vulnerability hypothesis, PoC synthesis, validation against the unpatched build — are tractable for the same agent or a chained one. Public research demonstrates each stage in isolation; the engineering work to connect them is incremental and under way in both offensive-research and academic contexts (DARPA AIxCC outputs are the most visible).

The effect on the timeline is the point of this post. The patch-gap window measured from commit landing to working exploit available was previously days–weeks for high-value targets and effectively infinite for everything else. It is now hours for high-value targets and shrinking toward hours for the rest. The asymmetric beneficiary is the attacker, because defenders rely on advisory-driven pipelines: vulnerability scanners, SBOMs, ticketing systems, patching SLAs all key off CVE publication and vendor advisories. The fix is public; the CVE is not; the exploit may exist; defenders have no signal.

This is not a new attack. It is a collapse of the window inside which the existing attack is feasible.

Patch-gap window collapse — defender clock vs attacker clock A two-lane horizontal timeline comparing the patch-gap window in the pre-AI regime (CVE precedes exploit availability, defender gets a patch window) and the AI-agent regime (exploit availability precedes CVE, defender has no advisory-anchored window). Patch-gap window — defender clock vs attacker clock Pre-AI regime defender gets a patching window Commit CVE / Advisory ITW exploit silent fix: days–weeks patch window: days AI-agent regime exploit arrives before advisory Commit ITW exploit CVE / Advisory hours defender's blind window CVE: weeks later — too late t = 0 (commit lands) → time
Figure 1 — Same upstream commit, two clocks. In the pre-AI regime the CVE precedes the in-the-wild exploit and the green band is a real patching window. In the AI-agent regime the exploit lands hours after commit and the CVE arrives weeks too late; the red band is the defender's blind window.

4. The TLCTC reading

The temptation is to treat AI-augmented patch-diffing as a new threat. It is not. TLCTC is cause-side, axiomatic, and actor-agnostic; the cause-side cluster of any exploit derived from a silent fix is whatever cluster the eventual exploit lands in — the AI tooling is not part of the classification.

Concretely:

  • An AI agent that diffs a Linux kernel commit, derives a PoC, and uses it for local privilege escalation against an unpatched host produces an attack path whose final step is #2.2 Exploiting Server. CVE-2026-31431 ("Copy Fail") is the worked example.
  • An AI agent that diffs a Chromium fix, derives a sandbox escape, and lands it via a malvertising chain produces a path ending in #3 Exploiting Client.
  • An AI agent that diffs a CI-tool postinstall hook to find a privilege-boundary error produces a path ending in #1 Abuse of Functions if the boundary is a designed feature, or #2 if it is a code flaw.

The AI capability sits upstream of the attack path. It belongs to the attacker's R&D phase — the work of building the exploit before it is deployed against any target. TLCTC does not classify R&D; it classifies what happens to the target.

Axiom check

If the silent-fix / AI-agent workflow looked like a new cluster, the framework would have a hole. It does not. The workflow is a means of producing exploit code; the exploit code, when used, generates an attack path whose steps are already classified by existing clusters. Adding "AI-assisted exploit generation" as a cluster would violate Axiom III (Separation): means of producing an attack are not the attack itself.

What TLCTC does model directly is the consequence of this R&D shift, and the consequence is velocity. The patch-gap window — between silent fix landing in source and exploit availability — was historically a velocity buffer for defenders. AI agents collapse that buffer. For the #2 / #3 clusters the preparation phase trends toward VC-4 independent of the deployment phase. Cluster assignment unchanged. Velocity envelope changed.

4.1 What degrades: the patching KCI

The control-effectiveness consequence lives in the Key Control Indicator layer, not in detection. Patching as a control still works; what degrades is the measurement of whether patching is working in time. Two KCIs are affected, both anchored on advisory publication as their reference event:

  • Technical KCI — patch coverage against the advisory feed. Typical form: "≥X% of critical assets patched within Y days of CVE publication." The numerator does not change. The reference clock does. Advisory publication previously preceded broad exploit availability by days to weeks; under AI-agent silent-fix weaponisation it follows it. The same coverage percentage no longer maps to the same risk reduction.
  • Procedural KCI / KPI — MTTP from advisory. Same problem in temporal form. The SLA still hits, but the SLA was calibrated against an attacker-preparation-phase Δt that no longer exists. MTTP-from-advisory has lost its predictive relationship to MTTP-from-commit-landing, which is the clock that operationally matters.

The framework's axiom-compliance principle (v2.1 §10.8) is the lever here, and it is worth stating in full: a threat is a cause-side causal cluster (one of #1#10); a control gap is the absence or degradation of a defensive measure. Indicators must not conflate them. "Slow patching is a threat" is the wrong framing; "patching is less effective against #2 / #3 than the KCI currently shows" is the right one. Applied here: the threat (#2 / #3) is unchanged; the control's measured effectiveness against that threat has collapsed because the KCI's reference event has drifted out of alignment with the threat economics. An organisation can hit 100% on its advisory-anchored patching KCI and still lose every #2 / #3 race that uses a silent-fix-derived exploit. The gap is not in execution against the KCI; it is in the KCI itself.

KCI vs. DCS — keep them separate

The temptation is to express this as a DCS (Detection Coverage Score — defined as MTTD ÷ attack velocity Δt, with DCS > 1.0 indicating that the attacker completes the transition before the defender detects it) degradation. It is not. DCS at the actual exploitation edge — kernel primitives firing in sub-second time per Copy Fail — was already structurally above 1.0 before any silent-fix consideration, because no SOC reaches sub-second MTTD. The framework's standing guidance for sub-minute attack velocities is already "invest in prevention, not in detection speed." What is new is that the prevention investment itself — patching — is now being measured against a reference event (advisory publication) that no longer correlates with risk reduction. The shift is at the Control Objectives layer, not the Detection layer.

Cause-side prevention dominance, which TLCTC has always advised, becomes structurally required rather than recommended. The recommendation hierarchy does not change. The KCI that operationalises it has to.

5. CVE-2026-31431 as the worked data point

The Copy Fail timeline from the original analysis shows the pattern operating without the AI agent yet being the dominant actor — and shows what tightens when the agent is the dominant actor:

EventWindow
Silent fix lands in upstream tree≈ 2 weeks before public CVE
Public disclosure + CVE-2026-31431 + PoCsT0
In-the-wild exploitation confirmedT0 + ~3 days

The speed from public disclosure to in-the-wild exploitation was consistent with diff-driven weaponisation by skilled human operators in the pre-disclosure window, not with independent rediscovery. The corollary: whoever weaponised it had two weeks of silent-fix lead time over advisory-driven defenders.

For Copy Fail specifically the diff was small, the bug class (in-place AEAD scatterlist write) was recognisable, the exploit fit in 732 bytes of Python, and the target file (/etc/passwd via page cache) was canonical. These are exactly the properties that make a silent fix maximally tractable for AI-agent weaponisation. Nothing in that workflow required novel research from a human attacker. The next CVE-2026-31431-shaped event should be assumed to compress the 2-week window toward hours.

The kernel community will not change its disclosure model. It is institutionally and philosophically opposed to embargo, and the model has produced more secure kernels than the alternative. This is not a complaint; it is a constraint. Defensive posture must not depend on the upstream world adapting.

5.1 The recurrence — eleven KEV-confirmed kernel exploitations since May 2024

Copy Fail is not the first kernel exploitation to ship with a silent-fix prologue, and it will not be the last. The pattern repeats: an upstream commit lands in the tree, exploitation occurs in the window before public attribution, the CVE is assigned retroactively, and CISA's Known Exploited Vulnerabilities catalog acknowledges it last. The list below is not a count of recent kernel bugs — it is a count of kernel bugs CISA had to add to a coercive federal patching list because exploitation was confirmed in the wild. Every entry had an upstream fix before it had a CVE.

KEV-addedCVEComponent / shape
2026-01-26CVE-2018-14634create_elf_tables() integer overflow — eight-year-old upstream fix, KEV in 2026
2025-10-06CVE-2021-22555netfilter heap out-of-bounds write — four-year-old upstream fix
2025-09-04CVE-2025-38352TOCTOU race, high C/I/A impact
2025-06-17CVE-2023-0386OverlayFS uid-mapping LPE — publicly weaponised
2025-04-09CVE-2024-53197USB-audio driver out-of-bounds access
2025-04-09CVE-2024-53150USB-audio driver out-of-bounds read
2025-03-04CVE-2024-50302HID report use-of-uninitialised-resource (memory leak)
2025-02-05CVE-2024-53104UVC (USB Video) driver out-of-bounds write
2024-08-07CVE-2024-36971net/dst route use-after-free — Linux/Android RCE
2024-06-26CVE-2022-2586nf_tables nft_object use-after-free
2024-05-30CVE-2024-1086nf_tables UAF — KCRU: Known (ransomware-weaponised); Notselwyn public PoC
KEV catalogue lag — upstream fix year vs KEV-added date For each of the eleven KEV-confirmed Linux/Android kernel exploitations added since May 2024, a horizontal bar shows the years between approximate upstream fix and CISA KEV addition. Bars range from ~0.2 years (CVE-2024-1086, CVE-2024-36971, CVE-2025-38352) to ~8 years (CVE-2018-14634). KEV catalogue lag — upstream fix → KEV-added eleven Linux/Android kernel exploitations since May 2024 2018 2020 2022 2024 2026 upstream fix (approx.) KEV-added lag in years CVE-2018-14634 8.1y CVE-2021-22555 4.3y CVE-2023-0386 2.5y CVE-2022-2586 2.0y CVE-2024-53197 1.3y CVE-2024-53150 1.3y CVE-2024-50302 1.2y CVE-2024-53104 1.1y CVE-2024-36971 0.2y CVE-2024-1086 ★ ransomware-weaponised 0.3y CVE-2025-38352 0.2y
Figure 2 — Eleven KEV-confirmed kernel exploitations since May 2024, ordered by lag. The two outliers at top (CVE-2018-14634, CVE-2021-22555) are not silent-fix-to-exploit incidents in the Copy Fail sense — they are evidence that CISA's catalogue lags the upstream tree by years. The short bars at the bottom (notably CVE-2024-1086, ransomware-weaponised within ~3 months) are the operationally relevant pattern.

Eleven entries in twenty-three months. The first column is the part worth lingering on. CVE-2018-14634 was patched upstream in 2018 and added to KEV in 2026; CVE-2021-22555 was patched in 2021 and added in 2025. These are not fresh silent-fix-to-exploit incidents in the Copy Fail sense — they are something stronger: evidence that the catalogue lags the commit by years, by design. The upstream tree and the advisory feed are not on the same clock. They never were.

CVE-2024-1086 is the most operationally relevant companion to Copy Fail. It maps onto the same skeleton — nf_tables commit landed, public PoC shortly after (Notselwyn, March 2024), ransomware operators picked it up, KEV-confirmed weaponisation by May 2024. No AI agent was needed in that timeline; the patch-gap window was wide enough that human reverse engineers were sufficient. The argument of this post is that the next CVE-2024-1086 will not have that grace period.

What the recurrence proves — and what it does not

The eleven entries above do not, on their own, prove that AI agents are weaponising silent fixes today. They prove the precondition: that the silent-fix-then-CVE lifecycle is the operating norm for kernel exploitation, that human attackers already extract value from it, and that defenders are advisory-anchored against a clock the attacker does not share. AI tooling does not change which clusters fire (#2 remains #2); it changes whether the long tail of these entries — the ones not yet in KEV because nobody has bothered — becomes economically tractable to weaponise at scale. The shift from eleven a year to eleven a month is what the velocity collapse means in practice.

6. What changes for defenders

Three concrete shifts follow:

6.1 Commit-feed monitoring as a first-class control input

Subscribing to vendor advisories was sufficient when patch-gap windows were measured in days. It is no longer. Critical OSS dependencies — kernel, libc, OpenSSL, language runtimes, container runtimes, the immediate dependency closure of any internet-exposed service — need commit-level monitoring with security-relevance triage. This work is itself a candidate for AI assistance on the defender side, with one asymmetry: defenders must triage every commit while attackers need only find one. The defender's economics are worse, but the option exists.

6.2 Re-anchor the patching KCI from advisory to commit-landing

The structural fix follows from §4.1: patching KCIs need to be re-anchored on commit-landing rather than advisory publication for OSS components where the silent-fix model dominates. "Patch within 30 days of CVE" was a defensible KCI when CVE publication preceded exploit availability by days to weeks. It is no longer. The replacement is harder to state and harder to operate — "patch within X days of relevant upstream commit, with relevance determined by triage" — but it is the KCI that actually predicts risk reduction.

The honest interim acknowledgement, before such KCIs are operationalised, is that current advisory-anchored vulnerability-management KPIs are systematically over-reporting protective effectiveness for the silent-fix class of components. Risk registers built on the old assumption are quietly miscalibrated. The gap is not in execution; it is in the reference clock.

6.3 Cause-side preventive controls, generalised

The AF_ALG seccomp lockdown advised in the Copy Fail analysis is the pattern: feature surface reduction before a CVE forces it. Every internet-facing service has equivalent surfaces — ptrace, BPF, userfaultfd, debug interfaces, admin endpoints — that can be locked down on cause-side grounds ahead of disclosure. The decision criterion shifts from is there a known CVE here to is this surface necessary for the workload. This is the operating practice that survives the patch-gap collapse, and it is the practice that CDE-balanced TLCTC modelling has always advised.

7. Regulatory note

NIS2, DORA, and equivalent regimes mandate "timely" patching without engaging with the asymmetry. Audit programs verify whether vendor advisories were acted on within prescribed windows; they do not verify whether the underlying advisories arrived in time for the patching window to matter. The Kreinz Thesis applies: regulation mandates controls without identifying the threat economics those controls assume. As the patch-gap window collapses, "patched within X days of advisory" loses its predictive relationship to actual exposure. The regulatory framework will lag. Defenders should not.

8. Summary

The silent fix is the dominant pre-disclosure surface for OSS, by design for the Linux kernel and by default for most of the long tail. AI agents collapse the cost of monitoring, triage, and weaponisation across that surface. The patch-gap window measured from commit to exploit availability is moving from days–weeks to hours. The clusters affected are still #2 and #3; no new cluster is created; the velocity envelope of the attacker preparation phase shifts toward VC-4. CVE-2026-31431 is the worked example of what an unassisted version of this workflow looked like; the next one will be tighter.

Defensive priority: commit-feed monitoring, patching KCIs re-anchored from advisory to commit-landing, and cause-side surface reduction ahead of disclosure. Advisory-driven vulnerability management was sufficient when the attacker shared the defender's clock. They no longer do.

The TLCTC lesson

The silent fix is not a threat cluster. It is an economic condition that compresses the attacker-preparation phase of clusters #2 and #3. AI agents do not create new clusters; they accelerate existing ones.

The structural shift is at the Control Objectives layer. The cluster-level TLCTC response is unchanged — cause-side prevention dominance, velocity-class awareness. What changes is the patching KCI: its reference event must move from advisory publication to commit landing, or the KCI will systematically over-report protective effectiveness for the silent-fix class of components.

The operating shift. Watch the commits, not the advisories. Anchor patching KCIs on commit-landing, not CVE timestamps. Reduce feature surface before a CVE forces it. None of this is new advice; it is the same TLCTC posture, with the buffer that made the old KCI calibration valid now gone.

9. Final classification

Phenomenon
Silent-fix-driven AI weaponisation of OSS
TLCTC status
Not a new cluster — preparation-phase acceleration for #2 / #3
Clusters affected
#2 Exploiting Server, #3 Exploiting Client, occasionally #1 Abuse of Functions
Velocity shift
Preparation phase trending to VC-4; deployment phase per the chain's deployed cluster
SRE/DRE impact
Unchanged structurally; first-wave window lengthens relative to defender visibility
KCI impact
Advisory-anchored patching KCIs (coverage %, MTTP) over-report protective effectiveness; reference event must move from advisory to commit-landing
Worked example
CVE-2026-31431 ("Copy Fail") — 2-week silent-fix window, ITW exploitation T0+~3 days
Primary control
Commit-feed monitoring + cause-side surface reduction ahead of disclosure
Regulatory gap
Advisory-anchored SLAs in NIS2 / DORA misaligned with collapsed patch-gap economics
Related reading on tlctc.net

About the methodology

This analysis applies the TLCTC v2.1 framework: ten cause-oriented threat clusters, the Bow-Tie SRE/DRE separation, velocity classes VC-1VC-4, and the Kreinz Thesis distinction between cause-side and consequence-side controls. For framework definitions: tlctc.net. Licensed under CC BY 4.0. Source: github.com/Barnes70/TLCTC.