<?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>@Penpot/Mcp (&lt; 2.15.0) — CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/products/@penpot/mcp--2.15.0/</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>Tue, 19 May 2026 20:00:35 +0000</lastBuildDate><atom:link href="https://feed.craftedsignal.io/products/@penpot/mcp--2.15.0/feed.xml" rel="self" type="application/rss+xml"/><item><title>Penpot MCP REPL Server Unauthenticated Remote Code Execution</title><link>https://feed.craftedsignal.io/briefs/2026-05-penpot-mcp-rce/</link><pubDate>Tue, 19 May 2026 20:00:35 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-05-penpot-mcp-rce/</guid><description>The Penpot MCP module's ReplServer binds to all interfaces and exposes an unauthenticated /execute endpoint, allowing remote attackers to execute arbitrary code by sending a POST request with JavaScript code, leading to potential information disclosure and command execution.</description><content:encoded><![CDATA[<p>The Penpot MCP (Meta Communication Protocol) module contains a vulnerability in its <code>ReplServer</code> component. This server, designed for interactive code execution, inadvertently binds to all network interfaces (0.0.0.0) on port 4403 and exposes an <code>/execute</code> endpoint without any form of authentication. This means that any system on the network can send a POST request to this endpoint with a JSON payload containing JavaScript code, which will then be executed on the Penpot MCP server. The vulnerability was reported after a similar issue was identified in <code>PenpotMcpServer.ts</code> and partially addressed. However, <code>ReplServer.ts</code> was overlooked during the fix. The issue exists in versions prior to 2.15.0.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>The attacker identifies a Penpot MCP server running with the vulnerable <code>ReplServer</code> component.</li>
<li>The attacker determines the server&rsquo;s IP address and confirms the <code>/execute</code> endpoint is accessible on port 4403.</li>
<li>The attacker crafts a POST request to <code>http://&lt;target-ip&gt;:4403/execute</code> with a JSON payload.</li>
<li>The JSON payload contains a &ldquo;code&rdquo; field with malicious JavaScript code to be executed on the server.</li>
<li>The server receives the POST request and executes the JavaScript code via <code>PluginBridge.executePluginTask()</code>.</li>
<li>The executed code performs malicious actions, such as reading sensitive files (e.g., <code>/etc/passwd</code>), executing system commands (e.g., <code>id</code>), or dumping environment variables.</li>
<li>The server sends a JSON response back to the attacker with the results of the code execution.</li>
<li>The attacker leverages the exposed information or continues to execute commands to compromise the system further.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>Successful exploitation allows an unauthenticated attacker to execute arbitrary code on the machine running the MCP module. This can lead to sensitive information disclosure, such as reading files containing credentials and API keys, as well as executing system commands with the privileges of the Penpot MCP server process. Although the MCP module isn&rsquo;t part of the default Docker deployment, it may be used by developers and teams for AI-assisted design work. If deployed in shared development environments or CI/CD pipelines, the exposed port is reachable from the network, increasing the risk of compromise.</p>
<h2 id="recommendation">Recommendation</h2>
<ul>
<li>Upgrade the <code>@penpot/mcp</code> package to version 2.15.0 or later to patch CVE-2026-45805.</li>
<li>Modify the <code>ReplServer.ts</code> file to bind to localhost by adding the &rsquo;localhost&rsquo; host parameter to the <code>listen</code> call on line 89, as described in the suggested fix.</li>
<li>Implement authentication for the <code>/execute</code> endpoint to prevent unauthorized access. Consider using a shared secret from an environment variable as a basic authentication mechanism.</li>
<li>Deploy the Sigma rule &ldquo;Detect Penpot MCP Unauthenticated Code Execution Attempt&rdquo; to detect attempts to exploit this vulnerability.</li>
</ul>
]]></content:encoded><category domain="severity">high</category><category domain="type">advisory</category><category>remote-code-execution</category><category>unauthenticated-access</category></item></channel></rss>