CVE-2026-90817 — REDCap Survey Passthru + Data Import RCE
Python 3 чекер (и настраиваемый эксплойт-хук) для CVE-2026-90817 (Securifera / Ryan Wincey).
| |
|---|
| Продукт | REDCap (Vanderbilt) |
| Уязвимые версии | ≥ 13.3.0 (до патча в ветке) |
| Исправлено | 16.0.49 LTS, 17.3.10 LTS, 17.4.4 Standard+ |
| CVSS 3.1 | 9.8 Критический |
| Аутентификация | Не требуется — для полной цепочки нужен валидный публичный хеш опроса (s=) |
| CWE | CWE-73, CWE-94 |
Краткое описание
Из контекста публичного опроса злоумышленники могут злоупотребить маршрутизацией __passthru (passthrough опроса) для доступа к непредусмотренным контроллерам (например, Data Import), а затем вызвать небезопасную обработку путей к файлам / потоков → RCE.
Securifera пока не опубликовала полную HTTP-цепочку (на момент публикации репозитория нет публичного PoC на GitHub / Exploit-DB).
exploit_chain.example.json — только заглушка (предполагаемые маршруты/параметры). Она не приведёт к RCE.
Исследовательский прогон: --allow-placeholder-chain (отправляет запросы; ожидается неудача).
Требования
- Python 3.9+
pip install -r requirements.txt
Использование
pip install -r requirements.txt
# Single target (survey hash required for survey + passthru tests)
python poc.py -u https://redcap.example.edu/redcap --hash Ab12Xy34Zq --mode check
# Shorthand: base|hash
python poc.py -u "https://redcap.example.edu/redcap|Ab12Xy34Zq" --mode check
# Mass check (one URL per line, optional |hash)
python poc.py --list targets.example.txt --mode check -j 20 -q
# Live stream: every host + test summary (recommended for long lists)
python poc.py --list targets.example.txt --mode check -j 20 -q --flow
# Exploit (after advisory → real exploit_chain.json)
cp exploit_chain.example.json exploit_chain.json # edit with real values
python poc.py -u https://redcap.example.edu/redcap --hash XXX --mode exploit -c id \
--chain exploit_chain.json
Экспорт FOFA → список целей
# Place export as fofa_csv_7561.csv (or any fofa*.csv), then:
python fofa_to_list.py
# Writes list.txt (gitignored) and normalizes the CSV with a url column
python poc.py --list list.txt --mode check -j 20 -q --flow
Формат списка целей
https://uni.edu/redcap|SurveyHash10
https://uni.edu/redcap?s=SurveyHash10
https://uni.edu/redcap
Без хеша check всё ещё может определить фингерпринт REDCap и отметить диапазоны версий, но не может проверить опрос или запустить пробы passthru.
Скриншот (массовая проверка --flow)

Опции CLI
Вывод (массовая проверка)
| Файл | Содержимое |
|---|
cve_2026_90817_results.jsonl | JSON по каждой цели |
hits.txt | Кандидаты (exploitable_candidate) |
Распространённые значения status (check)
Ограничения
- Exploit требует точного маршрута
__passthru и имён параметров от Securifera/вендора; значения по умолчанию — заглушки.
- Многие экземпляры скрывают строки версий;
vulnerable_version может быть null.
- Строки FOFA
title="REDCap" часто не содержат хешей опросов — для предусловий CVE нужен s= из публичных ссылок.
- Только авторизованное тестирование.
Подсказки FOFA / обнаружения
title="REDCap"
body="redcap_version"
body="/surveys/?s="
Структура репозитория
.
├── poc.py
├── fofa_to_list.py
├── exploit_chain.example.json
├── poc.png # example --flow terminal output
├── requirements.txt
├── targets.example.txt
├── README.md
├── LICENSE
└── .gitignore
Ссылки
Правовая информация
Только для авторизованного тестирования безопасности. Вы несёте ответственность за соблюдение применимых законов и правил программ.