CVE-2024-46986 – Camaleon CMS任意文件写入漏洞导致RCE
概述
CVE-2024-46986是一个影响Camaleon CMS 2.8.2之前版本的关键任意文件写入漏洞。由于输入验证不当,该漏洞允许经过身份验证的攻击者向文件系统的任意路径写入文件,在特定条件下可实现远程代码执行。
- CVE ID: CVE-2024-46986
- 严重等级: 严重
- CVSS 评分: 9.9 (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H)
- EPSS 评分: 86.38%
- 发布日期: 2024年9月18日
- 受影响版本: <= 2.8.2
- 已修复版本: 2.8.2+
技术分析
该漏洞存在于MediaController的上传方法中,其中folder参数未经适当的路径验证就直接传递给文件处理逻辑。通过使用目录遍历序列(如../../)构造路径,攻击者可以突破预期的上传目录,将恶意文件写入Web根目录内的任意位置,甚至写入Rails初始化器路径,例如:
|
|
如果此类文件被正确放置,将在下一次应用程序重启或重新加载时执行,从而以Web服务器的权限实现完整的远程代码执行(RCE)。
利用条件
- 有效的用户凭据(经过身份验证的低权限用户访问)
- 能够上传文件(无文件类型限制)
- 文件系统权限允许写入目标路径
- Web服务器重启以触发执行(如果目标是Rails初始化器)
漏洞代码片段
在这段代码中,params[:folder]未经清理直接传递给upload_file方法。这一疏忽允许经过身份验证的攻击者操纵folder参数来遍历目录,并将文件写入服务器上的任意位置,可能导致远程代码执行。
|
|
利用步骤
公开的PoC可在https://github.com/vidura2/CVE-2024-46986 获取。该PoC通过以下步骤自动化利用过程:
- 身份验证: 使用有效凭据登录Camaleon CMS实例。
- 制作恶意文件: 准备包含恶意代码的Ruby脚本。
- 上传文件: 利用易受攻击的上传方法将文件放置到敏感目录,如
config/initializers/。 - 触发执行: 重启应用程序或等待重启发生,导致恶意代码执行。
缓解措施
- 升级: 将Camaleon CMS更新到2.8.2或更高版本,此问题已得到解决。
- 限制访问: 将CMS的访问权限限制为受信任的用户。
- 监控日志: 定期审查服务器日志以发现可疑活动。
- 实施WAF: 使用Web应用程序防火墙检测和阻止恶意请求。
此漏洞没有已知的变通方案;升级是推荐的行动方案。