事件经过
Prefab UI的生成式UI沙箱被文档描述为用于隔离不可信的、调用方提供的Python——包括LLM生成的UI——在Deno子进程中的Pyodide(WebAssembly中的CPython)内运行。从prefab-ui 0.14.0到0.20.2,启动器以不受限制的--allow-read/--allow-write/--allow-net启动Deno,并将Deno API保留在JavaScript全局对象上;由于Pyodide的js模块代理该全局对象,Python可以调用Deno.readTextFileSync/writeTextFileSync并发起网络调用。能够提供代码的调用方可以以服务器操作系统用户的身份读写文件,并通过向服务器虚拟环境的site-packages写入.pth文件来持久化执行。常见的远程路径是FastMCP的GenerativeUI提供程序,它注册MCP工具generate_prefab_ui并将该工具的代码参数转发到该沙箱中。0.21.0版本通过在接受代码前撤销Deno读写/网络权限、使用--no-prompt启动以及将引导网络访问限制为cdn.jsdelivr.net来修复此问题。已在0.20.2版本上确认。
影响分析
Pyodide/Deno沙箱是用于不可信、LLM编写的UI代码的文档化隔离边界。逃逸它可将一个代理UI生成工具转换为远程代码执行原语:在未认证的FastMCP服务器上,任何能访问该服务器的客户端都可以调用generate_prefab_ui并以服务器用户身份读写文件,并建立持久化代码执行。这是一个新颖的代理执行攻击类别(LLM生成代码沙箱逃逸),拥有可用的利用程序和CVSS 10.0评分。
攻击途径
MCP客户端调用FastMCP GenerativeUI提供程序的generate_prefab_ui工具,传入攻击者控制的Python;代码在Pyodide-in-Deno子进程内运行,该子进程以不受限制的文件系统/网络权限启动并代理Deno全局对象,因此Python可以访问Deno的文件和网络API,以服务器操作系统用户身份写入文件,并通过site-packages中的.pth文件持久化执行。
受影响系统
prefab-ui 0.14.0至0.20.2(0.21.0中修复)
缓解措施
升级到prefab-ui 0.21.0(修复提交030f074 / PR 538),该版本在接受代码前撤销Deno读写/网络权限,使用--no-prompt启动,并将引导网络访问限制为cdn.jsdelivr.net。如果升级延迟,请确保配置FastMCP服务器认证并限制可调用GenerativeUI工具的客户端。