SpringBoot Gateway EL表达式漏洞分析

💡 原文中文,约2100字,阅读约需5分钟。
📝

内容提要

本文分析SpringBoot Gateway的EL表达式漏洞,攻击者通过向`/actuator/gateway/routes`接口发送恶意JSON,利用SpEL表达式执行系统命令(如`whoami`),再调用`refresh`接口触发,实现远程代码执行。文章还提及内存马技术,并附有漏洞复现的HTTP请求示例。

🔎

延伸解读

漏洞触发链路

攻击者先向`/actuator/gateway/routes`接口提交包含恶意SpEL表达式的路由定义,再调用`/actuator/gateway/refresh`触发刷新,使表达式在网关处理请求时执行。整个过程需要Actuator端点暴露且未授权,否则无法利用。

利用条件与风险

该漏洞利用依赖Actuator的`gateway`端点可访问,且网关路由可被动态修改。若生产环境未对Actuator端点进行鉴权或网络隔离,攻击者可直接构造恶意路由实现远程代码执行,风险极高。

防护建议

建议关闭不必要的Actuator端点,或对`/actuator`路径进行严格的访问控制,如使用Spring Security或网络策略限制来源IP。同时,升级到已修复该漏洞的Spring Cloud Gateway版本,避免使用存在缺陷的版本。

Q&A

SpringBoot Gateway的EL表达式漏洞是什么?

该漏洞是SpringBoot Gateway中通过Actuator的gateway端点,利用SpEL表达式注入实现远程代码执行的安全漏洞。攻击者可以构造恶意JSON请求,在路由过滤器中注入SpEL表达式,从而执行任意系统命令。

如何复现SpringBoot Gateway的EL表达式漏洞?

复现步骤:1. 向`/actuator/gateway/routes/hacktest`发送POST请求,在`filters`的`AddResponseHeader`参数中注入SpEL表达式,例如执行`whoami`命令;2. 调用`/actuator/gateway/refresh`刷新路由;3. 通过GET请求`/actuator/gateway/routes/hacktest`查看命令执行结果;4. 最后删除路由并再次刷新。

SpringBoot Gateway EL表达式漏洞的利用条件是什么?

利用条件包括:1. 目标应用启用了Spring Boot Actuator;2. Actuator的gateway端点(如`/actuator/gateway/routes`)可被外部访问;3. 应用使用Spring Cloud Gateway,且版本存在该漏洞。

SpringBoot Gateway EL表达式漏洞有什么危害?

攻击者可以利用该漏洞在目标服务器上执行任意系统命令,可能导致服务器被完全控制、数据泄露、内网渗透等严重后果。

如何防御SpringBoot Gateway的EL表达式漏洞?

防御措施包括:1. 升级Spring Cloud Gateway到修复版本;2. 禁用或限制Actuator端点的外部访问;3. 对Actuator端点进行认证和授权;4. 如果不需要,关闭gateway端点。

SpringBoot Gateway EL表达式漏洞与内存马有什么关系?

文章提到内存马技术,但未详细说明。通常,攻击者可能利用该漏洞注入内存马,实现持久化控制,但具体细节未在文中展开。

🏷️

标签

➡️

继续阅读