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
相关推荐
有痣青年18 小时前
GPT‑5.2 翻车?GDPval 70.9% 的“基准胜利”为何换不来好口碑?
人工智能·openai·ai编程
平凡之路无尽路18 小时前
智能体设计模式:构建智能系统的实践指南
人工智能·设计模式·自然语言处理·nlp·aigc·vllm
骚戴18 小时前
架构视角:Gemini 3.0 Pro 原生多模态能力的边界与工程落地
人工智能·大模型·llm·api·ai gateway
2401_8414956418 小时前
【自然语言处理】汉语语料库建设的深层困境与现实挑战
人工智能·自然语言处理·语料库·标注·汉语语料库·中文信息处理·语料
zhaodiandiandian18 小时前
AI赋能医学教育:从知识传递到能力塑造的革命
人工智能
图图大恼18 小时前
在iOS上体验Open-AutoGLM:从安装到流畅操作的完整指南
人工智能·ios·agent
网安Ruler18 小时前
崭新出厂,自研CipherForge小工具,攻破 D-Link M30 固件加密
前端·网络·python
SakuraOnTheWay18 小时前
玩转n8n | 我用n8n+AI把枯燥论文变成了手绘海报(附Prompt技巧)
人工智能
Maynor99618 小时前
Vibe Coding:AI驱动的编程新范式
人工智能
AiMagicGaGa18 小时前
AIGC 时代的“机器写作”:为何 AI 检测 (AI Detector) 已成为刚需?
人工智能·自然语言处理·aigc