在 Eventin WordPress 插件(拥有 10,000+ 活跃安装)中存在未经身份验证的 PII 泄露 和 订单伪造。一个公开的 REST 端点向任何访问者分发 wp_rest nonce,三个下游权限回调将该 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
| 字段 | 值 |
|---|---|
| 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 |
以下三个问题组合在一起,构成了一个完整的授权绕过:
core/Admin/hooks.php(第 68–77 行)注册了 /wp-json/eventin/v1/nonce,其 permission_callback => '__return_true',并向任何未经身份验证的调用者返回一个新生成的 wp_rest nonce。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 行)— 仅使用 wp_verify_nonce(...)。OrderController::get_item(第 310–317 行)通过顺序的 WordPress 文章 ID 加载任意订单,且不进行所有权验证;/book-seats(第 129–137 行)使用 permission_callback => function() { return true; }(完全没有身份验证)。端到端来看,四个未经身份验证的请求就足以导出所有客户订单(完整姓名、电子邮件、电话号码、支付方式、参会者名单),并伪造新订单。完整的技术分解见 ADVISORY.md,可复现的 PoC 见 poc/poc-eventin.sh。
将 wp-event-solution 更新到 4.1.9 或更高版本。对于旧版本,除了禁用插件或在 Web 服务器 / WAF 层阻止受影响的 REST 路由(/wp-json/eventin/v1/nonce、/wp-json/eventin/v2/orders*、/wp-json/eventin/v2/payments、/wp-json/eventin/v2/orders/book-seats)之外,没有其他版本内可用的规避方法。
.
├── README.md 本文件
├── ADVISORY.md 完整技术公告 + 代码审查
├── LICENSE MIT
├── poc/
│ └── poc-eventin.sh 针对本地实验环境的 4 步 bash PoC
└── screenshots/
├── poc1-idor-pii-leak.png IDOR 读取订单 #21 并获取完整 PII
├── poc2-no-nonce-blocked.png 相同请求不带 nonce → 401
└── poc3-fake-order-created.png 未经身份验证的 POST 创建伪造订单
| 日期 | 事件 |
|---|---|
| 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 | 本仓库发布 |
本材料出于防御和教育目的发布——旨在帮助 WordPress 网站运营者识别风险暴露,帮助插件作者避免同样的错误(将 CSRF nonce 视为身份验证),并记录权限回调中 || 短路导致授权机制失效的真实示例。请勿对您不拥有或未经明确书面授权测试的系统运行 PoC。