LangchainGo 通过提示词中+SSTI访问敏感文件
CVE-2025-9556:在基于LangchainGo的LLM聊天环境中,LangchainGo依赖Gonja 模板引擎渲染动态提示,兼容了Jinja2 指令从而支持模板复用,但会引发不安全的文件交互。攻击者可以通过提示词中插入SSTI负载,使得 LangChainGo 强制加载并返回文件内容,实现任意文件读取。
LangChainGo(流行的 LLM 编排框架 LangChain 的 Go 语言实现)中发现了一个高危漏洞。该漏洞被追踪为 CVE-2025-9556,允许未认证攻击者通过精心构造的提示模板实现任意文件读取,无需直接系统访问即可暴露服务器敏感文件。
SSTI
LangChainGo 依赖 Gonja 模板引擎(Python Jinja2 的 Go 移植版本)来解析和渲染动态提示。
根据 CERT 协调中心与软件工程研究所的报告,Gonja 对 Jinja2 指令(如{% include %}
、{% from %}
和{% extends %}
)的兼容性虽支持模板复用,但在渲染不可信内容时会引发危险的文件系统交互。
攻击者可提交包含如下恶意载荷的提示:
{% include "/etc/passwd" %}
这可能导致 LangChainGo 强制加载并返回文件内容。由于 Gonja 原生支持 Jinja2 语法,攻击者可以利用嵌套语句或自定义宏等高级模板结构,在单个注入字符串中实现目录遍历或串联多个文件读取操作。 在基于 LangChainGo 的 LLM 聊天环境中,攻击者只需获得提示词提交接口的访问权限即可实施攻击,使得远程威胁行为人能够轻易利用该漏洞。
Risk Factors | Details |
---|---|
受影响的版本 | LangChainGo < 0.18.2 |
影响 | 任意文件读取/数据泄露 |
利用条件 | LLM提示词接口访问权限 |
CVSS 3.1 Score | 9.8 (Critical) |
缓解措施
为修复此漏洞,维护者已发布补丁引入安全的 RenderTemplateFS
函数,该函数强制执行允许的模板路径白名单并默认禁用任意文件系统访问。
此次更新(https://kb.cert.org/vuls/id/949137)还强化了模板解析例程,对含有 Jinja2 文件包含指令的提示内容进行消毒处理或直接拒绝。LangChainGo 运营者应立即升级至 0.18.2 及以上版本,并检查其提示处理代码中是否存在使用 NewTemplate()
的自定义模板实例化操作,改用已修复的 NewSecureTemplate API()
进行替换。
该漏洞会危及数据保密性,并破坏基于 LLM 系统的核心信任模型。攻击者可窃取服务器上存储的 SSH 密钥、环境配置文件、API 凭证或其他专有数据。一旦获取这些文件,攻击者可能提升权限、横向渗透或窃取知识产权。在多租户部署环境中风险更为突出,恶意用户可能访问其他租户实例的文件系统资源。
评论0次