Skip to main content

a2a-rs CVE-2026-113707

| EUVDEUVD-2026-106878 MEDIUM
Race Condition (CWE-362)
2026-10-21 cna@vuldb.com GHSA-5mcc-8c36-qxp4
5.3
CVSS 4.0 · Vendor: vuldb
View

Attack ChainAIDerived

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

  1. Access
    Authenticate to A2A server
  2. Exploit
    Send concurrent cancel requests for same task
  3. Execution
    Both pass check-then-act window
  4. Impact
    Corrupt/inconsistent task state

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 an authenticated client (PR:L) able to submit task operations to an A2A server configured with the in-memory task store backend (InMemoryTaskStore). The attacker must issue concurrent cancel/update requests for the same task ID and win the check-then-act timing window between the terminal-state check and the state write. Limiting factors: valid API access/credentials are required (not unauthenticated), the vulnerable InMemoryTaskStore backend must be in use, the impact is limited to task-state inconsistency (no confidentiality loss, low integrity/availability effect), and success is probabilistic because it depends on hitting a narrow concurrency window.

Impact

This is a moderate, not urgent, issue. The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:L/VA:L) scores 5.3 (Medium) and describes a network-reachable but authenticated (PR:L) check-then-act race condition (CWE-362) with only low integrity and availability impact and no confidentiality impact. No EPSS score, no CISA KEV listing, and no public exploit were provided, so exploitation remains theoretical: no public exploit identified at time of analysis. The source diff confirms the real defect is a concurrency window in the task-cancel flow where two simultaneous cancel requests could both pass the terminal-state check before either commits, leaving task state inconsistent - an integrity/consistency problem, not data exposure. NOTE A CONFLICT: the input tag 'Information Disclosure' contradicts the CVSS vector (VC:N, no confidentiality impact) and the actual code evidence, which shows a state-transition race, not a disclosure flaw - treat the disclosure characterization as unverified. Net: a legitimate but low-severity correctness/robustness bug in a niche library, suitable for routine patching rather than emergency response.

Exploit ScenarioDerived

An authenticated client of an A2A server backed by InMemoryTaskStore issues two concurrent cancel (or update) requests for the same in-flight task, racing the check-then-act window so both pass the pre-cancel terminal-state check. The result is an inconsistent or double-applied task state transition rather than code execution or data theft. No public exploit code is known; triggering it requires simply sending concurrent requests and winning a timing window.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
No patch listed yet 0.3% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Oct 21, 2026

Concurrent task operations in the a2a-rs Rust A2A server (through 0.4.4) can drive the in-memory task store into an inconsistent state, because InMemoryTaskStore::update performs a check-then-act sequence on a task's state without holding a lock across the decision and the write. An authenticated client able to submit task operations, and able to issue concurrent cancel or update requests for the same task ID, can win the timing window and overwrite a terminal task state or cause both of two competing cancels to be processed; impact is limited to task-state integrity and low availability effects, with no confidentiality loss. Exploitation requires the in-memory backend to be configured and is probabilistic, and no public exploit code was identified at time of analysis; CISA KEV does not list this issue.

RemediationAI

Patch status: upstream fix available (PR/commit); a released patched version is not independently confirmed, so upgrade a2a-rs to a release containing commit 7050c7d329238539424ee46440e23b91c4825bee (the change merged via https://github.com/a2aproject/a2a-rs/pull/126; the repository is https://github.com/a2aproject/a2a-rs/) and rebuild the a2a-server crate, or pin the dependency to that commit if no tagged release exists. The patch adds begin_cancel, which holds the write lock across the terminal-state check and the transition to CANCELED, and rejects overwriting a terminal task state while still allowing idempotent re-emission of the same terminal state. If upgrading immediately is not possible, compensating controls with their trade-offs are: (1) serialize cancel and update operations per task ID in the application layer with a per-task async mutex or a single-writer queue wrapped around the handler, which closes the timing window but reduces concurrency and adds latency to task operations; (2) replace InMemoryTaskStore with a durable backend that provides atomic conditional updates (compare-and-set on task version/state), which removes the in-process race but introduces an external dependency and its own failure modes; (3) restrict the A2A task API to trusted, low-concurrency clients (for example by requiring strong credentials and rate-limiting cancel/update per task ID), which lowers the probability of winning the timing window without eliminating it; and (4) monitor for repeated cancel/update requests on the same task ID as a detection signal, noting this is detective rather than preventive. There is no vendor advisory with a version-specific fix number in the provided references; consult the GitHub commit and PR above for the authoritative change.

Affected VersionsENISA

a2a-rs 0.4.3
a2a-rs 0.4.0
a2a-rs 0.4.2
a2a-rs 0.4.4
a2a-rs 0.4.1

Affected Packages

euvd a2a_rs 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-rs is a Rust implementation of the Agent2Agent (A2A) protocol, and the affected code lives in the a2a-server crate's task store layer (a2a-server/src/task_store/inmemory.rs) plus the request handler (a2a-server/src/handler.rs). The InMemoryTaskStore keeps tasks in an async Tokio RwLock-protected map; CWE-362 (race condition / concurrent execution using shared resource with improper synchronization) manifests because the store's update path read the entry's current state, validated the transition, and only then mutated it, leaving a check-then-act window when the lock was not held across both steps. The upstream fix (PR #126, commit 7050c7d329238539424ee46440e23b91c4825bee) addresses two related defects: BUG-43, where a terminal task state (Canceled, Failed, Completed) could be overwritten by a different state, and BUG-44, where two concurrent cancel requests could both pass the terminal-state check in the handler. The patch enforces terminal-state immutability in update (re-applying the same terminal state remains allowed for idempotent re-emission) and adds a begin_cancel method that holds the write lock across the check and the transition to CANCELED, returning TASK_NOT_CANCELABLE for already-terminal tasks while preserving idempotent cancel semantics in the handler. Regression tests (test_update_terminal_state_rejected, test_update_terminal_same_state_allowed, test_begin_cancel_transitions_non_terminal, test_cancel_task_concurrent_both_succeed_idempotently) accompany the change. The relevant attack surface is the A2A task cancel/update API rather than raw memory corruption, and the affected deployment shape is a server using the in-memory task store rather than a durable, transactionally consistent backend.

Know when Rust 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 5.3 MEDIUM
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
vuln.today AI 3.1 LOW

Network-reachable but needs authenticated task access (PR:L) and winning a timing window (AC:H); only task-state consistency is affected, so I:L with C:N and A:N.

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

DescriptionCVE.org

A security flaw has been discovered in a2aproject a2a-rs up to 0.4.4. The affected element is the function InMemoryTaskStore::update of the file a2a-server/src/task_store/inmemory.rs. The manipulation results in race condition. The attack may be performed from remote. The patch is identified as 7050c7d329238539424ee46440e23b91c4825bee. It is advisable to implement a patch to correct this issue.

Threat Intelligence Overview

EPSS Score
0.3%
Top 83% exploitable
Prevalence
Low
early-stage niche Rust A2A-protocol library, minimal 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.3%
Patch available No
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
No
Human Impact· derived
Medium

Priority Score

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

Attack Technique

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

Related Vulnerabilities in a2a-rs Information Disclosure and Race Condition

View all 2

More in Rust

View all
CVE-2024-3566 CRITICAL POC
9.8 Apr 10

Command injection via Windows CreateProcess argument parsing affects multiple language runtimes and tooling (Node.js, PH

CVE-2021-31162 CRITICAL POC
9.8 Apr 14

In the standard library in Rust before 1.52.0, a double free can occur in the Vec::from_iter function if freeing the ele

CVE-2021-28879 CRITICAL POC
9.8 Apr 11

In the standard library in Rust before 1.52.0, the Zip implementation can report an incorrect size due to an integer ove

CVE-2026-58491 CRITICAL POC
9.3 Sep 21

Stored cross-site scripting and open redirect in Warpgate's SSO endpoints (versions prior to 0.25.5) allow an unauthenti

CVE-2021-29922 CRITICAL POC
9.1 Aug 07

library/std/src/net/parser.rs in Rust before 1.53.0 does not properly consider extraneous zero characters at the beginni

CVE-2026-77620 HIGH POC
8.7 Sep 22

Denial of service in the Vector observability pipeline's `logstash` source (versions 0.15.0 through 0.56.x) allows a rem

CVE-2019-12083 HIGH POC
8.1 May 13

The Rust Programming Language Standard Library 1.34.x before 1.34.2 contains a stabilized method which, if overridden, c

CVE-2026-96889 HIGH POC
7.8 Sep 23

Use-after-free in librsvg during rendering of crafted SVG documents with nested XInclude directives and duplicate entity

CVE-2021-28878 HIGH POC
7.5 Apr 11

In the standard library in Rust before 1.52.0, the Zip implementation calls __iterator_get_unchecked() more than once fo

CVE-2021-28875 HIGH POC
7.5 Apr 11

In the standard library in Rust before 1.50.0, read_to_end() does not validate the return value from Read in an unsafe c

CVE-2019-16760 HIGH POC
7.5 Sep 30

Cargo prior to Rust 1.26.0 may download the wrong dependency if your package.toml file uses the `package` configuration

CVE-2026-115905 CRITICAL
10.0 Oct 26

A parser differential in the Rust `zip` crate (zip2) through 9.0.4 lets a crafted archive present different filenames to

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