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
相关推荐
YoungLime1 天前
DVWA靶场之十二:储存型 XSS(Stored Cross Site Scripting (XSS))
网络·安全·web安全
woshihonghonga1 天前
Jupyter Notebook模块导入错误排查
人工智能
ting_zh1 天前
PyTorch、TensorFlow、JAX 简介
人工智能·pytorch·tensorflow
数据与人工智能律师1 天前
AI的法治迷宫:技术层、模型层、应用层的法律痛点
大数据·网络·人工智能·云计算·区块链
lypzcgf1 天前
Coze源码分析-资源库-编辑工作流-后端源码-数据存储/安全/错误
安全·工作流·错误处理·coze·coze源码分析·智能体平台·agent平台
椒颜皮皮虾྅1 天前
【DeploySharp 】基于DeploySharp 的深度学习模型部署测试平台:安装和使用流程
人工智能·深度学习·开源·c#·openvino
迈火1 天前
PuLID_ComfyUI:ComfyUI中的图像生成强化插件
开发语言·人工智能·python·深度学习·计算机视觉·stable diffusion·语音识别
AI新兵1 天前
AI大事记10:从对抗到创造——生成对抗网络 (GANs)
人工智能·神经网络·生成对抗网络
却道天凉_好个秋1 天前
深度学习(十五):Dropout
人工智能·深度学习·dropout
奔跑吧邓邓子1 天前
【C++实战(74)】深入C++安全编程:密码学实战之旅
c++·安全·实战·密码学·安全编程