<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>A2A Server Example — CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/products/a2a-server-example/</link><description>Trending threats, MITRE ATT&amp;CK coverage, and detection metadata. Fed continuously.</description><generator>Hugo</generator><language>en</language><managingEditor>hello@craftedsignal.io</managingEditor><webMaster>hello@craftedsignal.io</webMaster><lastBuildDate>Fri, 29 May 2026 22:32:53 +0000</lastBuildDate><atom:link href="https://feed.craftedsignal.io/products/a2a-server-example/feed.xml" rel="self" type="application/rss+xml"/><item><title>PraisonAI A2A Server Example Unauthenticated Remote Code Execution</title><link>https://feed.craftedsignal.io/briefs/2026-05-praisonai-a2a-rce/</link><pubDate>Fri, 29 May 2026 22:32:53 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-05-praisonai-a2a-rce/</guid><description>The PraisonAI A2A server example is vulnerable to remote code execution due to a combination of factors: the example exposes an A2A server without authentication, binds to 0.0.0.0, and registers a `calculate` tool implemented with Python `eval(expression)`.</description><content:encoded><![CDATA[<p>The PraisonAI A2A server example combines three critical behaviors, leading to remotely exploitable code execution: the example exposes an A2A server without <code>auth_token</code> configuration, binds the server to <code>0.0.0.0</code>, and registers a <code>calculate(expression)</code> tool implemented with Python <code>eval(expression)</code>. An unauthenticated network client can send a JSON-RPC <code>message/send</code> request to the <code>/a2a</code> endpoint. The A2A handler then passes the attacker-controlled message to <code>agent.chat()</code>. When using a real Gemini LLM (<code>gemini/gemini-2.5-flash-lite</code>), the model invokes the registered <code>calculate</code> tool, causing the <code>eval()</code> call to execute arbitrary Python code in the server process. The impact is demonstrated with a canary writing a marker file from an unauthenticated <code>/a2a</code> request. This vulnerability is confirmed for the first-party A2A example and deployments following the same pattern of public unauthenticated A2A combined with an unsafe tool.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>An attacker identifies a PraisonAI A2A server instance running the vulnerable example with no authentication configured and bound to <code>0.0.0.0</code>.</li>
<li>The attacker crafts a JSON-RPC <code>message/send</code> request to the <code>/a2a</code> endpoint.</li>
<li>The A2A server receives the request and passes the message to the <code>agent.chat()</code> function.</li>
<li>The <code>agent.chat()</code> function uses a real LLM (e.g., Gemini) to process the attacker-supplied input.</li>
<li>The LLM determines that the <code>calculate</code> tool is appropriate for the input.</li>
<li>The LLM invokes the <code>calculate</code> tool with an expression crafted by the attacker.</li>
<li>The <code>calculate</code> tool executes the attacker-controlled expression using Python&rsquo;s <code>eval()</code> function.</li>
<li>The attacker achieves arbitrary Python code execution on the server, potentially leading to data exfiltration, system compromise, or denial of service.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>The successful exploitation of this vulnerability, as demonstrated in the official example, allows for remote prompt-to-tool execution from an unauthenticated network request. This leads to arbitrary Python execution through the example <code>calculate()</code> tool&rsquo;s <code>eval()</code>. The compromise of the server process privileges can then expose application files and internal credentials and environment variables. This could result in denial of service or data corruption through executed code.</p>
<h2 id="recommendation">Recommendation</h2>
<ul>
<li>Do not expose A2A servers without authentication. Ensure the <code>auth_token</code> is configured correctly to prevent unauthenticated access (reference: <code>praisonaiagents/ui/a2a/a2a.py</code>).</li>
<li>Avoid using <code>eval()</code> or similar unsafe functions in registered tools. Implement safe alternatives for calculations and data processing in the <code>calculate</code> tool (reference: <code>examples/python/a2a/a2a-server.py</code>).</li>
<li>Review all registered A2A tools to ensure they do not provide unintended access to sensitive data or functionality. Consider implementing a whitelist of allowed functions for the <code>calculate</code> tool (reference: <code>examples/python/a2a/a2a-server.py</code>).</li>
<li>Deploy the Sigma rule <code>Detect PraisonAI A2A eval Code Execution</code> to identify potential exploitation attempts.</li>
</ul>
]]></content:encoded><category domain="severity">critical</category><category domain="type">advisory</category><category>a2a</category><category>praisonai</category><category>rce</category><category>eval</category></item></channel></rss>