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 (сквозной проход опроса) для доступа к непредусмотренным контроллерам (например, 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
# Одна цель (хеш опроса обязателен для тестов опроса + passthru)
python poc.py -u https://redcap.example.edu/redcap --hash Ab12Xy34Zq --mode check
# Сокращение: base|hash
python poc.py -u "https://redcap.example.edu/redcap|Ab12Xy34Zq" --mode check
# Массовая проверка (один URL на строку, опционально |hash)
python poc.py --list targets.example.txt --mode check -j 20 -q
# Живой поток: каждый хост + сводка тестов (рекомендуется для длинных списков)
python poc.py --list targets.example.txt --mode check -j 20 -q --flow
# Эксплойт (после advisory → реальный exploit_chain.json)
cp exploit_chain.example.json exploit_chain.json # отредактируйте реальными значениями
python poc.py -u https://redcap.example.edu/redcap --hash XXX --mode exploit -c id \
--chain exploit_chain.json
Экспорт FOFA → список целей
# Поместите экспорт как fofa_csv_7561.csv (или любой fofa*.csv), затем:
python fofa_to_list.py
# Записывает list.txt (в gitignore) и нормализует CSV с колонкой url
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)
Ограничения
- Эксплойт требует точного маршрута
__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 # пример вывода терминала --flow
├── requirements.txt
├── targets.example.txt
├── README.md
├── LICENSE
└── .gitignore
Ссылки
Правовая информация
Только для авторизованного тестирования безопасности. Вы несёте ответственность за соблюдение применимых законов и правил программ.