CVE-2024-46986 – Camaleon CMS任意文件写入漏洞导致远程代码执行

本文详细分析了CVE-2024-46986漏洞,该漏洞存在于Camaleon CMS 2.8.2之前版本中,允许认证攻击者通过目录遍历实现任意文件写入,最终在特定条件下达成远程代码执行。

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初始化器路径,例如:

1
config/initializers/malicious.rb

如果此类文件被正确放置,将在下一次应用程序重启或重新加载时执行,从而以Web服务器的权限实现完整的远程代码执行(RCE)。

利用条件

  • 有效的用户凭据(经过身份验证的低权限用户访问)
  • 能够上传文件(无文件类型限制)
  • 文件系统权限允许写入目标路径
  • Web服务器重启以触发执行(如果目标是Rails初始化器)

漏洞代码片段

在这段代码中,params[:folder]未经清理直接传递给upload_file方法。这一疏忽允许经过身份验证的攻击者操纵folder参数来遍历目录,并将文件写入服务器上的任意位置,可能导致远程代码执行。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
def upload(settings = {})
  params[:dimension] = nil

  if params[:skip_auto_crop].present?
    f = { error: 'File not found.' }

  if params[:file_upload].present?
    f = upload_file(params[:file_upload], 
    { folder: params[:folder], dimension: params['dimension'], formats: params[:formats], versions: params[:versions], thumb_size: params[:thumb_size] }.merge(settings))

  end

  [...]

end

利用步骤

公开的PoC可在https://github.com/vidura2/CVE-2024-46986 获取。该PoC通过以下步骤自动化利用过程:

  1. 身份验证: 使用有效凭据登录Camaleon CMS实例。
  2. 制作恶意文件: 准备包含恶意代码的Ruby脚本。
  3. 上传文件: 利用易受攻击的上传方法将文件放置到敏感目录,如config/initializers/
  4. 触发执行: 重启应用程序或等待重启发生,导致恶意代码执行。

缓解措施

  • 升级: 将Camaleon CMS更新到2.8.2或更高版本,此问题已得到解决。
  • 限制访问: 将CMS的访问权限限制为受信任的用户。
  • 监控日志: 定期审查服务器日志以发现可疑活动。
  • 实施WAF: 使用Web应用程序防火墙检测和阻止恶意请求。

此漏洞没有已知的变通方案;升级是推荐的行动方案。

参考

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计