Skip to main content

a2a-js EUVDEUVD-2026-111404

| CVE-2026-118128 MEDIUM
Race Condition (CWE-362)
2026-10-27 VulDB GHSA-52g9-jqfx-3hp5
6.9
CVSS 4.0 · Vendor: VulDB
View

Attack ChainAIDerived

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

  1. Access
    Send cancelTask request to A2A server
  2. Delivery
    Race executor's concurrent completion write
  3. Exploit
    Hit unlocked load-check-save window
  4. Execution
    Clobber terminal task status
  5. Impact
    Corrupt 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.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.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 – 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

a2a-js 1.0
a2a-js 1.1.0

Affected Packages

euvd a2a_js 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

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

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

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.

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:L
4.0 AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:L/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
None
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
Low
Vulnerable system: Availability
Low
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

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

EPSS Score
0.4%
Top 71% exploitable
Prevalence
Low
emerging agent-to-agent protocol SDK, limited production deployment
Data Quality
7 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 MEDIUM
CISA KEV No
Public POC No
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.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
None
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact· derived
Medium

Priority Score

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

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

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