OpenEMR < 8.4.0 — CVE-2026-102940 (document write ACL) + пакет ACL 8.3.0
Суть
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.0 | 8.4.0 (2026-09-13) |
| Пакет ACL/XSS/CSRF выше | < 8.3.0 (типично) | 8.3.0 |
| CVE-2026-65983 | < 8.2.0 | 8.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).
Как исправить
- Внешний бэкап MySQL/MariaDB и каталога
sites/(документы, конфиги). Встроенный Administration → System → Backup снят с 8.3.0 — на него не опираться. - Ветка 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).
- Linux / Docker уже есть: официальный архив загрузок OpenEMR или Docker Hub
openemr/openemr; прогонsql_upgrade.php/ штатный Upgrade Guide. Non-Docker: после смены файлов — reload php-fpm/apache. - 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 остаётся уязвимым. - Экспозиция: официальный образ слушает 80/443 — не публиковать на
0.0.0.0в интернет; reverse-proxy + VPN/allowlist. Проверка:docker compose ps/ ports в compose. - После апгрейда: логин 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.