Jinja2模板引擎SSTI漏洞

1. 引入

再研究大模型相关应用的漏洞CVE-2025-25362时(参考1),看到作者给了比较详细的分析(参考2)。下面对这个漏洞做个介绍。

2. 漏洞类型

这个漏洞属于CWE-1336,它主要关注在使用模板引擎进行脚本化处理时,由于未能正确处理特殊元素而引发的安全问题。模板引擎通常用于将数据和预定义的模板相结合,以生成动态内容,如网页、配置文件等。当用户输入被嵌入到模板中且没有进行充分的验证和过滤时,攻击者可能会利用特殊元素注入恶意代码,从而导致安全漏洞(参考3)。

3. 漏洞复现

具体代码如下,运行这段代码,就能输出/home目录下的内容。替换popen中的命令,就能执行任意恶意命令。

python 复制代码
from jinja2 import Environment

# 创建一个 Jinja2 环境
env = Environment()

# 模拟用户输入,攻击者可以构造恶意输入
user_input = "{{ self.__init__.__globals__.__builtins__.__import__('os').popen('ls /home').read() }}"

# 模板字符串,包含用户输入
template_string = f"Hello, {user_input}!"

# 从字符串加载模板
template = env.from_string(template_string)

# 渲染模板
result = template.render()

print(result)

具体来说,这段代码做了这些事:

(1)从 Jinja2 库中导入Environment类,并创建了一个 Jinja2 环境实例env。在实际应用中,Jinja2 环境用于管理模板的加载、渲染等操作。但这里直接使用默认的Environment,没有采取额外的安全措施,为漏洞埋下了隐患。

(2)攻击者构造了恶意输入user_input。在 Jinja2 模板语法中,双花括号{{ }}用于包裹表达式,这些表达式在模板渲染时会被求值。这里攻击者利用 Python 的属性访问和内置函数调用机制,通过self.init .globals .builtins .import('os')导入os模块,再使用popen('ls /home').read()执行系统命令ls /home并读取命令输出。如果这段恶意输入未经过滤就被用于模板渲染,攻击者就能获取/home目录下的文件列表,造成信息泄露。

(3)将恶意输入user_input嵌入到模板字符串template_string中。在正常情况下,模板字符串会包含一些变量占位符,用于填充动态数据。但此处直接将未经处理的用户输入插入,使得恶意代码成为模板的一部分。

(4)env.from_string(template_string)从字符串template_string创建了一个模板对象template。接着,template.render()方法对模板进行渲染,在渲染过程中,Jinja2 会解析并执行模板中的表达式。由于模板中包含恶意表达式,os.popen('ls /home').read()会被执行,最终result中包含了/home目录下的文件列表信息,并通过print(result)输出。

4. 总结

上面给了复现漏洞的代码,代码中由于对用户输入没有进行任何验证和过滤,直接将其用于模板渲染,导致 Jinja2 模板引擎在处理模板时执行了攻击者注入的恶意代码,从而引发了严重的安全问题,如敏感信息泄露、服务器被恶意控制等。在实际开发中,应避免这种不安全的用法,采取输入验证、使用安全的模板引擎配置(如SandboxedEnvironment)等措施来防止 SSTI 漏洞。

5. 参考

  1. https://www.cve.org/CVERecord?id=CVE-2025-25362
  2. https://github.com/explosion/spacy-llm/issues/492
  3. https://cwe.mitre.org/data/definitions/1336.html
相关推荐
刘~浪地球2 分钟前
AI幻觉正在“吃掉“信任:一次保险购买引发的血案
人工智能·深度学习·机器学习
Deitymoon11 分钟前
linux——TCPIP协议原理
linux·网络
AI视觉网奇19 分钟前
公式动画软件学习笔记
人工智能·公式绘图
天天代码码天天22 分钟前
C# OnnxRuntime 部署 DDColor
人工智能·ddcolor
惠惠软件22 分钟前
豆包 AI 学习投喂与排名优化指南
人工智能·学习·语音识别
数据中心的那点事儿23 分钟前
从设计到运营全链破局 恒华智算专场解锁产业升级密码
大数据·人工智能
FluxMelodySun27 分钟前
机器学习(三十三) 概率图模型与隐马尔可夫模型
人工智能·机器学习
米啦啦.27 分钟前
HTTP,
网络·网络协议·http
深兰科技32 分钟前
深兰科技与淡水河谷合作推进:矿区示范加速落地
java·人工智能·python·c#·scala·symfony·深兰科技
V搜xhliang024636 分钟前
OpenClaw、AI大模型赋能数据分析与学术科研 学习
人工智能·深度学习·学习·机器学习·数据挖掘·数据分析