невзлом

Важно · OpenEMR

OpenEMR < 8.4.0 — CVE-2026-102940 (document write ACL) + пакет ACL 8.3.0

· CVE-2026-102940, CVE-2026-115573, CVE-2026-103935, CVE-2026-103938, CVE-2026-104133, CVE-2026-104136, CVE-2026-104137, CVE-2026-65983, CVE-2026-103939, CVE-2026-104135, CVE-2026-103019, CVE-2026-103020, CVE-2026-103021, CVE-2026-104134, CVE-2026-104138, CVE-2026-104139

← Простая версия для всех

Суть

CVE-2026-102940 — missing authorization на write-пути документов (перенос/мутации): проверка доступа к документу/пациенту/категории на записи отсутствует, хотя на чтении IDOR-защита есть. Аутентифицированный пользователь с низкими правами переназначает документ на доступного пациента/категорию и забирает содержимое через нормальный read-path. CVSS 3.1 9.6 (CNA security-advisories@github.com / лента; в release notes оценки нет; вектор с PR:L, S:C). Ответ HTTP 403 после запроса не доказывает откат мутации.

В том же Security Fixes 8.4.0 (без деталей векторов): Critical RCE (ESign LFI-цепочка), Critical OneTimeAuth, unauthenticated SSRF и др. — апгрейд ≥8.4.0 закрывает и их.

Рядом в ленте 05.11.2026 (фиксировались к 8.3.0, если не указано иное): CVE-2026-115573 (8.1, fail-open dispatcher / CONTROLLER_ACL_MAP), CVE-2026-103935 (XSS 8.1), CVE-2026-103938 (CSRF void checkout 7.1), CVE-2026-104133/136/137 (7.1), CVE-2026-104134/135/138/139 (6.5 PHI), CVE-2026-103019/020/021 (4.3–5.3), CVE-2026-103939 (Weno 5.4), CVE-2026-65983 (FaxSMS staging decrypted docs in webroot по notes 8.2.0 / формулировка CNA в ленте, 8.2.0).

Затронуто и исправлено

CVE (фокус)Affected (CNA)Fixed
CVE-2026-102940< 8.4.08.4.0 (2026-09-13)
Пакет ACL/XSS/CSRF выше< 8.3.0 (типично)8.3.0
CVE-2026-65983< 8.2.08.2.0

Актуальный стабильный на 06.11.2026: 8.5.0 (дата в notes GitHub 2026-10-26; Published / downloads — 2026-10-27) — отдельный security-блок; для закрытия этой группы достаточно ≥8.4.0, операционно целиться в 8.5.0+.

Минимум runtime для 8.4.0: PHP 8.3+, MariaDB 10.11+, MySQL 8.4+. Ниже — апгрейд не встанет, сначала поднять стек (или уйти на официальный Docker).

Эксплуатация

  • KEV — нет. Vendor «exploited» в release notes — нет.
  • В ленте у части CVE poc_link: true — факт публичных материалов; ссылки и детали не публикуем.
  • Условие 102940: валидная сессия низкопривилегированного пользователя + доступность панели.

Как проверить

# UI: Help → About / Preferences → About OpenEMR (не Administration)
# код (подставьте корень инсталляции):
grep -E 'v_major|v_minor|v_patch' /path/to/openemr/version.php
# нужно: не ниже 8.4.0; предпочтительно 8.5.0+

Критерий закрытия 102940: установленная версия ≥ 8.4.0 после штатного upgrade (не только замена файлов без sql_upgrade).

Как исправить

  1. Внешний бэкап MySQL/MariaDB и каталога sites/ (документы, конфиги). Встроенный Administration → System → Backup снят с 8.3.0 — на него не опираться.
  2. Ветка XAMPP (Windows): OpenEMR 8.3.0+ на XAMPP не поддерживается (последний XAMPP с PHP 8.2 / MariaDB 10.4 ниже минимума). Сначала миграция на официальный Docker на текущей версии (не апгрейдить одновременно), затем апгрейд внутри Docker. Искать в wiki проекта: «XAMPP to Docker Migration», «OpenEMR Windows Upgrade» (прямые URL wiki/релизов не ставим: hop на GitHub Advisories с PoC).
  3. Linux / Docker уже есть: официальный архив загрузок OpenEMR или Docker Hub openemr/openemr; прогон sql_upgrade.php / штатный Upgrade Guide. Non-Docker: после смены файлов — reload php-fpm/apache.
  4. Docker prod: pin тега openemr/openemr:8.5.0 (или patch вроде 8.4.1), не latest/dev/next/flex* в бою; volume только на sites/ (+ ssl при необходимости); docker compose pull && docker compose up -d после бэкапа. Автообновлений нет — застрявший тег < 8.4.0 остаётся уязвимым.
  5. Экспозиция: официальный образ слушает 80/443 — не публиковать на 0.0.0.0 в интернет; reverse-proxy + VPN/allowlist. Проверка: docker compose ps / ports в compose.
  6. После апгрейда: логин admin + роль Front Office; smoke: документы, биллинг, портал (если включён). Кастомные модули — совместимость с 8.4/8.5 до prod.

Если обновить нельзя

Официального patch-only workaround в notes нет. Compensating: минимальный набор низкопривилегированных учёток; панель не в интернет (VPN/allowlist); WAF не заменяет ACL-фикс; отключить неиспользуемые custom modules (Weno/FaxSMS/DORN) снижают соседний риск, но не закрывают 102940. На XAMPP без миграции компенсирующие меры — только отсрочка.

Признаки взлома и что делать

IoC в notes нет. Аудит поведения: неожиданные переносы документов между картами/категориями, правки X12/insurance partners, массовые скачивания. Подозрение → изоляция, сохранение логов/БД, ротация паролей и API/OAuth клиентов, апгрейд, разбор доступов. Одного обновления после компрометации мало.

Источники

  • OpenEMR release notes 8.4.0 (2026-09-13), 8.3.0, 8.5.0 — без URL (страницы релизов и downloads дают hop на GitHub Security Advisories с PoC).
  • Docker Hub образ openemr/openemr (теги 8.4.x / 8.5.0) — имя образа текстом.
  • Wiki: «XAMPP to Docker Migration», «OpenEMR Windows Upgrade» — названиями без URL.
  • NVD/EUVD — номерами CVE без URL.