LangChainGo模板注入漏洞解析:任意文件读取风险与防护

本文详细分析了LangChainGo框架中存在的服务器端模板注入漏洞(CVE-2025-9556),该漏洞允许攻击者通过恶意模板指令读取服务器敏感文件,影响系统机密性,并提供了相应的解决方案。

漏洞概述

LangChainGo(LangChain的Go语言实现)被发现存在任意文件读取漏洞。该漏洞被追踪为CVE-2025-9556,允许通过支持Jinja2语法的Gonja模板引擎实现任意文件读取。攻击者可通过注入恶意提示内容来访问敏感文件,导致服务器端模板注入(SSTI)攻击。

漏洞描述

LangChainGo是LangChain的Go编程语言移植/分支版本,是一个用于开发利用大语言模型(LLM)应用程序的开源编排框架。LangChainGo使用Gonja进行语法解析和创建动态可重用的提示模板。Gonja是Jinja2模板引擎的Go实现,与原始Python Jinja2实现高度兼容,并支持Jinja2语法。

由于Gonja支持Jinja2语法,攻击者可以在LangChainGo中恶意利用{% include %}{% from %}{% extends %}等指令。虽然这些指令本意是用于构建可重用模板,但它们也允许从服务器文件系统中拉取和读取外部文件。攻击者可利用此功能注入包含高级模板指令的恶意模板代码,读取敏感文件如/etc/passwd。这导致了服务器端模板注入漏洞,可能暴露敏感信息。该漏洞被追踪为CVE-2025-9556。

影响范围

此漏洞通过允许在运行LangChainGo的服务器上进行任意文件读取,破坏了系统的机密性。通过注入恶意模板语法,攻击者可以访问受害者设备上存储的敏感信息。这些信息可能导致系统的进一步泄露。在使用LangChainGo的基于LLM的聊天机器人环境中,攻击者只需访问提示即可恶意构造和利用该提示。

解决方案

LangChainGo的维护者已发布新的安全功能来防止模板注入。新增了RenderTemplateFS函数,除了默认阻止文件系统访问外,还支持安全的文件模板引用。LangChainGo用户应更新到最新版本的软件以获得保护。

致谢

感谢报告者bestlzk。本文档由Ayushi Kriplani和Christopher Cullen编写。

参考链接

其他信息

  • CVE ID: CVE-2025-9556
  • 公开日期:2025-09-12
  • 首次发布:2025-09-12
  • 最后更新:2025-09-12 13:44 UTC
  • 文档版本:1
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计