<?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/products/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:45 +0000</lastBuildDate><atom:link href="https://feed.craftedsignal.io/products/praisonai/feed.xml" rel="self" type="application/rss+xml"/><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></channel></rss>