<?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/" xmlns:webfeeds="http://webfeeds.org/rss/1.0"><channel><title>Turbo-Graph (2.8.8) - CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/products/turbo-graph-2.8.8/</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>Thu, 10 Sep 2026 00:51:37 +0000</lastBuildDate><atom:link href="https://feed.craftedsignal.io/products/turbo-graph-2.8.8/feed.xml" rel="self" type="application/rss+xml"/><image><url>https://feed.craftedsignal.io/favicon-32x32.png</url><title>CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/</link><width>32</width><height>32</height></image><webfeeds:icon>https://feed.craftedsignal.io/favicon.svg</webfeeds:icon><item><title>Unauthenticated Remote Task Execution in @yeger/turbo-graph</title><link>https://feed.craftedsignal.io/briefs/2026-09-turbo-graph-rce/</link><pubDate>Thu, 10 Sep 2026 00:51:37 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-09-turbo-graph-rce/</guid><description>The @yeger/turbo-graph package exposes an unauthenticated HTTP endpoint (/api/run) that binds to all network interfaces, allowing adjacent attackers to execute arbitrary Turborepo tasks defined in the victim repository.</description><content:encoded><![CDATA[<p>The <code>@yeger/turbo-graph</code> package (specifically version 2.8.8) contains a critical vulnerability due to insecure default configuration and the absence of authentication on its administrative API. The application's embedded Next.js server fails to bind to the local loopback interface (localhost), defaulting instead to <code>0.0.0.0</code> and <code>::</code>. This exposes the service to the entire network segment.</p>
<p>The <code>/api/run</code> endpoint is designed to trigger Turborepo tasks; however, it lacks any authentication, authorization, CSRF protections, or task allowlisting. An adjacent attacker can send a simple GET request containing the name of any task defined in the victim's <code>turbo.json</code> file. The server then uses <code>spawn()</code> to execute these tasks with the privileges of the developer's operating system user. This allows attackers to perform malicious actions including sensitive data exfiltration, file modification, or unauthorized infrastructure deployment depending on the tasks configured within the target repository.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>The victim starts the <code>turbo-graph</code> development utility in a repository that contains a <code>turbo.json</code> file.</li>
<li>The application's Node.js <code>listen()</code> call executes without a hostname constraint, causing the server to bind to all network interfaces (e.g., <code>0.0.0.0:29312</code>).</li>
<li>The attacker performs network reconnaissance to identify active services on port <code>29312</code> within the local network segment.</li>
<li>The attacker crafts a malicious HTTP GET request to the <code>/api/run</code> endpoint, supplying the target task name via the <code>tasks</code> query parameter.</li>
<li>The server receives the unauthenticated request and immediately passes the user-supplied task argument to the <code>buildResponseFromArgs</code> function.</li>
<li>The <code>buildResponseFromArgs</code> function constructs a <code>turbo</code> CLI argument array and calls <code>spawn()</code> to execute the specified task.</li>
<li>The operating system executes the requested task script (defined in the <code>package.json</code> scripts) under the context of the victim's user session, completing the RCE objective.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>The vulnerability poses a high risk to development environments where <code>turbo-graph</code> is utilized. Because it requires no credentials and targets a default static port, internal lateral movement or network-adjacent exploitation is highly trivial. Successful exploitation results in full remote code execution in the context of the developer, potentially leading to the theft of environment variables, SSH keys, cloud credentials, or persistent compromise of the developer's workstation and internal build infrastructure.</p>
<h2 id="recommendation">Recommendation</h2>
<p>Prioritize the immediate decommissioning of <code>@yeger/turbo-graph</code> version 2.8.8 until an official patch is applied or binding behavior is corrected.</p>
<ul>
<li>Identify any instances of <code>turbo-graph</code> listening on non-loopback interfaces using host-level process monitoring or network auditing.</li>
<li>Restrict network access to port <code>29312</code> via host-based firewalls (e.g., <code>iptables</code>, <code>nftables</code>, or Windows Firewall) to ensure only local traffic can reach the service.</li>
<li>Monitor for unusual process spawns originating from the <code>turbo-graph</code> process (or its parent process) that correlate with inbound network connections to the development port.</li>
</ul>
]]></content:encoded><category domain="severity">high</category><category domain="type">advisory</category><category>remote-code-execution</category><category>nodejs</category><category>insecure-api</category></item></channel></rss>