jQuery-File-Upload <= 9.x 远程命令执行漏洞 (ImageMagick/Ghostscript)
字数 1059 2025-08-27 12:33:42
jQuery-File-Upload <= 9.x 远程命令执行漏洞分析
漏洞概述
jQuery-File-Upload 是一个流行的文件上传组件,在版本9.x及以下存在一个严重的远程命令执行漏洞。该漏洞源于组件在处理上传图片时使用了存在安全问题的ImageMagick/Ghostscript库,攻击者可以通过上传恶意构造的图片文件来执行任意系统命令。
漏洞细节
漏洞位置
漏洞位于 /server/php/UploadHandler.php 文件中的 get_image_size 方法。该方法优先使用Imagick来校验上传的图片:
protected function get_image_size($file_path) {
if ($this->options['image_library']) {
if (extension_loaded('imagick')) {
$image = new \Imagick();
try {
if (@$image->pingImage($file_path)) {
$dimensions = array($image->getImageWidth(), $image->getImageHeight());
$image->destroy();
return $dimensions;
}
return false;
} catch (\Exception $e) {
error_log($e->getMessage());
}
}
// 其他代码...
}
// 其他代码...
}
漏洞成因
ImageMagick/Ghostscript存在多个已知的安全漏洞:
- Ghostscript的
-dSAFER沙箱绕过问题 - ImageMagick的
popen()shell注入漏洞(通过文件名)
当jQuery-File-Upload使用这些库处理上传的图片时,攻击者可以构造特殊的图片文件触发这些漏洞,导致远程命令执行。
漏洞利用
攻击者可以通过以下步骤利用该漏洞:
- 构造一个包含恶意代码的图片文件
- 通过jQuery-File-Upload组件的上传功能上传该文件
- 当服务器使用ImageMagick/Ghostscript处理该图片时,恶意代码将被执行
修复方案
临时修复
将/server/php/UploadHandler.php中的默认图片处理库修改为GD库:
// 设置为0使用GD库处理图片
// 设置为1使用imagick(如果已安装,否则回退到GD)
// 设置为2直接使用ImageMagick convert二进制文件
'image_library' => 0
彻底修复
- 升级jQuery-File-Upload到最新版本(v9.22.2或更高)
- 升级ImageMagick/Ghostscript到已修复相关漏洞的版本
- 如果不需要处理图片,完全禁用ImageMagick/Ghostscript相关功能
参考链接
- More Ghostscript Issues: Should we disable PS coders in policy.xml by default?
- CVE Request - multiple ghostscript -dSAFER sandbox problems
- CVE Request: GraphicsMagick and ImageMagick popen() shell vulnerability via filename
测试环境
VulnSpy提供了在线测试环境:
https://www.vulnspy.com/cn-jquery-file-upload-below-v9.x-rce/