CVE-2026-59160
nicheUnauthenticated Network-Exposed Task Execution in @yeger/turbo-graph
@yeger/turbo-graph, an npm package for visualizing Turborepo task graphs, starts an embedded Next.js server bound to all network interfaces (0.0.0.0:29312 by default) instead of the loopback interface, because the declared 'localhost' hostname is never passed to Node's listen() call. Its /api/run GET endpoint performs no authentication, session validation, CSRF protection, or task allowlist check (CWE-306) and passes attacker-supplied 'tasks' and 'filter' query parameters directly into a spawn() of the Turbo CLI. An unauthenticated adjacent-network attacker can therefore send a crafted GET request to the /api/run endpoint to trigger arbitrary repository-defined Turborepo tasks, gaining code execution, file modification, destructive build side effects, or deployment of attacker-chosen targets with the privileges of the developer's OS user. Anyone running the @yeger/turbo-graph dev server, typically on a developer workstation while inspecting a monorepo, is affected; no affected version range or fixed version is specified in the available data. No public proof-of-concept or in-the-wild exploitation is known; the flaw carries a CVSS 3.1 score of 8.8 (high) with an adjacent-network attack vector.
What to do: Upgrade @yeger/turbo-graph to the latest patched release when one is published (no fixed version is stated in the available data) and check your dependency tree with npm ls @yeger/turbo-graph. Until patched, restrict inbound access to TCP port 29312 with a host firewall so only the local machine can reach /api/run, run the tool only on trusted networks, and stop the dev server when it is not in use. Also review recent task runs and deployments in affected repositories for signs of unauthenticated triggering.
| @yeger (npm) @yeger/turbo-graph | — |
Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.
Yeger is a monorepo for npm packages maintained under the yeger scope. Prior to 2.8.9, the turbo-graph package starts its embedded Next.js server from packages/turbo-graph/src/index.ts on all interfaces, including 0.0.0.0:29312 by default, while the GET handler for /api/run in packages/turbo-graph-ui/app/api/run/route.ts has no authentication, authorization, CSRF protection, or task allowlist. The handler accepts the tasks, filter, and force query parameters, and buildResponseFromArgs passes attacker-selected task names to spawn() as Turbo CLI arguments. An adjacent-network attacker can execute any task defined in the victim repository's turbo.json with the privileges of the developer OS user, potentially exposing secrets, modifying files or infrastructure, or causing destructive availability effects. The use of an argument array prevents traditional shell metacharacter injection but does not prevent unauthorized execution of defined tasks. This issue is fixed in version 2.8.9.
- Ecosystems
- npm
- Weakness
- CWE-306
- Vector
- CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
- GHSA
- GHSA-2r5q-h53f-9rp3 (high)
In the news0 stories
No ingested article mentions this CVE yet.