
CVE-2026-40776 — Нарушенный контроль доступа + IDOR в WordPress Eventin (wp-event-solution) <= 4.1.8
Неаутентифицированное раскрытие PII и подделка заказов в WordPress-плагине Eventin (более 10 000 активных установок). Публичная REST-конечная точка выдаёт nonce wp_rest любому посетителю, а три последующих permission-callback'а принимают этот nonce как замену аутентификации, полностью обрушивая авторизацию на всех конечных точках заказов клиентов.
Полное техническое описание: https://lorenzofradeani.com/en/blog/cve-2026-40776 Бюллетень Patchstack: https://patchstack.com/database/wordpress/plugin/wp-event-solution/vulnerability/wordpress-eventin-plugin-4-1-8-broken-access-control-vulnerability
Три проблемы в совокупности приводят к полному обходу авторизации:
core/Admin/hooks.php (строки 68–77) регистрирует маршрут /wp-json/eventin/v1/nonce с permission_callback => '__return_true' и возвращает только что созданный nonce wp_rest любому неаутентифицированному вызывающему.core/Order/ принимают этот nonce как единственную проверку авторизации:
OrderController::get_item_permissions_check (строки 146–148) — current_user_can(...) || wp_verify_nonce(...); из-за || одного nonce достаточно.OrderController::create_item_permissions_check (строки 476–478) — только wp_verify_nonce(...).PaymentController::create_payment_permission_check (строки 66–70) — только .В целом, четырёх неаутентифицированных запросов достаточно, чтобы выгрузить все заказы клиентов (полные имена, электронные адреса, номера телефонов, способы оплаты, список участников) и подделать новые заказы. Полный технический разбор см. в ADVISORY.md, а воспроизводимый PoC — в poc/poc-eventin.sh.
Обновите wp-event-solution до 4.1.9 или новее. Для более старых версий не существует обходного пути в рамках самой версии — кроме отключения плагина или блокировки затронутых REST-маршрутов (/wp-json/eventin/v1/nonce, /wp-json/eventin/v2/orders*, /wp-json/eventin/v2/payments, /wp-json/eventin/v2/orders/book-seats) на уровне веб-сервера или WAF.
.
├── README.md this file
├── ADVISORY.md full technical advisory + code review
├── LICENSE MIT
├── poc/
│ └── poc-eventin.sh 4-step bash PoC against a local lab
└── screenshots/
├── poc1-idor-pii-leak.png IDOR read of order #21 with full PII
├── poc2-no-nonce-blocked.png same request without nonce → 401
└── poc3-fake-order-created.png unauthenticated POST creating a fake order
Этот материал публикуется в защитных и образовательных целях — чтобы помочь операторам сайтов на WordPress выявить угрозу, помочь авторам плагинов избежать той же ошибки (использования CSRF-nonce как аутентификации) и задокументировать реальный пример того, как сокращённое вычисление || в permission-callback обрушивает авторизацию. Не запускайте PoC против систем, которыми вы не владеете или на тестирование которых у вас нет явного письменного разрешения.
| Поле | Значение |
|---|
| CVE | CVE-2026-40776 |
| Patchstack PSID | 85de025d71e7 |
| CWE | CWE-862 — Отсутствие авторизации |
| CVSS v3.1 | 7.5 (ВЫСОКИЙ) |
| Плагин | Eventin — Календарь событий, бронирование мероприятий, билеты и регистрация (wp-event-solution) |
| Затронутые версии | <= 4.1.8 |
| Исправлено в | 4.1.9 |
| Активных установок | 10,000+ |
| Требуется аутентификация | Нет (без аутентификации) |
| Взаимодействие с пользователем | Нет |
| Сообщил | Lorenzo Fradeani — независимый исследователь безопасности |
| Координация | Patchstack |
| Публичное раскрытие | 2026-04-29 |
wp_verify_nonce(...)OrderController::get_item (строки 310–317) загружает любой заказ по последовательному ID записи WordPress без проверки принадлежности, а /book-seats (строки 129–137) использует permission_callback => function() { return true; } (вообще без аутентификации).| Дата | Событие |
|---|
| 2026-03-10 | Отправлено в Patchstack |
| 2026-04-07 | Разработчик выпускает Eventin 4.1.9 (исправление) |
| 2026-04-13 | Этап координации (Patchstack) |
| 2026-04-29 | Публичное раскрытие (бюллетень Patchstack) |
| 2026-05-01 | Сторонние трекеры подхватывают (WP-Firewall, Managed-WP, SolidWP) |
| 2026-05-04 | Опубликован этот репозиторий |