Kimdir01/eventum-multi-vuln-cve

GitHub: Kimdir01/eventum-multi-vuln-cve

针对 PHP 问题跟踪系统 Eventum 的多漏洞 PoC 报告,涵盖未授权 SCM Webhook、XSS、CSRF、文件上传等 24 个安全问题。

Stars: 0 | Forks: 0

# GitHub 安全公告:Eventum — 多重漏洞(未授权 SCM Webhook、XSS、CSRF、文件上传) ## 公告信息 | 字段 | 值 | |-------|-------| | **严重程度** | 严重 / 高危 | | **CWE** | CWE-306 (缺少认证) / CWE-79 (XSS) / CWE-434 (无限制文件上传) / CWE-352 (CSRF) | | **CVSS v3.1** | 8.6 (未授权 SCM) / 8.2 (反射型 XSS) / 8.0 (CSRF) / 7.5 (文件上传) | | **CVSS 向量** | AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:H/A:N | ## 摘要 Eventum(由 MariaDB Corporation 开发的专业 PHP 问题跟踪系统)包含 24 个漏洞,包括:(1) 未授权 SCM webhook endpoint 允许注入伪造 commit,(2) 通过 JSONP callback 导致反射型 XSS,(3) 没有扩展名验证的任意文件上传,(4) 15+ 个 controller 缺乏 CSRF 保护,(5) 使用 MD5 的弱密码重置 token,(6) auth cookie 中的不安全反序列化。 ## 漏洞详情 ### 受影响的 Package/Repository - **Repository:** `eventum/eventum` - **受影响版本:** 当前版本 - **修复版本:** 无 (0-day) **Commit Hash (已审计):** `f2007a181e422d3f98dd1ceb5f13103d37c343ab` ## CVE-REQUEST-001:未授权 SCM Webhook (CVSS 8.6) **文件:** `res/packages/security.yml`,第 57 行 ``` - { path: ^/scm_ping, roles: IS_AUTHENTICATED_ANONYMOUSLY } ``` **文件:** `src/Controller/ScmPingController.php`,第 24-74 行 `/scm_ping` 处的 SCM webhook 没有任何认证。SCM adapter 仅检查简单的请求属性: - Gitlab:检查是否存在 `X-Gitlab-Event` header(第 46 行) - Standard:检查 `scm=svn` 或 `scm=git` GET param(第 38 行) - CVS:检查 `scm=cvs` GET param(第 36 行) **PoC:** ``` # 注入 fake commits curl -X POST "http://target/scm_ping.php?scm=git" \ -H "Content-Type: application/json" \ -d '{"commits":[{"id":"abc123","message":"backdoor","author":"attacker"}]}' ``` 没有 HMAC 验证,没有 IP 白名单,没有共享密钥。攻击者可以伪造 commit 记录,将虚假的 check-in 与 issue 关联,并污染 SCM 历史。 ## CVE-REQUEST-002:通过 JSONP Callback 导致的反射型 XSS (CVSS 8.2) **文件:** `src/Controller/RemoteDataController.php`,第 123-124 行 ``` $this->callback = (string) $request->query->get('callback'); // ... echo $this->callback, '(', json_encode($res), ')'; ``` 典型的 JSONP 注入。`$this->callback` 直接取自 `$_GET['callback']`,没有任何验证。 **PoC:** ``` http://target/get_remote_data.php?callback=alert(document.cookie) ``` ## CVE-REQUEST-003:任意文件上传 — 无扩展名验证 (CVSS 7.5) **文件:** `src/Attachment/AttachmentManager.php`,第 89-99 行 ``` $filename = $files['name'][$i]; $blob = file_get_contents($files['tmp_name'][$i]); $iaf_ids[] = Attachment::create($filename, $files['type'][$i], $blob)->id; ``` 没有扩展名白名单,没有针对实际文件内容的 MIME 验证。仅执行了 Unicode 归一化。用户可以上传 `.php`、`.phtml`、`.htaccess` 文件。如果使用本地文件系统 adapter,文件将被写入 `APP_PATH/var/storage/`。 ## CVE-REQUEST-004:所有更改状态操作存在 CSRF (CVSS 8.0) 存在 `CsrfHelper`,但仅有 2 个 controller(ProjectsController、UsersController)使用。所有其他 15+ 个 controller 均缺少 CSRF 保护: ``` // In 15+ controllers: // No CsrfHelper check before processing state changes ``` **缺少 CSRF 的受影响操作:** - Issue 关闭 (`CloseController`) - Issue 更新 (`UpdateController`) - 发布 note (`PostNoteController`) - 发送电子邮件 (`SendController`) - 文件上传 (`FileUploadController`) - 访问级别更改 (`AccessController`) - 时间跟踪 - 电话呼叫 - 所有管理 CRUD 操作 ## CVE-REQUEST-005:弱密码重置 (MD5 + 计时侧信道) (CVSS 6.5) **文件:** `lib/eventum/class.user.php`,第 337、372 行 ``` $hash = md5($full_name . $usr_email . Auth::privateKey()); ``` MD5 在密码学上已被攻破。token 使用可预测的输入(full_name、email)+ 私钥生成。验证使用了 `!=` 非常量时间比较。 ## 其他发现(共 24 项): | # | 漏洞 | CVSS | 需要认证 | |---|--------------|------|---------------| | H-5 | Smarty 模板含有未转义的 $smarty.get.* | 7.6 | 否 | | H-6 | Auth cookie — 不安全反序列化 | 5.3 | 否* | | H-7 | HTTP Basic Auth 发送至任何后端 | 5.0 | 否 | | H-8 | 通过 filetype 进行的 Content-Type header 注入 | 5.0 | 是 | | H-9 | SpellCheckController 中的 Shell 执行 | 3.1 | 是 | | H-10 | Cookie 缺少 HttpOnly/SameSite | 5.4 | N/A | | H-11 | 匿名用户自动登录绕过 | 6.5 | 否 | | H-12 | 从 config 进行动态类实例化 | 4.4 | Admin | | H-13 | 明文密码生成与电子邮件发送 | 5.9 | 否 | | H-14 | 未授权响应中的异常详情 | 4.3 | 否 | | M-1 | customer.php 中通过 $_REQUEST['page'] 引发的 LFI | 5.3 | 否 | | L-1 | 会话固定(登录时未执行 regenerate_id) | 4.2 | 否 | | L-2 | 通过 MD5 生成的弱 auth 私钥 | 2.6 | N/A | | L-3 | API token 使用 MediumStrengthGenerator | 2.6 | N/A | ## 影响 - 通过未授权 webhook 进行**虚假 SCM 历史注入** - 通过 JSONP 反射型 XSS 进行**会话劫持** - 配置不当的服务器因任意文件上传而具有**RCE 潜在风险** - 所有 admin 操作存在 CSRF 导致**应用程序完全被接管** - 弱密码重置 token 导致**账户接管** - cookie 不安全反序列化导致**认证绕过** ## 补丁 / 修复 1. 为 SCM ping endpoint 添加 HMAC 签名验证 + IP 白名单 2. 使用正则表达式 `[a-zA-Z0-9._]+` 验证 JSONP callback 3. 为文件上传添加扩展名白名单(拦截 `.php`、`.phtml`、`.htaccess`) 4. 为所有更改状态的 controller 添加 CsrfHelper 5. 将密码重置 token 的 MD5 替换为 HMAC-SHA256 6. 登录后添加 `session_regenerate_id(true)` 7. 将 `['allowed_classes' => false]` 传递给 `unserialize()` 8. 添加 HttpOnly、Secure、SameSite=Lax cookie 属性 ## 披露时间线 - **2026-06-28:** Fatullayev Asadbek (Kimdir01) 发现了全部 24 个漏洞 - **TBD:** 报告给 Eventum 维护者 - **TBD:** 通过 GitHub 请求 CVE - **TBD:** 发布安全公告 ## 致谢 - 发现者:Fatullayev Asadbek | GitHub:Kimdir01 - 独立安全研究员 ## 参考 - CWE-306:关键功能缺少认证 - CWE-79:跨站脚本攻击 - CWE-434:无限制文件上传 - CWE-352:跨站请求伪造 - CWE-327:弱密码学算法
标签:CISA项目, OpenVAS, PHP, PoC, 暴力破解, 漏洞公告, 防御加固