Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSend cancelTask request to A2A server
-
DeliveryRace executor's concurrent completion write
-
ExploitHit unlocked load-check-save window
-
ExecutionClobber terminal task status
-
ImpactCorrupt task state integrity/availability
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V15 - Secure Coding and Architecture Concurrency control, locking
MITRE ATT&CK
1 technique across 1 tactic: Privilege Escalation The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires issuing a cancelTask request through the no-event-bus path of DefaultRequestHandler concurrently with the executor's task-status write, exploiting the window where cancel performs load→check→mutate→save without acquiring the per-(tenant, owner, taskId) write lock or checking terminal state. Limiting factors: exploitation is non-deterministic and depends on winning a narrow timing race against the executor's completion; it affects a2a-js versions up to and including 1.1.0 and is fixed in 1.2.0; the input does not confirm whether sending cancel requests to the A2A server requires authentication, so the practical attacker population is unverified. The only complete fix stated by the vendor is upgrading to 1.2.0. |
| Impact | This is a medium-severity integrity/availability issue, not an emergency. The vendor CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N) scores 6.9 and implies trivial remote exploitation, but that under-represents the trigger: the PR diff shows the flaw is a classic check-then-act race in the no-event-bus cancelTask path (load → check → mutate → save with no per-task write lock), so reliable exploitation requires hitting a narrow timing window between an executor's completion write and the cancel's save - closer to AC:H / AT:P than AC:L/AT:N. No EPSS score was supplied, the CVE is not in CISA KEV, and no public exploit was identified; the only exploitation signal is VulDB's 'this_month' priority label. The impact is limited to task-state corruption (VC:N, VI:L, VA:L) - a COMPLETED status being clobbered by CANCELED or vice versa - not code execution or data disclosure. Note the conflict: the input Tags include 'Information Disclosure', but the CVSS vector sets VC:N (no confidentiality impact) and the source evidence describes state corruption, not disclosure - the tag appears inaccurate. Authentication requirements are not confirmed: the vector states PR:N but the input does not establish whether issuing cancel requests to the A2A server requires authentication. Overall: a real but bounded correctness/robustness defect worth patching on a normal monthly cadence, not a drop-everything priority. |
| Exploit ScenarioDerived | A client able to submit requests to the A2A server issues a cancelTask for an in-progress task at the precise moment the executor publishes its final status; because the no-bus cancel path reads, checks, then saves without a write lock, the CANCELED write overwrites the just-written COMPLETED status (or the cancel is silently lost), leaving the task in a corrupted/inconsistent state. Success depends on winning the race window, so it is not deterministic. No public exploit code was identified at time of analysis. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 28, 2026
Race condition in the a2a-js Task Status Update Handler (versions 1.0 and 1.1.0) lets a remote caller have a task cancellation overwrite a status written by a concurrently finishing executor - or have the CANCELED write lost - corrupting the persisted task record. The window exists because cancelTask on the no-event-bus path of DefaultRequestHandler performs load→check→mutate→save without taking the per-(tenant, owner, taskId) write lock or checking whether the task has already reached a terminal state. Impact is confined to task integrity and availability (CVSS 3.1 AV:N/AC:H/PR:N/UI:N/C:N/I:L/A:L); exploitation is non-deterministic, requiring a narrow timing race against the executor's completion, and no public exploit code was identified at time of analysis. Rated this_month priority - a medium-severity integrity/availability issue rather than an emergency.
RemediationAI
Vendor-released patch: upgrade a2a-js to 1.2.0 (release tag https://github.com/a2aproject/a2a-js/releases/tag/v1.2.0), which contains PR #636 / commit 7b87c9480bfa643f9d2b2eaf06988b3d3a95de25; upgrading is the only complete fix stated by the vendor, and no supported workaround is described in the available sources. The patch does two things operators should verify after upgrading: cancelTask no longer mutates and saves the task directly but routes the CANCELED status through ResultManager.processEvent so it is serialized by the per-(tenant, owner, taskId) write lock, and ResultManager now refuses status updates that would move a task out of a terminal state (COMPLETED/FAILED/CANCELED/REJECTED), logging a warning instead. Because exploitation requires a cancelTask request to collide with an executor's status write on the no-event-bus path, sites that cannot upgrade immediately should treat that concurrency as the exposure point, while recognizing the vendor does not document a configuration change that removes it; review https://github.com/a2aproject/a2a-js/pull/636 and https://vuldb.com/vuln/427455 for tracking, and note the sources do not confirm whether reaching cancelTask on a deployed A2A server requires authentication.
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
a2a-js is the TypeScript server/client SDK for the A2A (Agent-to-Agent) protocol; its DefaultRequestHandler coordinates an AgentExecutor with a TaskStore, and ResultManager is the component that applies AgentEvents - including statusUpdate events - to a task and persists the result. The flaw is CWE-362 (concurrent execution using shared resource with improper synchronization): the cancellation path loaded the task, checked it, mutated task.status to TASK_STATE_CANCELED in place, appended the cancel message to history, and saved it back with no lock and no terminal-state guard. A racing executor writing COMPLETED in that window could be clobbered by the CANCELED save, or the CANCELED write could be lost. The upstream patch (PR #636, commit 7b87c9480bfa643f9d2b2eaf06988b3d3a95de25) fixes both halves: cancelTask now routes its cancellation through ResultManager.processEvent instead of mutating and saving the task directly, so the per-(tenant, owner, taskId) write lock serializes the write, and ResultManager rejects any status update that would move a task out of a terminal state (COMPLETED/FAILED/CANCELED/REJECTED), while still applying same-state terminal updates such as a final message arriving after COMPLETED. The accompanying regression test (test/server/default_request_handler.spec.ts) reproduces the exact race with a store whose first load returns WORKING and whose second load, inside ResultManager's lock, returns COMPLETED, and asserts that the cancel is rejected with TaskNotCancelableError and that no CANCELED state ever reaches the store. Notably the trigger requires the no-event-bus cancellation path; the interaction between this race and other deployment modes or with a running event bus is not described in the available sources.
Know when A2A Js 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:N/UI:N/VC:N/VI:L/VA:L/SC:N/SI:N/SA:N
Remotely reachable (AV:N) but requires winning a documented timing race (AC:H); no confidentiality impact (C:N), limited task-state corruption gives I:L/A:L; PR:N retained from input as auth requirement is unconfirmed.
Primary rating from Vendor (VulDB).
CVSS VectorVendor: VulDB
DescriptionCVE.org
A vulnerability has been found in a2aproject a2a-js up to 1.1.0. Impacted is the function ResultManager.applyStatusUpdate of the file src/server/result_manager.ts of the component Task Status Update Handler. Such manipulation leads to race condition. The attack may be launched remotely. Upgrading to version 1.2.0 is recommended to address this issue. The name of the patch is 7b87c9480bfa643f9d2b2eaf06988b3d3a95de25. It is recommended 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
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
Race conditions occur when multiple concurrent requests exploit the brief time gap between checking a condition and acting upon it (TOCTOU - Time of Check, Time of Use).
EUVD-2026-111404
GHSA-52g9-jqfx-3hp5
NVD
CVE.org
EPSS
VulDB
Exploit-DB