CVE-2026-90817 — REDCap Survey Passthru + Data Import RCE
Vérificateur Python 3 (et hook d'exploit configurable) pour CVE-2026-90817 (Securifera / Ryan Wincey).
| |
|---|
| Produit | REDCap (Vanderbilt) |
| Affecté | ≥ 13.3.0 (jusqu'au correctif de branche) |
| Corrigé | 16.0.49 LTS, 17.3.10 LTS, 17.4.4 Standard+ |
| CVSS 3.1 | 9.8 Critique |
| Auth | Aucune — hash de sondage public valide (s=) requis pour la chaîne complète |
| CWE | CWE-73, CWE-94 |
Résumé
Depuis un contexte de sondage public, les attaquants peuvent abuser du routage __passthru (passthrough de sondage) pour atteindre des contrôleurs non prévus (par ex. Data Import), puis déclencher une gestion non sécurisée des chemins de fichiers / flux → RCE.
Securifera n'a pas encore publié la chaîne HTTP complète (aucun PoC public sur GitHub / Exploit-DB au moment de la publication du dépôt).
exploit_chain.example.json est uniquement un placeholder (routes/paramètres devinés). Il ne provoquera pas de RCE.
Essai à blanc de recherche : --allow-placeholder-chain (envoie des requêtes ; échec attendu).
Prérequis
- Python 3.9+
pip install -r requirements.txt
Utilisation
pip install -r requirements.txt
# Cible unique (hash de sondage requis pour les tests survey + passthru)
python poc.py -u https://redcap.example.edu/redcap --hash Ab12Xy34Zq --mode check
# Raccourci : base|hash
python poc.py -u "https://redcap.example.edu/redcap|Ab12Xy34Zq" --mode check
# Vérification de masse (une URL par ligne, |hash optionnel)
python poc.py --list targets.example.txt --mode check -j 20 -q
# Flux en direct : chaque hôte + résumé des tests (recommandé pour les longues listes)
python poc.py --list targets.example.txt --mode check -j 20 -q --flow
# Exploit (après advisory → exploit_chain.json réel)
cp exploit_chain.example.json exploit_chain.json # éditer avec les vraies valeurs
python poc.py -u https://redcap.example.edu/redcap --hash XXX --mode exploit -c id \
--chain exploit_chain.json
Export FOFA → liste de cibles
# Placer l'export sous fofa_csv_7561.csv (ou tout fofa*.csv), puis :
python fofa_to_list.py
# Écrit list.txt (gitignored) et normalise le CSV avec une colonne 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
Sans hash, le check peut toujours identifier REDCap et signaler les fenêtres de version, mais ne peut pas valider le sondage ni exécuter les sondes passthru.
Capture d'écran (--flow vérification de masse)

Options CLI
Sortie (vérification de masse)
| Fichier | Contenu |
|---|
cve_2026_90817_results.jsonl | JSON par cible |
hits.txt | Candidats (exploitable_candidate) |
Valeurs status courantes (check)
Limitations
- L'exploit nécessite la route
__passthru exacte et les noms de paramètres de Securifera/vendor ; les valeurs par défaut sont des placeholders.
- De nombreuses instances masquent les chaînes de version ;
vulnerable_version peut être null.
- Les lignes FOFA
title="REDCap" manquent souvent de hash de sondage — les préconditions de la CVE nécessitent s= à partir de liens publics.
- Tests autorisés uniquement.
Indices FOFA / découverte
title="REDCap"
body="redcap_version"
body="/surveys/?s="
Arborescence du dépôt
.
├── poc.py
├── fofa_to_list.py
├── exploit_chain.example.json
├── poc.png # exemple de sortie terminal --flow
├── requirements.txt
├── targets.example.txt
├── README.md
├── LICENSE
└── .gitignore
Références
Légal
Pour des tests de sécurité autorisés uniquement. Vous êtes responsable du respect des lois applicables et des règles du programme.