<?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>Evomap — CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/tags/evomap/</link><description>Trending threats, MITRE ATT&amp;CK coverage, and detection metadata — refreshed continuously.</description><generator>Hugo</generator><language>en</language><managingEditor>hello@craftedsignal.io</managingEditor><webMaster>hello@craftedsignal.io</webMaster><lastBuildDate>Wed, 06 May 2026 12:00:00 +0000</lastBuildDate><atom:link href="https://feed.craftedsignal.io/tags/evomap/feed.xml" rel="self" type="application/rss+xml"/><item><title>@evomap/evolver Path Traversal Vulnerability Leads to RCE</title><link>https://feed.craftedsignal.io/briefs/2026-05-evomap-path-traversal/</link><pubDate>Wed, 06 May 2026 12:00:00 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-05-evomap-path-traversal/</guid><description>A path traversal vulnerability in `@evomap/evolver` allows a malicious A2A Hub to overwrite project files, leading to remote code execution when a user fetches a malicious skill.</description><content:encoded><![CDATA[<p>The <code>@evomap/evolver</code> package, specifically versions 1.70.0-beta.4 and earlier, contains a path traversal vulnerability in the <code>evolver fetch</code> subcommand. This vulnerability resides within <code>index.js</code> and allows a malicious A2A Hub to overwrite project files, ultimately leading to remote code execution (RCE). The flaw stems from insufficient sanitization of the <code>skill_id</code> parameter, where a regex allow-list permits the use of <code>.</code> characters. An attacker can exploit this by uploading a malicious skill to the A2A Hub with a crafted <code>skill_id</code> of <code>..</code> and a bundled file such as <code>index.js</code> containing attacker-controlled JavaScript code. When a victim fetches the malicious skill, their <code>index.js</code> file is overwritten. The next time the victim invokes <code>node index.js</code>, even with a simple command like <code>--help</code>, the malicious code executes with the victim&rsquo;s privileges, giving the attacker control of the victim&rsquo;s environment.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>Attacker uploads a malicious skill to the A2A Hub, setting the <code>skill_id</code> to <code>..</code>. The malicious skill also includes a <code>bundled_files</code> array containing a file named <code>index.js</code> with malicious JavaScript code.</li>
<li>The victim runs <code>node index.js fetch --skill=anything</code> to download the skill.</li>
<li>The <code>evolver fetch</code> command in <code>index.js</code> uses <code>path.join('.', 'skills', safeId)</code> to determine the output directory, where <code>safeId</code> is the attacker-controlled <code>skill_id</code> after regex sanitization. Since <code>safeId</code> is <code>..</code>, the output directory resolves to the current working directory.</li>
<li>The code proceeds to iterate over the <code>bundled_files</code> array from the Hub response and writes each file to the output directory.</li>
<li>Due to the path traversal, the attacker-supplied <code>index.js</code> file overwrites the original <code>index.js</code> file in the victim&rsquo;s current working directory.</li>
<li>The victim subsequently invokes <code>node index.js &lt;command&gt;</code>, which executes the attacker-controlled JavaScript code due to the overwritten <code>index.js</code> file.</li>
<li>The attacker achieves remote code execution with the privileges of the victim&rsquo;s user account.</li>
<li>The attacker can maintain persistence by using the <code>run --loop</code> daemon mode and injecting commands or establishing reverse shells.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>Successful exploitation leads to remote code execution on the victim&rsquo;s machine with the privileges of the <code>evolver</code> process. This allows the attacker to execute arbitrary commands, install malware, steal sensitive data, or compromise the entire system. The impact is amplified because the loop daemon (<code>node index.js run --loop</code>) is the documented long-running mode, resulting in the malicious code being executed rapidly after the next daemon iteration. This vulnerability allows an attacker to compromise every user that fetches the malicious skill with a single malicious skill upload. Furthermore, the attacker can also overwrite other files like <code>package.json</code>, potentially leading to further compromise of the victim&rsquo;s system.</p>
<h2 id="recommendation">Recommendation</h2>
<ul>
<li>Deploy the following Sigma rule to detect attempts to download skills with suspicious <code>skill_id</code> values from the A2A Hub.</li>
<li>Apply the provided patch to <code>index.js</code> to reject <code>safeId</code> values that are not single non-traversing path segments, or reuse the same <code>path.relative</code> check used in the <code>--out</code> branch.</li>
<li>Consider removing <code>.</code> from the regex allow-list used to sanitize the <code>skill_id</code> parameter.</li>
<li>Implement signature verification on the Hub response payload before writing any file to disk.</li>
<li>Disallow bundled-file <code>safeName</code> values that match top-level project files (<code>index.js</code>, <code>package.json</code>, <code>package-lock.json</code>, etc.) regardless of <code>outDir</code>.</li>
</ul>
]]></content:encoded><category domain="severity">critical</category><category domain="type">advisory</category><category>path-traversal</category><category>rce</category><category>evomap</category></item></channel></rss>