Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessGain interrupt-producer position for client thread
-
ExploitEmit interrupts omitting expiresAt field
-
ExecutionNever-expire logic wedges thread, pending interrupts unbounded
-
ImpactDenial of service via resource consumption
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V2 - Validation and Business Logic Resource consumption limits
MITRE ATT&CK
1 technique across 1 tactic: Impact The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires the attacker to act as (or control) the interrupt/event producer feeding an ag-ui TypeScript client thread - i.e. emitting a run outcome of type 'interrupt' - and to supply one or more Interrupt objects that omit the expiresAt field. Per the source evidence, isInterruptExpired treats a missing expiresAt as 'never expires,' and the client's resume-coverage check requires every pending interrupt to be addressed before the thread may run again, so the thread is blocked permanently; prior to the fix there was also no cap on how many pending interrupts were tracked per thread. Limiting factors: this is availability-only (no data exposure or modification), affects the ag-ui client SDK at versions up to 0.0.58, and the attacker must occupy the low-privilege producer position (PR:L), not an arbitrary unauthenticated outsider; impact is confined to wedged threads and growth of tracked interrupts rather than full service crash. |
| Impact | This is a medium-severity, availability-only denial-of-service issue (CWE-400) in the ag-ui TypeScript client SDK, and the signals consistently point to a real-but-not-urgent problem rather than a high-impact emergency. The supplied CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N/E:P, score 5.3) indicates a network-reachable, low-complexity flaw requiring low privileges (PR:L = authenticated/positioned producer) with only partial availability impact and no confidentiality or integrity effect. The 'E:P' (Proof-of-Concept) exploit-maturity flag aligns with the intelligence that a PoC reference exists but is not verified as working exploit code. There is no CISA KEV listing and no EPSS score was provided, so there is no evidence of active or widespread exploitation - the vuln.today Decision label is 'this_month', not act_now or emergency. The source-code evidence (PR #3241) corroborates the mechanism precisely: isInterruptExpired treats a missing expiresAt as 'never expires,' and the resume-coverage check blocks a thread until every pending interrupt is retired, so interrupts that omit expiresAt wedge the thread permanently, and pending interrupts were tracked without a per-thread cap. One conflict to verify: the intelligence states 'Patch: Available from vendor,' but the CVE description and the reference both indicate the fix (PR #3241) still awaits acceptance/merge - treat the fix as proposed, not confirmed released. Net: a legitimate availability hardening fix for exposed ag-ui deployments, prioritized for this-month remediation rather than immediate response. |
| Exploit ScenarioDerived | An attacker who is positioned as the event producer for an ag-ui client thread (for example a malicious or compromised agent/server emitting RUN_FINISHED outcomes) sends one or more interrupt objects that omit the expiresAt field. Because isInterruptExpired treats a missing expiry as never-expiring and the resume-coverage check requires every pending interrupt to be retired first, the victim's thread is wedged indefinitely and pending interrupts accumulate unbounded, consuming resources. A public PoC reference exists (GitHub issue #2525); it is not verified as working exploit code. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Nov 01, 2026
Denial of service in the ag-ui TypeScript client SDK (versions up to and including 0.0.58) allows a party that controls the interrupt/event producer to permanently wedge a conversation thread by emitting one or more Interrupt objects that omit the expiresAt field. isInterruptExpired treats a missing expiresAt as 'never expires', and the client's resume-coverage check requires every pending interrupt to be addressed before the thread can run again, so the thread stays blocked; before the fix there was also no cap on how many pending interrupts were tracked per thread. No public exploit code has been confirmed (a public PoC reference exists; it is not verified as working exploit code), CVE is not in CISA KEV, and impact is availability-only with no data exposure or modification.
RemediationAI
Upstream fix available (PR/commit); released patched version not independently confirmed. PR https://github.com/ag-ui-protocol/ag-ui/pull/3241 is still awaiting acceptance, so no tagged release version can be cited - track the ag-ui advisory and upgrade to the first published client package version that contains DEFAULT_INTERRUPT_TTL_MS and MAX_PENDING_INTERRUPTS once it ships. Until then, actionable compensating controls: enforce at the producer/gateway that every interrupt outcome carries an explicit expiresAt, since a missing value is exactly what wedges the thread (side effect: interrupts now auto-expire and can be cancelled after the TTL, so long-lived human approvals must be re-issued or given a deliberately long timeout); cap the number of pending interrupts emitted per thread on the server side to mirror MAX_PENDING_INTERRUPTS and reject or coalesce surplus interrupts (side effect: legitimate bulk-approval flows must be batched); and restrict which producers/backends are trusted to emit run outcomes with type 'interrupt', because a party in that position is the required foothold (side effect: restricts multi-tenant or third-party agent integrations). Restarting or cancelling affected threads clears a wedged state but does not prevent recurrence.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
ag-ui is an event-protocol SDK for agent/user interfaces; the affected code is the TypeScript client package at sdks/typescript/packages/client/src/interrupts/index.ts plus the event-application logic in sdks/typescript/packages/client/src/apply/default.ts, built around RxJS observables (AbstractAgent.run emits RUN_STARTED/RUN_FINISHED streams consumed via defaultApplyEvents). Interrupt objects carry an optional expiresAt; isInterruptExpired classifies an interrupt with no expiresAt as non-expiring, and the resume-coverage check requires all pending interrupts on a thread to be resolved or expired before the thread can run again. Because the pre-fix code also kept an unbounded pendingInterrupts array per thread, a producer emitting interrupt outcomes without expiresAt leaves the client permanently blocked and lets the tracked list grow, which is the CWE-400 uncontrolled resource consumption pattern. The fix in PR #3241 introduces DEFAULT_INTERRUPT_TTL_MS (stamped onto a tracked copy when the producer omits expiresAt, leaving the emitted event payload untouched) and MAX_PENDING_INTERRUPTS (slice cap on how many interrupts are tracked per thread); per-thread timeouts that the producer supplies are preserved as-is. The trigger requires occupying the interrupt/event producer position (CVSS 3.1 PR:L), not arbitrary unauthenticated access, and the assessed impact is A:L with no confidentiality or integrity effect.
Know when Ag Ui gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N/E:P
Interrupts arrive over the network from a low-privilege producer position, so AV:N/AC:L/PR:L/UI:N; impact is partial availability only (A:L) with no confidentiality or integrity effect and no scope change.
Primary rating from Vendor (VulDB).
CVSS VectorVendor: VulDB
Lifecycle Timeline
3DescriptionCVE.org
A flaw has been found in ag-ui-protocol ag-ui up to 0.0.58. Affected by this issue is the function isInterruptExpired of the file sdks/typescript/packages/client/src/interrupts/index.ts of the component Interrupt expiry. This manipulation causes resource consumption. Remote exploitation of the attack is possible. The exploit has been published and may be used. The pull request to fix this issue awaits acceptance.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
Cross-origin information disclosure in the ag-ui TypeScript client: HttpAgent builds the POST run request with the conve
Unbounded memory growth in the AG-UI Rust client's SSE frame parser (crates/ag-ui-client/src/sse.rs, shipped in the ag-u
Denial of service in the ag-ui TypeScript client SDK (versions up to 0.0.58) where the SSE/protobuf stream parser fails
Resource exhaustion in the ag-ui Protocol TypeScript client SDK (versions up to and including 0.0.58) allows a hostile o
Improper input validation in the AG-UI protocol SDK transport decoder path affects ag-ui versions up to and including 0.
Unbounded buffering in the Server-Sent Events parser of the AG-UI Community SDK (Kotlin/Java) lets a malicious or man-in
Memory exhaustion in the AG-UI Go community SDK's SSE client allows a remote attacker who controls or can intercept an S
Origin validation errors in the AG-UI TypeScript client SDK (ag-ui 1.0) allow remote, low-privileged attackers who can i
Uncaught exception handling in the A2A middleware of ag-ui-protocol ag-ui (all versions up to 2026-09-07) allows an atta
Incomplete cleanup of per-run state in the ag-ui TypeScript client SDK's FilterToolCallsMiddleware allows disallowed too
Unbounded request-body reads in the ag-ui Java community server SDK (JdkAgentHttpHandler, used by applications that inst
Unbounded memory growth in the ag-ui (AG-UI protocol) C++ community SDK's Server-Sent Events parser lets an attacker who
EUVD-2026-114879
GHSA-frhv-cjfr-w99c
NVD
CVE.org
EPSS
VulDB
Exploit-DB