Thymeleaf模板注入漏洞:攻击者如何通过表达式执行系统命令?百度云防护规则4197精准拦截

当你在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:includeth: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命令,并将结果返回或悄悄执行。


二、 漏洞危害:从表达式注入到服务器沦陷

危害等级具体后果
高危攻击者可执行任意系统命令,如idcurl下载木马、nc反弹Shell
严重读取服务器敏感文件(/etc/passwd、配置文件、源码)
毁灭性写入Webshell,完全控制服务器;横向渗透内网;加密文件勒索

真实案例:某知名开源CMS曾因Thymeleaf模板注入漏洞,导致数千个网站被植入挖矿程序。


三、 为什么传统WAF难以防御?

  • 表达式多变:攻击者可以使用${#ctx...}${T(...)}${#strings...}等大量内置对象,载荷千变万化。
  • 混淆编码:支持Unicode、十六进制、嵌套表达式等方式绕过关键词检测。
  • 合法与恶意边界模糊:正常的模板表达式也可能包含动态内容,简单拦截会误伤业务。

四、 百度云防护如何拦截?规则4197深度解析

从百度云防护内置规则库可以看到:

规则名称规则ID风险等级防护类型规则描述
Code_exec.Thymeleaf_SSTI.A4197高风险代码执行检测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,只需两步:

  1. 登录控制台 → 防护配置Web防护内置规则
  2. 搜索规则ID 4197,确认状态为“开启”,动作为“拦截”

建议:首次可设为“观察”模式,确认无业务误报后再改为“拦截”。


六、 开发人员如何从源头修复?

除了依赖WAF,开发者应遵循安全编码规范:

  • 避免拼接用户输入到模板路径:使用白名单或枚举值。
  • 开启Thymeleaf的表达式沙箱:限制可访问的类和方法。
  • 使用@ResponseBody返回纯数据:不将用户输入作为模板渲染。
  • 定期更新Thymeleaf版本:修复已知表达式注入漏洞。

七、 主机吧总结:让模板注入“无表达余地”

Thymeleaf模板注入是Java Web应用中高危但易被忽视的漏洞。百度云防护规则4197通过语法级检测,精准识别恶意表达式,在攻击执行前将其阻断。配合开发侧的规范实践,可彻底杜绝此类风险。

如果你还不确定自己的Spring Boot应用是否存在Thymeleaf注入风险,或想为网站加上一道主动防御屏障,欢迎联系主机吧。我们提供免费安全评估和配置指导。


主机吧 | 百度云防护官方合作伙伴
提供WAF接入、高防CDN、高防IP、高防服务器、SSL证书一站式服务
让每一次表达式注入都无处遁形,让每一台Java服务器都稳如磐石。

给TA打赏
共{{data.count}}人
人已打赏
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧