tumf mcp-text-editor路径遍历漏洞CVE-2026-15138
tumf mcp-text-editor是一个开源的、面向 LLM 工具的Model Context Protocol (MCP) 文本编辑服务器,充当 AI 和本地文件的中间桥梁。
一、基本情况
mcp-text-editor 是给 Claude、Cursor这类 AI 程序的本地文件编辑服务,让 AI 能精准读写电脑里的代码/文本文件,提供精准修改能力。

mcp-text-editor提供基于行的文件读写、增删改与多文件操作能力,并被配置为LLM Agent通过file_path参数访问本地任意路径的文件。
栋科技漏洞库关注到 tumf mcp-text-editor 相关版本中存在的路径遍历漏洞,漏洞现已被追踪为CVE-2026-15138,CVSS 3.X评分6.3。
二、漏洞分析
CVE-2026-15138是mcp-text-editor(PyPI平台)中存在的任意文件读写漏洞,其源于路径校验仅简单匹配".."子串,未限定工作目录。
受影响版本中,TextEditor._validate_file_path 仅以子串形式检查 file_path 是否包含 "..",缺少真实路径解析与基础目录限制;
当 LLM 工具按其输入规范传入不包含 ".." 的绝对路径(例如 /etc/passwd)时,该校验直接放行,
随后在 _read_file、edit_text_file_contents 等方法中调用 open(file_path, ...) 即可读取或覆盖服务器进程可访问的任意文件,
从而造成任意文件读写与权限提升风险。
具体来说,服务端路径校验函数_validate_file_path注释标注其作用为校验路径合规安全,但仅拦截包含".."字符串的路径,
未设置基础根目录、未通过真实路径做边界限制。
工具支持传入绝对路径,攻击者直接提交不含".."的绝对路径即可访问服务器任意文件。
读取工具可读取任意文件内容,编辑工具可新建或覆盖任意文件。
1.0.2版本实测验证:get_text_file_contents接口成功读取/etc/passwd;edit_text_file_contents可在预设目录外新建、覆盖文件。
漏洞代码位于mcp_text_editor/text_editor.py,_validate_file_path函数(第25至40行附近):
def _validate_file_path(self, file_path: ...):
# Check for path traversal
if ".." in str(file_path):
raise ValueError(...)
以上即为全部路径限制逻辑。
文件读取风险点:text_editor.py第73行通过read_multiple_ranges函数执行open(file_path, "r");
文件写入风险点:text_editor.py第415行执行open(file_path, "w"),且第229行附近会自动创建父目录。
server.py第197行强制要求编辑操作传入绝对路径,因此越界绝对路径属于合法入参格式。
/etc/passwd、/home/user/.ssh/authorized_keys这类绝对路径不含字符"..",校验直接放行,可完成文件读写。
三、POC概念验证
1、在mcp-text-editor 1.0.2版本调用真实文本编辑工具复现验证:
管理员已设置登录后刷新可查看读取接口成功返回/etc/passwd文件内容。
编辑接口复用同一校验函数,执行open(file_path, "w")写入文件;
传入越界绝对路径(如/tmp/x或带文件哈希的目标文件)可新建或覆盖文件,实测新建、覆盖操作均可正常执行。
2、漏洞危害
攻击者若可控file_path参数(通过大模型输出、提示词注入诱导生成路径),
可读取服务进程权限范围内所有文件(密钥、凭证、/etc/passwd等),
新建/覆盖任意系统文件(如~/.ssh/authorized_keys、Shell启动脚本、应用配置文件),原路径安全校验逻辑完全失效。
3、修复方案
(1)限制所有文件操作至指定基础目录:
(2)使用os.path.realpath解析请求路径,通过os.path.commonpath校验路径是否处于允许根目录内,
拦截外部绝对路径及可逃逸的软链接;摒弃仅匹配".."字符串的简陋校验方式。
(3)读写、编辑路径均需校验,自动创建父目录时同步校验上级目录边界。
四、影响范围
mcp-text-editor<1.1.1
五、修复建议
mcp-text-editor ≥ 1.1.1
六、参考链接
管理员已设置登录后刷新可查看