Description
PraisonAI is a multi-agent teams system. Prior to version 4.6.40, PraisonAI's first-party A2A server example exposes an unauthenticated A2A JSON-RPC endpoint and registers a `calculate(expression)` tool implemented with Python `eval()`. The example also binds to `0.0.0.0`. A remote unauthenticated attacker can send `message/send` to `/a2a`; the request reaches `agent.chat()`, and a real LLM can invoke the registered `calculate` tool. In testing with `gemini/gemini-2.5-flash-lite`, this resulted in arbitrary Python execution in the server process, confirmed by creation of a marker file from an unauthenticated HTTP request. The issue affects deployments following the official A2A example or similar unauthenticated public A2A deployments with unsafe tools. The default unauthenticated A2A surface also exposes task history and task cancellation APIs, increasing confidentiality and integrity impact. Version 4.6.40 patches the issue.
Published: 2026-07-21
Score: 9.8 Critical
EPSS: < 1% Very Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

The vulnerability arises from an unauthenticated A2A JSON‑RPC endpoint exposed by PraisonAI’s first‑party A2A server example, combined with a tool that uses Python eval. An unauthenticated attacker can POST a JSON‑RPC request to the /a2a endpoint on any address the server binds to (0.0.0.0). The request is routed to agent.chat(), causing an LLM client to invoke the registered calculate tool; the tool’s eval executes the supplied expression in the server’s Python process. This allows the attacker to run arbitrary code with the privileges of the server process, enabling full compromise of confidentiality, integrity, and availability. The same example also exposes task history and task‑cancellation APIs, further increasing the confidentiality and integrity impact. PraisonAI version 4.6.40 removes the unauthenticated endpoint and the unsafe eval implementation, fixing the vulnerability.

Affected Systems

On the PraisonAI platform by MervinPraison, every deployment using the first‑party A2A server example before version 4.6.40 is vulnerable. This includes the public default example that binds to 0.0.0.0 and registers the calculate tool, as well as any private deployments that copy that configuration. Versions 4.6.40 and later contain the patch; any system that has upgraded to 4.6.40 or later is safe provided it follows the new configuration guidelines.

Risk and Exploitability

The CVSS score of 9.8 indicates critical severity, but the EPSS score of less than 1 % indicates an extremely low probability that an exploit has been observed in the wild at the time of this analysis. The vulnerability is not listed in the CISA KEV catalog, suggesting there are no known mass‑distributed exploits. The most likely attack vector, inferred from the description, is a remote unauthenticated HTTP request to the open /a2a endpoint, which any LLM capable of interpreting the calculate tool can trigger. Because the server listens on 0.0.0.0, the attack can be performed from any network that can reach the host, and does not require privileged credentials.

Generated by OpenCVE AI on July 30, 2026 at 17:20 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade PraisonAI to version 4.6.40 or newer, which removes the unauthenticated endpoint and the unsafe eval implementation.
  • If an upgrade is not yet possible, reconfigure the A2A server to require authentication or bind the service to localhost only so that external requests are blocked.
  • Disable or remove the calculate tool from the tool registry to eliminate the eval backdoor until a secure configuration is in place.

Generated by OpenCVE AI on July 30, 2026 at 17:20 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Github GHSA Github GHSA GHSA-vg22-4gmj-prxw PraisonAI's unauthenticated A2A official example can reach real LLM-driven `eval()` tool execution
History

Thu, 23 Jul 2026 15:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'yes', 'Exploitation': 'poc', 'Technical Impact': 'total'}, 'version': '2.0.3'}


Tue, 21 Jul 2026 23:45:00 +0000

Type Values Removed Values Added
First Time appeared Mervinpraison
Mervinpraison praisonai
Vendors & Products Mervinpraison
Mervinpraison praisonai

Tue, 21 Jul 2026 16:00:00 +0000

Type Values Removed Values Added
Description PraisonAI is a multi-agent teams system. Prior to version 4.6.40, PraisonAI's first-party A2A server example exposes an unauthenticated A2A JSON-RPC endpoint and registers a `calculate(expression)` tool implemented with Python `eval()`. The example also binds to `0.0.0.0`. A remote unauthenticated attacker can send `message/send` to `/a2a`; the request reaches `agent.chat()`, and a real LLM can invoke the registered `calculate` tool. In testing with `gemini/gemini-2.5-flash-lite`, this resulted in arbitrary Python execution in the server process, confirmed by creation of a marker file from an unauthenticated HTTP request. The issue affects deployments following the official A2A example or similar unauthenticated public A2A deployments with unsafe tools. The default unauthenticated A2A surface also exposes task history and task cancellation APIs, increasing confidentiality and integrity impact. Version 4.6.40 patches the issue.
Title PraisonAI's unauthenticated A2A official example can reach real LLM-driven `eval()` tool execution
Weaknesses CWE-306
CWE-95
References
Metrics cvssV3_1

{'score': 9.8, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H'}


Subscriptions

Mervinpraison Praisonai
cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-07-23T14:27:07.049Z

Reserved: 2026-05-19T19:22:45.729Z

Link: CVE-2026-47391

cve-icon Vulnrichment

Updated: 2026-07-23T14:26:37.548Z

cve-icon NVD

No data.

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-07-30T17:30:17Z

Weaknesses
  • CWE-306

    Missing Authentication for Critical Function

  • CWE-95

    Improper Neutralization of Directives in Dynamically Evaluated Code ('Eval Injection')