Skip to main content

ag-ui TypeScript SDK EUVDEUVD-2026-114879

| CVE-2026-120237 LOW
Uncontrolled Resource Consumption (CWE-400)
2026-11-01 VulDB GHSA-frhv-cjfr-w99c
2.1
CVSS 4.0 · Vendor: VulDB
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Gain interrupt-producer position for client thread
  2. Exploit
    Emit interrupts omitting expiresAt field
  3. Execution
    Never-expire logic wedges thread, pending interrupts unbounded
  4. Impact
    Denial 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.

Monitor Track and reassess. Why: LOW severity (CVSS 0.1-3.9).
Patch available 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

ag-ui 0.0.50
ag-ui 0.0.33
ag-ui 0.0.1
ag-ui 0.0.49
ag-ui 0.0.15
ag-ui 0.0.7
ag-ui 0.0.44
ag-ui 0.0.39
ag-ui 0.0.57
ag-ui 0.0.5
ag-ui 0.0.47
ag-ui 0.0.48
ag-ui 0.0.43
ag-ui 0.0.19
ag-ui 0.0.17
ag-ui 0.0.53
ag-ui 0.0.37
ag-ui 0.0.20
ag-ui 0.0.35
ag-ui 0.0.40
ag-ui 0.0.30
ag-ui 0.0.41
ag-ui 0.0.8
ag-ui 0.0.25
ag-ui 0.0.13
ag-ui 0.0.26
ag-ui 0.0.10
ag-ui 0.0.11
ag-ui 0.0.29
ag-ui 0.0.24
ag-ui 0.0.58
ag-ui 0.0.3
ag-ui 0.0.12
ag-ui 0.0.31
ag-ui 0.0.16
ag-ui 0.0.27
ag-ui 0.0.18
ag-ui 0.0.2
ag-ui 0.0.56
ag-ui 0.0.51
ag-ui 0.0.21
ag-ui 0.0.14
ag-ui 0.0.4
ag-ui 0.0.52
ag-ui 0.0.9
ag-ui 0.0.34
ag-ui 0.0.55
ag-ui 0.0.23
ag-ui 0.0.42
ag-ui 0.0.28
ag-ui 0.0.32
ag-ui 0.0.46
ag-ui 0.0.45
ag-ui 0.0.6
ag-ui 0.0.38
ag-ui 0.0.36
ag-ui 0.0.22
ag-ui 0.0.54

Affected Packages

euvd ag_ui no fix

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

Vendor (VulDB) PRIMARY 2.1 MEDIUM
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
vuln.today AI 4.3 MEDIUM

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.

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:L
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N

Primary rating from Vendor (VulDB).

CVSS VectorVendor: VulDB

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
Low
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
None
Vulnerable system: Availability
Low
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

3
Severity Changed
Nov 01, 2026 - 18:22 NVD
MEDIUM LOW
CVSS changed
Nov 01, 2026 - 18:22 NVD
5.3 (MEDIUM) 2.1 (LOW)
CVE Published
Nov 01, 2026 - 17:30 cve.org
MEDIUM 5.3

DescriptionCVE.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

EPSS Score
0.4%
Top 65% exploitable
Prevalence
Low
niche pre-1.0 (0.0.58) agent-UI protocol SDK, no broad enterprise footprint
Exploit
POC
Public exploit code exists
Social Media
1
Sightings
Data Quality
6 sources
Confidence: High

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.

SignalValue
Severity LOW
CISA KEV No
Public POC Yes
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
LOW severity (CVSS 0.1-3.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
Poc
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
Low

Priority Score

30
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +10
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

More in Ag Ui

View all
CVE-2026-120233 MEDIUM POC
5.5 Nov 01

Cross-origin information disclosure in the ag-ui TypeScript client: HttpAgent builds the POST run request with the conve

CVE-2026-92362 MEDIUM
6.9 Sep 16

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

CVE-2026-120235 LOW POC
2.1 Nov 01

Denial of service in the ag-ui TypeScript client SDK (versions up to 0.0.58) where the SSE/protobuf stream parser fails

CVE-2026-120234 LOW POC
2.1 Nov 01

Resource exhaustion in the ag-ui Protocol TypeScript client SDK (versions up to and including 0.0.58) allows a hostile o

CVE-2026-120236 LOW POC
2.1 Nov 01

Improper input validation in the AG-UI protocol SDK transport decoder path affects ag-ui versions up to and including 0.

CVE-2026-101099 MEDIUM
5.3 Sep 28

Unbounded buffering in the Server-Sent Events parser of the AG-UI Community SDK (Kotlin/Java) lets a malicious or man-in

CVE-2026-92361 MEDIUM
5.3 Sep 16

Memory exhaustion in the AG-UI Go community SDK's SSE client allows a remote attacker who controls or can intercept an S

CVE-2026-92360 MEDIUM
5.3 Sep 16

Origin validation errors in the AG-UI TypeScript client SDK (ag-ui 1.0) allow remote, low-privileged attackers who can i

CVE-2026-101101 MEDIUM
5.3 Sep 28

Uncaught exception handling in the A2A middleware of ag-ui-protocol ag-ui (all versions up to 2026-09-07) allows an atta

CVE-2026-101100 MEDIUM
5.3 Sep 28

Incomplete cleanup of per-run state in the ag-ui TypeScript client SDK's FilterToolCallsMiddleware allows disallowed too

CVE-2026-101098 MEDIUM
5.3 Sep 28

Unbounded request-body reads in the ag-ui Java community server SDK (JdkAgentHttpHandler, used by applications that inst

CVE-2026-92363 MEDIUM
5.3 Sep 16

Unbounded memory growth in the ag-ui (AG-UI protocol) C++ community SDK's Server-Sent Events parser lets an attacker who

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy