当你在Spring Boot应用中使用了Thymeleaf模板引擎,却未对用户输入进行严格过滤时,攻击者可能通过注入恶意表达式,直接在你的服务器上执行任意命令。这就是Thymeleaf模板注入(SSTI)漏洞,一个可导致远程代码执行(RCE)的高危风险。百度云防护内置规则ID 4197,可实时检测并拦截此类攻击。
一、 什么是Thymeleaf模板注入漏洞?
1.1 漏洞原理
Thymeleaf是Java生态中最流行的模板引擎之一,常用于Spring Boot应用。开发者有时会将用户可控的输入(如URL参数、表单字段)直接拼接到模板路径或表达式中。若攻击者输入了恶意表达式(如${T(java.lang.Runtime).getRuntime().exec('calc')}),模板引擎会将其作为表达式执行,导致任意代码运行。
典型攻击场景:
- 控制器使用
@RequestParam接收参数,并将其作为模板名称返回。 - 使用
th:include、th:replace等属性时,拼接用户输入。 - 错误处理页面暴露了表达式注入点。
1.2 攻击载荷示例
假设应用中有如下代码:
@GetMapping("/page")
public String getPage(@RequestParam String name) {
return "user/" + name; // name 来自用户输入
}
攻击者请求/page?name=__${T(java.lang.Runtime).getRuntime().exec('whoami')}__::.x,Thymeleaf解析时可能执行whoami命令,并将结果返回或悄悄执行。
二、 漏洞危害:从表达式注入到服务器沦陷
| 危害等级 | 具体后果 |
|---|---|
| 高危 | 攻击者可执行任意系统命令,如id、curl下载木马、nc反弹Shell |
| 严重 | 读取服务器敏感文件(/etc/passwd、配置文件、源码) |
| 毁灭性 | 写入Webshell,完全控制服务器;横向渗透内网;加密文件勒索 |
真实案例:某知名开源CMS曾因Thymeleaf模板注入漏洞,导致数千个网站被植入挖矿程序。
三、 为什么传统WAF难以防御?
- 表达式多变:攻击者可以使用
${#ctx...}、${T(...)}、${#strings...}等大量内置对象,载荷千变万化。 - 混淆编码:支持Unicode、十六进制、嵌套表达式等方式绕过关键词检测。
- 合法与恶意边界模糊:正常的模板表达式也可能包含动态内容,简单拦截会误伤业务。
四、 百度云防护如何拦截?规则4197深度解析
从百度云防护内置规则库可以看到:
| 规则名称 | 规则ID | 风险等级 | 防护类型 | 规则描述 |
|---|---|---|---|---|
| Code_exec.Thymeleaf_SSTI.A | 4197 | 高风险 | 代码执行 | 检测Thymeleaf模板注入导致的命令执行攻击 |
4.1 语义分析:识别Thymeleaf表达式结构
该规则不依赖简单关键词匹配,而是解析HTTP请求中的表达式语法。它能识别:
${...}、*{...}、#{...}、@{...}等Thymeleaf表达式边界符T(...)类访问语法#ctx、#vars、#locale等内置上下文对象- 对
Runtime.exec()、ProcessBuilder等危险Java类的调用
4.2 多层解码,还原混淆载荷
无论攻击者使用URL编码、Unicode转义还是嵌套表达式,规则4197会自动解码,还原出真实意图。
例如:
%24%7BT(java.lang.Runtime).getRuntime().exec('calc')%7D→ 解码为原始表达式${#strings.replace('ex','','exec')}等动态构造也会被检测。
4.3 低误报设计
正常业务中极少出现T(java.lang.Runtime).getRuntime().exec(...)这类表达式。规则经过海量真实流量训练,误报率极低。即使有合法需求,也可通过白名单放行。
五、 如何启用规则4197?
如果你已接入百度云防护WAF,只需两步:
- 登录控制台 → 防护配置 → Web防护 → 内置规则
- 搜索规则ID 4197,确认状态为“开启”,动作为“拦截”
建议:首次可设为“观察”模式,确认无业务误报后再改为“拦截”。
六、 开发人员如何从源头修复?
除了依赖WAF,开发者应遵循安全编码规范:
- 避免拼接用户输入到模板路径:使用白名单或枚举值。
- 开启Thymeleaf的表达式沙箱:限制可访问的类和方法。
- 使用
@ResponseBody返回纯数据:不将用户输入作为模板渲染。 - 定期更新Thymeleaf版本:修复已知表达式注入漏洞。
七、 主机吧总结:让模板注入“无表达余地”
Thymeleaf模板注入是Java Web应用中高危但易被忽视的漏洞。百度云防护规则4197通过语法级检测,精准识别恶意表达式,在攻击执行前将其阻断。配合开发侧的规范实践,可彻底杜绝此类风险。
如果你还不确定自己的Spring Boot应用是否存在Thymeleaf注入风险,或想为网站加上一道主动防御屏障,欢迎联系主机吧。我们提供免费安全评估和配置指导。
主机吧 | 百度云防护官方合作伙伴
提供WAF接入、高防CDN、高防IP、高防服务器、SSL证书一站式服务
让每一次表达式注入都无处遁形,让每一台Java服务器都稳如磐石。


