空安全意识,撸码一时手抖 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方法。
漏洞成因
- 开发者虽然具备安全意识,在代码中使用了
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值
- 构造请求,对图片进行裁剪操作
- 在图片处理过程中,恶意文件名被解析执行
技术细节
关键代码片段
漏洞代码:
$quotedPath = escapeshellarg($path);
$cmds[] = $cmd . ' ' . $path; // 错误地使用了未过滤的$path
修复后代码:
$quotedPath = escapeshellarg($path);
$cmds[] = $cmd . ' -- ' . $quotedPath; // 使用过滤后的参数并添加--选项
命令注入防护
修复中添加的--参数是Unix/Linux系统中的标准选项,表示"选项结束",可以防止后续参数被解析为命令选项,有效防御参数注入攻击。
防御建议
- 立即升级到elFinder 2.1.48或更高版本
- 对所有用户输入进行严格的过滤和转义
- 使用参数化方式构建系统命令
- 实施最小权限原则,限制Web服务器的执行权限
总结
CVE-2019-9194是一个典型的开发疏忽导致的命令注入漏洞,展示了即使有安全意识,实现过程中的小错误也可能导致严重的安全问题。该案例强调了代码审查和自动化测试的重要性,特别是在处理用户输入和系统命令时。