Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessInteract with agent using shared middleware
-
DeliveryStart run with disallowed tool call left open
-
ExploitTrigger second concurrent run that clears filter state
-
ExecutionBlocked tool-call events bypass filter
-
ImpactDisallowed tool executes / integrity impact
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Incomplete cleanup
|
| Exploitation Conditions | Requires the application to use ag-ui client's FilterToolCallsMiddleware configured with a disallowedToolCalls list as a security control, AND a deployment pattern where the same middleware instance/subscription serves multiple agent runs (concurrent, stalled, or reused runId/toolCallId). The security-relevant bypass triggers when one run's blocked tool call is left open while a second run's RUN_STARTED event clears the shared blocking state, allowing the first run's remaining disallowed tool-call events to pass. Limiting factors: the attacker needs low-privilege ability to initiate agent runs (PR:L), the filter must actually be relied on to enforce tool-call policy, and a single-run/single-subscription deployment is not affected; impact is bounded to filter bypass and mis-blocking rather than direct code execution. |
| Impact | This is a medium-severity issue with modest real-world risk. The vendor CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:L/VA:L, score 5.3) indicates network reachability with low attacker privileges and no required user interaction, but impact is limited to low integrity and low availability with zero confidentiality impact - despite the 'Information Disclosure' tag, no data is disclosed. There is no EPSS score, no CISA KEV listing, and no public exploit identified at time of analysis; the only public artifact is the fix PR (#2494) with regression tests that demonstrate the flaw mechanically, which is not the same as weaponized exploitation. The core weakness (CWE-459 incomplete cleanup) is that FilterToolCallsMiddleware maintains blocked tool-call state on the middleware instance rather than per-run, so a later run can clear the state that was protecting an earlier still-open run and allow previously-blocked (disallowed) tool-call events to pass the filter - a security-control bypass rather than a memory-corruption or code-execution bug. Signals are consistent: low CVSS, no exploitation evidence, and a narrow impact profile all point to a genuine LOW-to-MEDIUM operational priority, not a high-urgency issue. Note the tag says 'Information Disclosure' while the vendor vector explicitly sets VC:N - the tag conflicts with the actual impact and should be treated as integrity/availability. |
| Exploit ScenarioDerived | An attacker who can drive agent runs through a shared FilterToolCallsMiddleware instance starts a run whose disallowed tool call is left interrupted/stalled, then initiates a second concurrent run whose start event clears the shared blocking state; the first run's remaining blocked tool-call events (ARGS/END/RESULT) then leak through the filter that was meant to suppress them. No weaponized public exploit exists - only the vendor's regression tests demonstrate the concurrency/state-reuse behavior. Alternatively a benign but reused tool-call ID from a prior run wrongly blocks a legitimate tool call in a later run (availability side). |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 28, 2026
Incomplete cleanup of per-run state in the ag-ui TypeScript client SDK's FilterToolCallsMiddleware allows disallowed tool-call events from one agent run to escape filtering - or valid events from another run to be wrongly blocked - when a single middleware instance or subscription serves more than one run. Affected deployments are those using ag-ui (ag-ui-protocol) client SDK builds up to 2026-09-07 that rely on FilterToolCallsMiddleware with a disallowedToolCalls list as a real security control, in a pattern where runs overlap, stall, or reuse runId/toolCallId values. The issue is rated CVSS 4.0 5.3 (assessed as CVSS 3.1 AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:L/A:L) - an authenticated, low-privileged party who can start agent runs is the relevant actor; impact is bounded to filter bypass and mis-blocking rather than code execution, and no public exploit identified at time of analysis. Vendor-released patch: 2026-09-08.
RemediationAI
Upgrade the ag-ui TypeScript client SDK to release 2026-09-08, which contains the per-run scoping fix from pull request 2494 (commit c346119fe870b70f5c19738ee5119f3e1456e59d); the release artifact is available at github.com/ag-ui-protocol/ag-ui/releases/tag/release/2026-09-08 and the tracking issue is github.com/ag-ui-protocol/ag-ui/issues/2443. If an immediate upgrade is not possible, the highest-value compensating control is to stop reusing middleware state: construct a fresh FilterToolCallsMiddleware instance per run or per subscription, and avoid subscribing to a single returned Observable from more than one consumer - this removes the shared-set clearing path but requires callers to guarantee run isolation, which is easy to regress in code that multiplexes agents. Additionally, do not treat FilterToolCallsMiddleware as the sole enforcement point: re-validate tool names against the allow/deny policy at the server-side tool-execution layer or before dispatching calls to downstream systems, accepting the added latency and duplicate-policy-maintenance overhead that comes with defence in depth. Applications that only ever run one agent run per middleware instance and subscription can be considered unaffected and need not be re-architected, though upgrading remains advisable.
Affected VersionsENISA
Affects your stack
Find out whether the stacks and servers you run are on an affected version.
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The affected component is the TypeScript client SDK middleware FilterToolCallsMiddleware in sdks/typescript/packages/client/src/middleware/filter-tool-calls.ts, part of the ag-ui protocol tooling for building agent front-ends. The middleware wraps an AbstractAgent.run() Observable and inspects streaming AG-UI events - TOOL_CALL_START, TOOL_CALL_ARGS, TOOL_CALL_END and TOOL_CALL_RESULT - suppressing the stream for tool calls whose names appear in a developer-supplied disallowedToolCalls list. The weakness maps to CWE-459 (Incomplete Cleanup): the blocking bookkeeping is held at instance/subscription scope instead of being scoped to the run, so state is never reliably torn down. When a run is interrupted before its TOOL_CALL_RESULT (leaving a blocked toolCallId cached) or when two runs share one stream, a later RUN_STARTED event reinitialises the shared set and the earlier run's remaining blocked events pass through unfiltered - and conversely a reused toolCallId can be over-blocked in a subsequent run. The upstream fix (pull request 2494, commit c346119fe870b70f5c19738ee5119f3e1456e59d) keyed the blocked-ID state per run, and the accompanying tests exercise exactly these three scenarios: blocked-ID carry-over between sequential runs, a stalled run whose state is cleared by a later run, and independent subscriptions over the same returned Observable. Because this middleware is a client-side policy enforcement point rather than a sandbox, bypassing it means the agent can emit or execute tool calls the application intended to prohibit.
Know when TypeScript 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:L/VA:L/SC:N/SI:N/SA:N
Network-reachable with low privileges to start runs; AC:H because it needs a specific concurrent/stalled multi-run state race; integrity and availability low from filter bypass and mis-blocking, no confidentiality impact.
Primary rating from Vendor (VulDB).
CVSS VectorVendor: VulDB
DescriptionCVE.org
A flaw has been found in ag-ui-protocol ag-ui up to 2026-09-07. This vulnerability affects the function FilterToolCallsMiddleware of the file sdks/typescript/packages/client/src/middleware/filter-tool-calls.ts of the component Middleware. Executing a manipulation can lead to incomplete cleanup. The attack may be launched remotely. Upgrading to version 2026-09-08 is able to resolve this issue. This patch is called c346119fe870b70f5c19738ee5119f3e1456e59d. It is suggested to upgrade the affected component.
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
More in TypeScript
View allPath traversal in decap-server 3.10.0 and earlier lets unauthenticated remote attackers read, write, and delete files in
Joplin Server instances prior to 3.7.2 expose an SSO login-code redemption endpoint (GET /api/login_with_code/:id) that
Cross-tenant authorization bypass in TinaCMS self-hosted deployments allows any holder of a legitimate TinaCloud account
Authenticated clients on deepstream.io 10.1.0 can bypass record-write authorization and modify arbitrary protected recor
OS command injection in zosmaai's pi-llm-wiki through 0.11.7 lets an attacker who can invoke the wiki_capture_source MCP
A remote, unauthenticated denial-of-service condition in the NestJS (Nest) microservices framework lets an attacker cras
Fee-sponsoring servers built on mppx before 0.8.2 can be induced by any client with access to the sponsorship endpoint t
Code escaping sandbox in the PraisonAI npm package's built-in codeMode tool (praisonai 1.4.0 through 1.7.1) lets anyone
Unauthenticated passkey enrollment in OpenReception appointment-booking software prior to 1.1.1 lets remote attackers in
A credential-isolation flaw in geelen mcp-remote 0.1.16 through 0.1.38 allows a remote attacker who controls or can pred
Remote code execution affects Univer v1.0.0-alpha.2 through its Uniscript feature: the UniscriptExecutionService.execute
Dokploy instances running versions prior to 0.29.13 disclose stored Git provider secrets - GitHub App private keys, OAut
EUVD-2026-88381
GHSA-3mm7-4jh6-p5gf
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB