CVE Report: Zero-Click Remote Code Execution via Auto-Loaded Project Extensions in pi-mono 漏洞概述 核心问题:pi-mono 在启动时自动发现并执行项目本地 目录下的所有 TypeScript/JavaScript 扩展文件,无需用户确认、无信任提示、无代码签名验证、无沙箱隔离。恶意仓库可通过放置后门扩展实现零点击远程代码执行。 --- 影响范围 版本:0.58.4 及更早版本 攻击场景: 1. 攻击者创建包含恶意 的 git 仓库 2. 受害者执行 和 命令 3. 扩展在启动阶段自动执行,获取完整 Node.js 权限 4. 可窃取 SSH 密钥、环境变量、令牌等敏感数据 零点击特性:扩展加载发生在交互式 TUI 显示之前,用户输入 按回车后恶意代码立即执行,无机会取消或审查。 --- 根因分析(三阶段) Stage 1: 自动发现 扫描 目录,递归查找 或 文件,显式跟随符号链接(扩大攻击面)。 Stage 2: 无沙箱加载 使用 运行时转译器加载 TypeScript,完整 Node.js API 访问,无沙箱、无模块限制、无危险模块导入阻止。 Stage 3: 立即执行 工厂函数在导入后立即调用, 对象提供事件处理器、工具注册等访问,但扩展代码可直接通过 使用标准 Node.js API( , , , 等)。 缺失的安全控制: 加载前无用户确认提示 无代码签名或完整性验证 无沙箱 — 扩展代码拥有完整 Node.js API 访问 无导入模块的允许/阻止列表过滤 无基于哈希的信任模型(不像 VS Code 的工作区信任) 跟随符号链接,启用基于符号链接的攻击 --- 修复方案 页面中未明确提及修复方案,但基于漏洞分析,建议: 添加用户确认提示(信任对话框) 实现代码签名验证 引入沙箱机制(如 VM2、SES 或受限 Worker) 建立模块导入白名单/黑名单 实现基于哈希的信任模型 默认禁用符号链接跟随或增加警告 --- POC 代码 环境设置 Step 1: 创建恶意仓库 Step 2: 验证扩展自动发现 预期输出: Step 3: 执行并验证 RCE 实际输出(macOS, pi-mono 0.58.4, Node.js v25.5.0): 终端截图中的执行命令: