用于分析CVE-2025-55182 (React2Shell)的学术实验室,包含存在漏洞和已修补的React Server Components环境、漏洞利用Shell、自动化评估场景以及全面的安全报告。
本仓库包含一个用于在受控 React Server Components 环境中分析 CVE-2025-55182 的本地学术实验室。该实验室模拟了该漏洞、其利用方式以及应用补丁后的效果。
app/vulnerable/:存在漏洞的 React 应用程序配置文件。
src/framework/entry.rsc.tsx:包含 不安全的反序列化 点,其中 __flight_action 负载通过 execSync() 执行。[email protected] 的行为。app/patched/:已打补丁的 React 应用程序配置文件。
src/framework/entry.rsc.tsx:包含 缓解逻辑,在反序列化之前以 403 响应阻止 __flight_action 负载。infra/:用于隔离执行的 Docker 配置。
docker-compose.yml:启动存在漏洞(端口 3100)和已打补丁(端口 3200)的两个配置文件。scripts/:自动化与利用脚本。
exploit-shell.ps1:一个 交互式利用 Shell,利用该漏洞提供模拟的远程终端(root@container$)。run-scenarios.ps1:用于执行 tests/run-scenarios.mjs 中自动化评估测试的包装脚本。start-lab.ps1:用于快速启动 Docker Compose 环境的辅助脚本。stop-lab.ps1:用于关闭并清理 Docker Compose 环境的辅助脚本。demo-lab.ps1:替代演示脚本,可在本地(无需 Docker)运行两个应用,并发送一系列测试请求。report/:包含最终分析报告。
findings.md:全面的安全报告,涵盖攻击链、CVSS 分析、评估指标和缓解建议。CSE472_ProjectProposal_Revised.md:修订后的项目提案和方法文档。tests/:自动化评估。
run-scenarios.mjs:一个 Node.js 脚本,针对两个配置文件运行正常、可疑和利用场景,计算成功率和检测率。logs/:遥测输出。
vulnerable-requests.log 和 patched-requests.log:存储详细的请求跟踪信息,包括用于分析的 suspiciousReasons。如果您从 GitHub 下载了此项目的 .zip 文件,请按照以下步骤在本地计算机上运行实验室并与漏洞模拟进行交互。
关于 PowerShell 执行策略的说明: 如果在运行
.ps1文件时遇到提示无法加载或未进行数字签名的错误,您需要为当前会话绕过执行策略。在执行脚本之前,请在 PowerShell 窗口中运行以下命令:Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass(由于作用域为“Process”,您必须在 每个新建的 PowerShell 窗口或标签页 中再次运行此命令!)
将 .zip 文件解压到您想要的文件夹。打开一个 PowerShell 窗口,并导航到解压后的项目文件夹:
cd path\to\extracted\folder
我们使用 Docker 来安全隔离存在漏洞的应用程序。使用提供的辅助脚本启动容器:
.\scripts\start-lab.ps1
(或者,您可以手动运行 cd infra; docker-compose up --build -d)
启动后:
http://localhost:3100http://localhost:3200在环境运行后,您可以通过启动我们的模拟利用 Shell 来测试远程代码执行(RCE)漏洞。打开一个新的 PowerShell 标签页/窗口并运行:
.\scripts\exploit-shell.ps1
此脚本充当攻击者,向 .rsc 端点发送精心构造的负载。尝试运行如下命令:
whoamils /workspaceenvcat /etc/passwd要测试已打补丁的版本:
.\scripts\exploit-shell.ps1 -Target "http://localhost:3200"
您会注意到已打补丁的版本会阻止该请求并返回 [BLOCKED] 消息。
要生成评估指标(成功率、检测率),请运行 Node.js 测试脚本:
node .\tests\run-scenarios.mjs
(或者使用包装脚本:.\scripts\run-scenarios.ps1)
这会将摘要输出到控制台,并将详细的 JSON 报告保存到 tests/results/scenario-report.json。
实验完成后,您可以安全关闭容器以释放资源:
.\scripts\stop-lab.ps1