空安全意识,撸码一时手抖 elFinder-2.1.47代码执行漏洞-CVE-2019-9194详解
字数 1128 2025-08-29 08:32:09

elFinder-2.1.47远程代码执行漏洞(CVE-2019-9194)分析报告

漏洞概述

CVE-2019-9194是elFinder文件管理器2.1.47版本中存在的一个远程代码执行漏洞。该漏洞源于开发人员在处理图片旋转功能时,错误地使用了未经过滤的参数拼接系统命令,导致攻击者可以构造恶意请求执行任意代码。

受影响版本

elFinder 2.1.47及之前版本

漏洞背景

elFinder是一个用于Web的开源文件管理器,使用jQuery UI以JavaScript编写,灵感来源于Mac OS X的Finder程序。该项目在GitHub上有3195个star,使用范围较广。

漏洞分析

漏洞位置

漏洞位于php/elFinderVolumeDriver.class.php文件中的imgRotate方法。

漏洞成因

  1. 开发者虽然具备安全意识,在代码中使用了escapeshellarg()对参数进行过滤
  2. 但在实际使用时,错误地直接使用了未过滤的原始参数$path拼接命令
  3. 正确的做法应该是使用经过转义的$quotedPath变量

补丁分析

在2.1.48版本中修复了该漏洞,主要修改点:

  1. 使用$quotedPath替换原来的$path参数
  2. 添加--参数来结束选项处理,防止参数注入

漏洞利用链

  1. resize方法调用imgRotate方法
  2. imgRotate方法将可控的$work_path参数直接拼接到$cmds[]
  3. $cmds[]被遍历传入procExec执行
  4. procExec通过proc_open执行拼接后的命令

漏洞利用条件

  1. 目标服务器运行elFinder 2.1.47或更早版本
  2. 服务器上安装了exiftran工具(用于图片处理)

漏洞复现步骤

  1. 上传一个图片文件,文件名中包含恶意代码
  2. 获取上传图片的hash值
  3. 构造请求,对图片进行裁剪操作
  4. 在图片处理过程中,恶意文件名被解析执行

技术细节

关键代码片段

漏洞代码:

$quotedPath = escapeshellarg($path);
$cmds[] = $cmd . ' ' . $path;  // 错误地使用了未过滤的$path

修复后代码:

$quotedPath = escapeshellarg($path);
$cmds[] = $cmd . ' -- ' . $quotedPath;  // 使用过滤后的参数并添加--选项

命令注入防护

修复中添加的--参数是Unix/Linux系统中的标准选项,表示"选项结束",可以防止后续参数被解析为命令选项,有效防御参数注入攻击。

防御建议

  1. 立即升级到elFinder 2.1.48或更高版本
  2. 对所有用户输入进行严格的过滤和转义
  3. 使用参数化方式构建系统命令
  4. 实施最小权限原则,限制Web服务器的执行权限

总结

CVE-2019-9194是一个典型的开发疏忽导致的命令注入漏洞,展示了即使有安全意识,实现过程中的小错误也可能导致严重的安全问题。该案例强调了代码审查和自动化测试的重要性,特别是在处理用户输入和系统命令时。

elFinder-2.1.47远程代码执行漏洞(CVE-2019-9194)分析报告 漏洞概述 CVE-2019-9194是elFinder文件管理器2.1.47版本中存在的一个远程代码执行漏洞。该漏洞源于开发人员在处理图片旋转功能时,错误地使用了未经过滤的参数拼接系统命令,导致攻击者可以构造恶意请求执行任意代码。 受影响版本 elFinder 2.1.47及之前版本 漏洞背景 elFinder是一个用于Web的开源文件管理器,使用jQuery UI以JavaScript编写,灵感来源于Mac OS X的Finder程序。该项目在GitHub上有3195个star,使用范围较广。 漏洞分析 漏洞位置 漏洞位于 php/elFinderVolumeDriver.class.php 文件中的 imgRotate 方法。 漏洞成因 开发者虽然具备安全意识,在代码中使用了 escapeshellarg() 对参数进行过滤 但在实际使用时,错误地直接使用了未过滤的原始参数 $path 拼接命令 正确的做法应该是使用经过转义的 $quotedPath 变量 补丁分析 在2.1.48版本中修复了该漏洞,主要修改点: 使用 $quotedPath 替换原来的 $path 参数 添加 -- 参数来结束选项处理,防止参数注入 漏洞利用链 resize 方法调用 imgRotate 方法 imgRotate 方法将可控的 $work_path 参数直接拼接到 $cmds[] 中 $cmds[] 被遍历传入 procExec 执行 procExec 通过 proc_open 执行拼接后的命令 漏洞利用条件 目标服务器运行elFinder 2.1.47或更早版本 服务器上安装了exiftran工具(用于图片处理) 漏洞复现步骤 上传一个图片文件,文件名中包含恶意代码 获取上传图片的hash值 构造请求,对图片进行裁剪操作 在图片处理过程中,恶意文件名被解析执行 技术细节 关键代码片段 漏洞代码: 修复后代码: 命令注入防护 修复中添加的 -- 参数是Unix/Linux系统中的标准选项,表示"选项结束",可以防止后续参数被解析为命令选项,有效防御参数注入攻击。 防御建议 立即升级到elFinder 2.1.48或更高版本 对所有用户输入进行严格的过滤和转义 使用参数化方式构建系统命令 实施最小权限原则,限制Web服务器的执行权限 总结 CVE-2019-9194是一个典型的开发疏忽导致的命令注入漏洞,展示了即使有安全意识,实现过程中的小错误也可能导致严重的安全问题。该案例强调了代码审查和自动化测试的重要性,特别是在处理用户输入和系统命令时。