Kimdir01/freeitsm-multi-vuln-cve

GitHub: Kimdir01/freeitsm-multi-vuln-cve

针对 FreeITSM IT 服务管理系统的多漏洞 PoC 项目,披露并复现了包括 ZIP Slip RCE、默认管理员凭证、未授权 debug 接口及命令注入在内的 30 余个安全漏洞。

Stars: 0 | Forks: 0

# GitHub 安全公告:FreeITSM — 多个严重漏洞(ZIP Slip RCE、默认管理员、SSRF、RCE) ## 公告信息 | 字段 | 值 | |-------|-------| | **严重程度** | 严重 | | **CWE** | CWE-23 (路径遍历) / CWE-798 (硬编码凭证) / CWE-918 (SSRF) / CWE-78 (命令注入) | | **CVSS v3.1** | 9.8 (默认管理员) / 9.4 (无需认证的 Debug 接口) / 8.8 (ZIP Slip RCE / 命令注入) | | **CVSS 向量** | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H | ## 概述 FreeITSM (IT 服务管理系统) 包含多个严重漏洞:(1) 可通过 Web 访问的 SQL 文件获取默认管理员凭证 `admin:freeitsm`,(2) 通过上传 SCORM 包利用已认证的 ZIP slip 路径遍历实现 RCE,(3) 未经认证的 debug 接口暴露了数据库查询,(4) Intune worker 中通过 `popen()` 实现的命令注入,(5) OIDC discovery 中的 SSRF,以及另外 25+ 个漏洞。 ## 漏洞详情 ### 受影响的包/代码库 - **代码库:** FreeITSM - **受影响版本:** 当前版本 - **修复版本:** N/A (0-day) **提交哈希 (已审计):** `4906152565acdb3e7c9197051753a27f0638bae6` ## CVE-REQUEST-001:Web 可访问的 SQL 文件中的默认管理员凭证 (CVSS 9.8) **文件:** `database/freeitsm.sql`,第 3169-3174 行 ``` -- Username: admin | Password: freeitsm INSERT INTO `analysts` (`username`, `password_hash`, ...) SELECT 'admin', '$2y$12$z9jzs9Sqol4i.ThVE/wwL.EzvbYtZrU0GHpzUJX7UC6ODp5h.q2U2', ... ``` 该 SQL 文件位于 webroot 下且没有任何访问限制。攻击者可以浏览 `/database/freeitsm.sql` 并获取默认管理员凭证。结合发现 H-1(任何经过认证的用户都可以执行任何操作),这将授予完整的系统访问权限。 ## CVE-REQUEST-002:ZIP Slip 路径遍历导致 RCE (CVSS 8.8) **文件:** `api/lms/courses.php`,第 57-62 行 ``` $zip = new ZipArchive(); $zip->open($file['tmp_name']); $zip->extractTo($contentDir); // NO PATH VALIDATION! $zip->close(); ``` `ZipArchive::extractTo()` 没有验证 zip 条目名称中是否包含 `../` 遍历序列。恶意的 SCORM 包可以将文件写入 Web 服务器具有写入权限的任意位置。 **PoC:** ``` import zipfile z = zipfile.ZipFile('evil.zip', 'w') z.writestr('../../config.php', '') # 另外: z.writestr('../../api/shell.php', '') z.close() # 通过 LMS course upload 上传。内容被提取到 webroot。 ``` ## CVE-REQUEST-003:未经认证的 Debug 接口 (CVSS 9.4) **文件:** `api/wiki/debug_get_files.php`,第 1-6 行 ``` session_start(['read_and_close' => true]); require_once '../../config.php'; require_once '../../includes/functions.php'; // NO $_SESSION['analyst_id'] CHECK! ``` 该脚本调用了 `session_start()` 但从未检查身份验证。它访问了数据库,输出了 SQL 查询,并显示了 PDO 错误消息。config.php 中的 `display_errors=1` 泄露了查询文本和内部数据。 **其他未经认证的 debug 接口:** - `api/knowledge/debug_send_share_email.php` — 相同的模式,泄露 OAuth token 和 Azure tenant ID ## CVE-REQUEST-004:Intune Worker 中通过 popen() 实现的命令注入 (CVSS 8.8) **文件:** `includes/intune.php`,第 525-532 行 ``` $cmd = sprintf('start /B "" "%s" "%s" %d', $phpExe, $worker, $jobId); $h = popen($cmd, 'r'); ``` 在 Windows 上,`$phpExe` 被加上了引号,但没有通过 `escapeshellarg()` 进行转义。PHP 二进制文件路径来自 `intune_php_exe` 系统设置,任何经过认证的分析师都可以通过 `api/settings/save_system_settings.php` 修改它(不需要管理员权限检查)。将其设置为带有 shell 元字符的路径会突破引号限制并执行任意命令。 ## 其他严重发现(总计 30+ 个): | # | 漏洞 | CVSS | 需要认证 | |---|--------------|------|---------------| | H-1 | 任何分析师都可以执行任何操作(无管理员角色检查) | 9.1 | 是 (任意) | | H-2 | KB 文章正文中的存储型 XSS (innerHTML) | 9.5 | 是 (作者) | | H-3 | 自助服务电子邮件正文中的存储型 XSS | 9.0 | 否 (电子邮件) | | H-4 | 通过绕过 safeEmailHtml() 实现的存储型 XSS | 9.0 | 否 (电子邮件) | | H-5 | OIDC discovery 测试中的 SSRF | 8.8 | 是 | | H-6 | 变更管理中无限制的文件上传 | 9.1 | 是 | | H-7 | 生产环境中 display_errors=1 | 7.5 | 否 | | H-8 | 全局设置 SSL_VERIFY_PEER=false | 6.8 | 否 | | H-9 | 错误消息中的 OAuth token | 8.2 | 否 | | H-10 | webroot 中的 .git 目录 | 8.6 | 否 | | H-11 | Docker 默认数据库密码 "freeitsm" | 7.5 | 否* | | M-1 | 分析师密码重置处的 CSRF | 8.8 | 否 (受害者) | | M-2 | 任何分析师都可以覆盖加密密钥 | 5.3 | 是 | | M-3 | Session cookie 缺少 HttpOnly/Secure/SameSite | 6.3 | N/A | ## 影响 - 通过默认管理员凭证实现**全系统沦陷** - 通过 ZIP Slip + 覆盖 config.php 实现**服务器上的 RCE** - **数据泄露** — 所有工单、KB 文章、用户数据被暴露 - 通过 SSRF 实现**内网访问** - 通过修改 SMTP 配置实现**电子邮件钓鱼** - 任何用户覆盖加密密钥导致**永久性数据丢失** ## 补丁 / 修复 1. 从 webroot 中删除 `database/freeitsm.sql` 或添加 `.htaccess` 拒绝访问 2. 在 ZIP 解压时针对基础目录验证 ZIP 条目路径 3. 在所有 debug 接口脚本中添加 `$_SESSION['analyst_id']` 检查 4. 在 `popen()`/shell 命令中的所有值上使用 `escapeshellarg()` 5. 实施适当的管理员角色授权(而不仅仅是 `isset($_SESSION['analyst_id'])`) 6. 为所有输出添加 `htmlspecialchars()`(尤其是电子邮件正文、KB 文章) 7. 设置 `display_errors=0` 和 `SSL_VERIFY_PEER=true` 8. 添加 CSRF token + SameSite cookie 属性 9. 通过 `.htaccess` 阻止对 `.git` 的访问 10. 更改默认的 Docker 凭证 ## 披露时间表 - **2026-06-28:** 所有漏洞由 Fatullayev Asadbek (Kimdir01) 发现 - **待定:** 报告给维护者 - **待定:** 申请 CVE - **待定:** 发布公告 ## 致谢 - 发现者:Fatullayev Asadbek | GitHub:Kimdir01 - 独立安全研究员 ## 参考 - CWE-798:硬编码凭证 - CWE-23:相对路径遍历 (ZIP Slip) - CWE-918:服务器端请求伪造 - CWE-78:操作系统命令注入 - CWE-306:缺失身份验证
标签:CISA项目, IT服务管理, PoC, 暴力破解, 漏洞披露, 请求拦截, 逆向工具