<?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>PraisonAI — CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/vendors/praisonai/</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>Mon, 11 May 2026 14:01:58 +0000</lastBuildDate><atom:link href="https://feed.craftedsignal.io/vendors/praisonai/feed.xml" rel="self" type="application/rss+xml"/><item><title>PraisonAI Unsafe Tool Resolution Vulnerability</title><link>https://feed.craftedsignal.io/briefs/2026-05-praisonai-tool-execution/</link><pubDate>Mon, 11 May 2026 14:01:58 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-05-praisonai-tool-execution/</guid><description>PraisonAI resolves tool names against module globals and `__main__` after failing to match declared tools, allowing an attacker who can influence tool-call names to invoke unintended application callables, leading to potential unauthorized state changes and command execution.</description><content:encoded><![CDATA[<p>PraisonAI&rsquo;s <code>praisonaiagents</code> library exhibits an unsafe tool resolution vulnerability. Specifically, when resolving tool names, the system searches module globals and the <code>__main__</code> scope <em>after</em> failing to find a match in the declared tool list or the tool registry. Crucially, the default agent configuration sets <code>_perm_allow</code> to <code>None</code>, meaning that the permission gate does not enforce a strict allowlist of declared tools. This allows an attacker who can control or influence the tool-call names to invoke unintended application callables, bypassing the intended security boundary of declared tools. The vulnerability was verified on commit <code>d8a8a786915dc67a7c3021e24f72458f2eac5d9c</code> (v4.6.35).</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>The attacker identifies an application callable that is accessible via <code>__main__</code> or globals.</li>
<li>The attacker crafts a malicious input to the PraisonAI agent that specifies the name of the target callable as the &ldquo;tool&rdquo; to execute.</li>
<li>The <code>ToolExecutionMixin.execute_tool</code> function is called with the attacker-controlled tool name.</li>
<li>The agent first searches for the tool in its declared <code>self.tools</code> list. This search fails because the tool is undeclared.</li>
<li>The agent then attempts to retrieve the tool from the tool registry. This also fails.</li>
<li>The agent falls back to searching for the tool name in <code>globals()</code> and <code>__main__</code>. The attacker-specified callable is found in <code>__main__</code>.</li>
<li>The agent executes the callable directly, passing arguments as needed.</li>
<li>The attacker achieves arbitrary code execution within the context of the PraisonAI application, potentially leading to unauthorized state changes, data exposure, or command execution.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>Successful exploitation of this vulnerability can have significant consequences. In deployments where untrusted parties can influence tool-call names, attackers can execute undeclared application callables, bypassing intended security boundaries. Operators who rely on the declared tool list as a security control are vulnerable, as this control can be circumvented. If the application keeps privileged helper functions in process scope, the attacker can reuse those helpers with the application&rsquo;s own privileges, potentially leading to unauthorized state changes, data exposure, or command execution. Affected packages include <code>pip/praisonaiagents</code> (vulnerable: &lt;= 1.6.36) and <code>pip/PraisonAI</code> (vulnerable: &lt;= 4.6.36).</p>
<h2 id="recommendation">Recommendation</h2>
<ul>
<li>Upgrade to a patched version of <code>praisonaiagents</code> and <code>PraisonAI</code> that addresses the unsafe tool resolution (CVE-2026-44339).</li>
<li>Configure the PraisonAI agent to use an explicit allowlist (<code>_perm_allow</code>) of permitted tools to prevent the execution of undeclared callables. Refer to the PraisonAI documentation for instructions on setting up the <code>_perm_allow</code> parameter.</li>
<li>Implement input validation and sanitization on tool-call names to prevent attackers from injecting arbitrary callable names.</li>
<li>Deploy the Sigma rule to detect attempts to execute undeclared functions through <code>ToolExecutionMixin</code>.</li>
</ul>
]]></content:encoded><category domain="severity">high</category><category domain="type">advisory</category><category>vulnerability</category><category>code-execution</category><category>ai-agent</category></item><item><title>PraisonAI Symlink Extraction Bypass Vulnerability</title><link>https://feed.craftedsignal.io/briefs/2026-05-praisonai-symlink-bypass/</link><pubDate>Mon, 11 May 2026 14:01:45 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-05-praisonai-symlink-bypass/</guid><description>PraisonAI versions 2.7.2 through 4.6.35 are vulnerable to an arbitrary file write due to improper validation of symlinks during archive extraction, affecting `recipe pull`, `recipe publish`, and `recipe unpack` flows.</description><content:encoded><![CDATA[<p>PraisonAI versions 2.7.2 through 4.6.35 are susceptible to a symlink extraction bypass vulnerability. The vulnerability exists within the <code>_safe_extractall</code> helper function, which is used by <code>recipe pull</code>, <code>recipe publish</code>, and <code>recipe unpack</code> functionalities. The core issue lies in the lack of validation for <code>member.linkname</code> and the failure to reject symlink members during archive extraction. This allows a malicious actor to craft a <code>.praison</code> bundle containing a symlink that points outside the intended destination directory, leading to arbitrary file writes. This vulnerability re-opens attack vectors that previous patches (GHSA-99g3-w8gr-x37c, GHSA-4rx4-4r3x-6534, GHSA-r9x3-wx45-2v7f, and GHSA-4ph2-f6pf-79wv) aimed to mitigate.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>An attacker crafts a malicious <code>.praison</code> bundle containing a symlink member.</li>
<li>The symlink&rsquo;s <code>name</code> is within the intended destination directory.</li>
<li>The symlink&rsquo;s <code>linkname</code> points to a location outside the destination directory (e.g., <code>/tmp/PWNED</code>).</li>
<li>The malicious bundle also includes a regular file member.</li>
<li>The regular file&rsquo;s path traverses through the previously created symlink (e.g., <code>legit/escape/owned.txt</code>).</li>
<li>A user or server processes the malicious <code>.praison</code> bundle using <code>praisonai recipe unpack</code>, <code>praisonai recipe pull</code>, or a registry archive validation process.</li>
<li>During extraction, the symlink is created first, pointing to the attacker-controlled location.</li>
<li>When the regular file is extracted, it follows the symlink, resulting in an arbitrary file write to the attacker&rsquo;s chosen location.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>Successful exploitation allows an attacker to write arbitrary files with attacker-controlled content to any location on the filesystem accessible to the PraisonAI process. This can lead to various outcomes, including: overwriting user configuration files (<code>.bashrc</code>, <code>.zshrc</code>, <code>.profile</code>, SSH <code>authorized_keys</code>, cron entries), modifying project files, or, if the process runs as root, compromising the entire system. This vulnerability impacts all hosts processing malicious <code>.praison</code> bundles through affected <code>praisonai</code> versions.</p>
<h2 id="recommendation">Recommendation</h2>
<ul>
<li>Upgrade to a patched version of PraisonAI that includes the <code>filter=&quot;data&quot;</code> argument in the <code>tar.extractall</code> call to prevent symlink extraction bypass (<code>recipe/registry.py:178</code>).</li>
<li>For older Python versions, implement an explicit check for symlinks and hardlinks during archive extraction, validating that the link target remains within the intended destination directory as described in the suggested remediation.</li>
<li>Deploy the Sigma rule &ldquo;Detect PraisonAI Symlink Extraction Bypass&rdquo; to identify potential exploitation attempts by monitoring for archive extractions containing suspicious symlinks.</li>
</ul>
]]></content:encoded><category domain="severity">high</category><category domain="type">advisory</category><category>symlink</category><category>arbitrary file write</category><category>path traversal</category><category>attack.persistence</category><category>attack.privilege_escalation</category></item><item><title>PraisonAI MCP Path Traversal to RCE via .pth Injection</title><link>https://feed.craftedsignal.io/briefs/2026-05-praisonai-mcp-pth-rce/</link><pubDate>Mon, 11 May 2026 13:59:36 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-05-praisonai-mcp-pth-rce/</guid><description>PraisonAI's MCP server is vulnerable to path traversal leading to arbitrary code execution by writing a Python `.pth` file into the user's site-packages directory, triggered via poisoned LLM contexts or unauthenticated HTTP-stream transports due to unvalidated kwargs in the dispatcher and lack of containment checks in file-handling tools.</description><content:encoded><![CDATA[<p>PraisonAI&rsquo;s MCP (Model Context Protocol) server registers four file-handling tools by default: <code>praisonai.rules.create</code>, <code>praisonai.rules.show</code>, <code>praisonai.rules.delete</code>, and <code>praisonai.workflow.show</code>. Each accepts a path or filename string from MCP <code>tools/call</code> arguments and joins it onto <code>~/.praison/rules/</code> (or accepts an absolute path for <code>workflow.show</code>) without proper validation. The JSON-RPC dispatcher passes <code>params[&quot;arguments&quot;]</code> without validating against the advertised input schema. This allows an attacker to write arbitrary files by escaping the rules directory, leading to arbitrary code execution via Python <code>.pth</code> injection into the user site-packages directory. The vulnerability can be exploited via LLMs with poisoned context, unauthenticated HTTP-stream transports, or prompt injection. No operator misconfiguration is required to trigger the vulnerability.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>An attacker poisons the context of an LLM connected to a PraisonAI MCP server through attacker-controlled web content, documents, or emails.</li>
<li>The user interacts with the LLM, asking it to summarize or analyze the poisoned content, which contains a crafted command.</li>
<li>The LLM, under prompt injection, crafts a <code>tools/call</code> request to the MCP server, targeting <code>praisonai.rules.create</code> with a malicious <code>rule_name</code>.</li>
<li>The crafted <code>rule_name</code> includes path traversal sequences (e.g., <code>../../</code>) to write a file outside the intended rules directory.</li>
<li>The MCP server&rsquo;s <code>rules.create</code> handler, lacking containment checks, writes the file to a location such as the user&rsquo;s site-packages directory (e.g., <code>~/.local/lib/python3.14/site-packages/evil.pth</code>).</li>
<li>The written file is a Python <code>.pth</code> file containing an <code>import os; os.system(&quot;malicious_command&quot;)</code> statement.</li>
<li>The next time the user starts a Python interpreter (including the <code>praisonai</code> CLI), the <code>.pth</code> file is processed, executing the attacker&rsquo;s arbitrary code.</li>
<li>The attacker achieves arbitrary code execution with the user&rsquo;s privileges, potentially leading to data exfiltration, system compromise, or lateral movement.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>Successful exploitation allows an attacker to achieve arbitrary code execution on the victim&rsquo;s machine. This can lead to data exfiltration, installation of malware, or further compromise of the system. The vulnerability affects any user running a PraisonAI MCP server connected to an LLM without proper input validation, and the default configuration of the HTTP-stream transport exposes the server to local attacks without requiring authentication. The impact is significant as it can compromise the user&rsquo;s entire system and any data accessible to the user account.</p>
<h2 id="recommendation">Recommendation</h2>
<ul>
<li>Apply input validation and containment to all file-handling tools. Specifically, implement checks to prevent path traversal in <code>praisonai.rules.create</code>, <code>praisonai.rules.show</code>, and <code>praisonai.rules.delete</code> as detailed in the &ldquo;Suggested fix&rdquo; section of the advisory.</li>
<li>Enforce schema validation in the MCP dispatcher to ensure that <code>params[&quot;arguments&quot;]</code> conforms to the expected schema, rejecting unknown properties and type mismatches.</li>
<li>Restrict the <code>workflow.show</code> tool to only accept paths within a designated workflow directory and reject absolute paths or any value containing <code>..</code>, as outlined in the &ldquo;Suggested fix&rdquo; section.</li>
<li>Deploy the Sigma rules provided in this brief to detect potential exploitation attempts and tune them for your environment.</li>
<li>Require authentication on non-loopback HTTP-stream binds to prevent unauthorized access to the MCP server when using <code>praisonai mcp serve --transport http-stream</code>.</li>
</ul>
]]></content:encoded><category domain="severity">critical</category><category domain="type">advisory</category><category>path-traversal</category><category>code-execution</category><category>prompt-injection</category><category>mcp</category></item><item><title>PraisonAI Legacy API Server Authentication Bypass (CVE-2026-44338)</title><link>https://feed.craftedsignal.io/briefs/2026-05-praisonai-auth-bypass/</link><pubDate>Mon, 11 May 2026 13:57:56 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-05-praisonai-auth-bypass/</guid><description>PraisonAI ships a legacy Flask API server with authentication disabled by default, allowing any reachable caller to access `/agents` and trigger the configured `agents.yaml` workflow through `/chat` without providing a token (CVE-2026-44338).</description><content:encoded><![CDATA[<p>PraisonAI includes a legacy Flask API server (<code>src/praisonai/api_server.py</code>) that, by default, ships with authentication disabled. This is due to hardcoded values <code>AUTH_ENABLED = False</code> and <code>AUTH_TOKEN = None</code>, causing the <code>check_auth()</code> function to always return <code>True</code> and effectively bypass authentication checks on <code>/agents</code> and <code>/chat</code> endpoints. The affected versions range from v2.5.6 to 4.6.33, which is the current PyPI release as of May 1, 2026. The <code>serve agents</code> command is not affected, but the older <code>api_server.py</code> binds to 0.0.0.0:8080 by default, and the generated sample API deployment YAML recommends <code>host: 0.0.0.0</code> together with <code>auth_enabled: false</code>, further exacerbating the issue. This vulnerability, identified as CVE-2026-44338, allows unauthenticated access to sensitive functionality.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>Target identifies a PraisonAI instance running the vulnerable legacy API server.</li>
<li>Target sends a GET request to <code>/agents</code> endpoint to enumerate available agents.</li>
<li>The API server, due to disabled authentication, grants access to the <code>/agents</code> endpoint without requiring any authentication credentials.</li>
<li>The server responds with agent metadata, revealing the configured <code>agents.yaml</code> file.</li>
<li>Target crafts a POST request to the <code>/chat</code> endpoint, including a <code>message</code> key in the JSON payload.</li>
<li>The API server processes the request, bypassing authentication, and executes the workflow defined in <code>agents.yaml</code> by calling <code>PraisonAI(agent_file=&quot;agents.yaml&quot;).run()</code>.</li>
<li>The API server returns the result of the <code>PraisonAI.run()</code> call to the unauthenticated attacker.</li>
<li>Depending on the configuration specified in agents.yaml, this can result in data exfiltration, code execution, or denial of service via resource exhaustion.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>Successful exploitation allows any attacker with network access to the vulnerable PraisonAI instance to enumerate configured agents, trigger workflows defined in <code>agents.yaml</code>, consume model/API quota, and potentially expose sensitive information. The impact is determined by the capabilities defined in the <code>agents.yaml</code> file, but the authentication bypass itself is unconditional in the shipped legacy server. This vulnerability affects PraisonAI versions 2.5.6 through 4.6.33.</p>
<h2 id="recommendation">Recommendation</h2>
<ul>
<li>Deploy the Sigma rule &ldquo;Detect Unauthenticated Access to PraisonAI Agents Endpoint&rdquo; to detect unauthenticated access attempts to the <code>/agents</code> endpoint within your web server logs.</li>
<li>Deploy the Sigma rule &ldquo;Detect Unauthenticated Chat Request to PraisonAI API Server&rdquo; to identify unauthorized requests being made to the <code>/chat</code> endpoint to trigger workflow executions.</li>
<li>Upgrade PraisonAI to a version that addresses CVE-2026-44338 or migrate to the newer <code>serve agents</code> command which defaults to binding on localhost and supports API keys.</li>
<li>If upgrading is not immediately feasible, ensure the legacy API server&rsquo;s <code>AUTH_ENABLED</code> setting is set to <code>True</code> and configure a strong <code>AUTH_TOKEN</code> to mitigate the unauthenticated access vulnerability.</li>
<li>Review and restrict network access to the legacy API server to minimize the attack surface and prevent unauthorized external access to the vulnerable endpoints.</li>
</ul>
]]></content:encoded><category domain="severity">high</category><category domain="type">advisory</category><category>authentication bypass</category><category>API</category><category>CVE-2026-44338</category></item></channel></rss>