Entry № 1126
服务端模板注入
服务端模板注入 是什么?
服务端模板注入将模板引擎语法注入到不可信输入中,导致模板渲染时在服务器上执行代码的攻击。
服务端模板注入(SSTI)发生在用户输入被拼接进由 Jinja2、Twig、Freemarker、Velocity 或 ERB 等引擎处理的模板时。许多引擎允许在表达式中访问对象和调用方法,因此 {{7*7}} 或 ${...} 这类载荷可读取环境变量、遍历对象图,最终可执行任意代码或操作系统命令。影响从数据泄露到完全控制服务器不等。防御措施包括将用户数据仅作为模板变量传入(绝不作为模板本身)、使用沙箱化或逻辑较弱的引擎、用白名单限制模板名、对输出进行上下文相关的编码,并以最小权限运行应用程序。
● 示例
- 01
用 Jinja2 渲染的姓名字段在输入 {{7*7}} 时返回 49,确认存在 SSTI。
- 02
Freemarker 模板注入调用 Runtime.exec 在服务器上启动反向 shell。
● 常见问题
服务端模板注入 是什么?
将模板引擎语法注入到不可信输入中,导致模板渲染时在服务器上执行代码的攻击。 它属于网络安全的 攻击与威胁 分类。
服务端模板注入 是什么意思?
将模板引擎语法注入到不可信输入中,导致模板渲染时在服务器上执行代码的攻击。
如何防御 服务端模板注入?
针对 服务端模板注入 的防御通常结合技术控制与运营实践,详见上方完整定义。
服务端模板注入 还有哪些其他名称?
常见的别称包括: SSTI, 模板注入。