Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessReach FastMCP server (no auth)
-
DeliveryCall generate_prefab_ui with crafted Python
-
ExploitProxy Deno API via Pyodide js module
-
ExecutionWrite .pth into virtualenv site-packages
-
ImpactPersist code execution as server OS user
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V15 - Secure Coding and Architecture Protection mechanism completeness
|
| Exploitation Conditions | Requires the opt-in Generative UI feature to be enabled, Deno installed on the host, and a reachable path that forwards caller-supplied code into the Pyodide/Deno sandbox - the documented path is FastMCP's GenerativeUI provider exposing the generate_prefab_ui tool. On a FastMCP server with no authentication configured, exploitation is remote and unauthenticated by any client that can reach the server; with authentication enabled, it is limited to clients already permitted to call tools. Affected versions are prefab-ui 0.14.0 through 0.20.2 (confirmed on 0.20.2). Limiting factors: the feature is not enabled by default, the Deno runtime dependency must be present, and network reachability to the MCP endpoint is required; these narrow real-world exposure despite the maximal CVSS. |
| Impact | All severity signals point the same direction: the input CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H = 10.0) describes a network-reachable, low-complexity, unauthenticated sandbox escape with scope change and full confidentiality/integrity/availability loss, and the vuln.today Decision label is act_now with a vendor patch available - so this should be treated as a real, high-priority issue, not a high-CVSS-but-low-risk artifact. The mechanism is concretely documented by the reporter (JFROG) and corroborated by the vendor advisory and PR 538 diff: Pyodide's js module proxies the Deno global, letting caller-supplied Python call Deno.readTextFileSync/writeTextFileSync because the launcher granted unrestricted --allow-read/--allow-write/--allow-net, yielding file read/write as the server OS user and persistent code execution via a .pth file in site-packages. The important counterweight is deployment conditions, not mechanism: the feature is opt-in, the host must have Deno installed, and the PR:N rating assumes the documented no-authentication FastMCP deployment - with authentication, the attacker must be a client already allowed to call tools, so real-world exposure is narrower than the raw 10.0 implies. No EPSS score is provided and the CVE is not listed in CISA KEV in the supplied data; there is no public exploit identified at time of analysis, so the act_now urgency rests on severity and the fully-disclosed technique rather than on observed exploitation. |
| Exploit ScenarioDerived | A FastMCP server runs the GenerativeUI provider (Generative UI enabled, Deno installed) and registers the generate_prefab_ui tool with no authentication configured. An attacker who can reach the server calls that tool with Python that uses Pyodide's js proxy to invoke Deno.writeTextFileSync, writing a malicious .pth file into the virtualenv's site-packages to gain persistent code execution as the server OS user. No public exploit code is identified at time of analysis, though the technique is fully described in the advisory. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Nov 01, 2026
The Generative UI sandbox in prefab-ui 0.14.0 through 0.20.2 does not actually isolate caller-supplied Python: the Deno subprocess is launched with unrestricted --allow-read, --allow-write and --allow-net, and Pyodide's js module exposes the Deno global to sandboxed Python, so code can call Deno.readTextFileSync and Deno.writeTextFileSync as the server OS user, and can persist execution by writing a .pth file into the server virtualenv's site-packages. The documented remote path is FastMCP's GenerativeUI provider, which registers the MCP tool generate_prefab_ui and forwards that tool's code argument into this sandbox; on a FastMCP server with no authentication configured, any client that can reach the server can invoke it (CVSS 3.1 vector AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H, 10.0). Exposure is narrowed by the feature being opt-in and requiring Deno on the host, but the dedicated advisory, an act_now decision label and a vendor-released fix in 0.21.0 make this a high-priority item; no public exploit was identified at time of analysis.
RemediationAI
Vendor-released patch: prefab-ui 0.21.0, published on PyPI (https://pypi.org/project/prefab-ui/0.21.0/) and tagged as https://github.com/PrefectHQ/prefab/releases/tag/v0.21.0; upgrade all installations running 0.14.0 through 0.20.2 to 0.21.0, which revokes Deno read, write and network permissions after runtime bootstrap and before code is accepted, disables permission prompts via --no-prompt, restricts bootstrap network access to cdn.jsdelivr.net, and uses the packaged deno.lock in frozen mode - the change is commit 030f074f85e0b1be0dd44b0283185aecb26337a2 in pull request https://github.com/PrefectHQ/prefab/pull/538, with details in advisory GHSA-595q-jv4r-q7j9. Where upgrading immediately is not possible, reduce exposure by not enabling the optionally-installed Generative UI feature and not registering FastMCP's GenerativeUI provider (and therefore the generate_prefab_ui tool) on reachable servers, and, if the tool must stay available for a short transition, configure authentication on the FastMCP server and restrict network reachability to the MCP endpoint so only explicitly permitted clients can call tools - this lowers the client population but does not remove the underlying escape for any client already allowed to call tools, and only the 0.21.0 permission revocation closes it.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Prefab UI's Generative UI feature runs LLM-written Prefab Python inside Pyodide - CPython compiled to WebAssembly - hosted in a Deno subprocess, and the documentation advertised this as isolation for untrusted code. The weakness class is CWE-693, Protection Mechanism Failure: the isolation boundary existed in name only. The launcher started Deno with --allow-read, --allow-write and --allow-net rather than a narrow capability set, and the runner left the Deno API reachable on the JavaScript global object; because Pyodide's js module proxies that global into Python, sandboxed code could reach Deno.readTextFileSync and Deno.writeTextFileSync directly and act with the privileges of the server OS user. The scope change in the assessed vector (S:C) reflects that the escaped code operates outside the intended sandbox and affects the host filesystem and the Python environment, not just the sandboxed component; the trigger mechanism is the deliberate pass-through of the generate_prefab_ui tool's code argument from FastMCP's GenerativeUI provider into the sandbox, as described in the advisory. The 0.21.0 fix (commit 030f074, PR 538) restructures startup: after the Pyodide runtime and Prefab sources load, the runner revokes filesystem read, filesystem write and network permissions before accepting code, starts the process with --no-prompt so a permission request cannot re-grant them, limits bootstrap network access to cdn.jsdelivr.net, and pins the packaged deno.lock in frozen mode so module dependencies are integrity-checked independently of the working directory. The accompanying documentation change also retracts the earlier claim of a strong sandbox, noting that the interpreter and imported modules stay shared between run() calls and that per-call namespace isolation is not per-request Python isolation.
Know when Prefab Ui gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
Documented no-auth FastMCP path gives remote unauthenticated code supply (AV:N/AC:L/PR:N/UI:N); escaping the Pyodide sandbox to the host OS is a scope change (S:C) with full C/I/A loss.
Primary rating from Vendor (JFROG).
CVSS VectorVendor: JFROG
DescriptionCVE.org
Prefab UI's Generative UI sandbox runs caller-supplied Python inside Pyodide, Python compiled to WebAssembly, in a Deno subprocess. The feature is documented as isolation for untrusted code, including LLM-written UI. From prefab-ui 0.14.0 through 0.20.2 the launcher starts Deno with unrestricted --allow-read, --allow-write, and --allow-net, and the runner leaves the Deno API on the JavaScript global object. Pyodide's js module proxies that global, so the Python can call Deno.readTextFileSync and Deno.writeTextFileSync. A caller who can supply the code can read and write files as the server OS user, and can persist code execution by writing a .pth file into the server virtualenv's site-packages. The usual remote path is FastMCP's GenerativeUI provider, which registers the MCP tool generate_prefab_ui and forwards that tool's code argument into this sandbox. On a FastMCP server with no authentication configured, any client who can reach the server can call the tool. With authentication, any client allowed to call tools can. Generative UI is opt-in, and the host must have Deno installed. Confirmed on prefab-ui 0.20.2. Fixed in 0.21.0: after the runtime and Prefab sources load, the runner revokes Deno read, write, and network permission before it accepts code, the process is started with --no-prompt so a permission request cannot grant them again, and bootstrap network access is limited to cdn.jsdelivr.net. The fix is commit 030f074 (pull request 538).
Articles & Coverage 1
Technical POC Analysis
CWE-693 Protection Mechanism Failure.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
CVE-2026-120338 is a critical vulnerability in prefab-ui's Generative UI sandbox (versions 0.14.0 through 0.20.2) that allows unauthenticated remote attackers to execute arbitrary code on servers running the FastMCP GenerativeUI provider. This could lead to full server compromise, data theft, and lateral movement, impacting any organization using these versions in production. Leadership should prioritize immediate patching and exposure assessment.
Apply vendor patch.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.
EUVD-2026-114859
GHSA-3g72-rrqc-f76c
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB