jQuery File Upload <= 9.x 远程命令执行漏洞 (ImageMagick/Ghostscript)

  • A+
所属分类:网络安全文章

jQuery File Upload <= 9.x 远程命令执行漏洞 (ImageMagick/Ghostscript)

jQuery-File-Upload 是 Github 上继 jQuery 之后最受关注的 jQuery 项目,该项目最近被披露出一个存在了长达三年之久的任意文件上传漏洞,该漏洞在随后发布的 v9.22.2 版本中被修复,但是在 VulnSpy 团队对代码的复查中发现了另外一个严重的命令执行漏洞,该漏洞允许攻击者通过上传恶意的图片文件来执行任意系统命令。

漏洞细节

在 jQuery-File-Upload 的 PHP 上传处理文件 /server/php/UploadHandler.php 中优先使用了 Imagick 来校验上传的图片

  1. protected function get_image_size($file_path) {
  2.     if ($this->options['image_library']) {
  3.         if (extension_loaded('imagick')) {
  4.             $image = new \Imagick();
  5.             try {
  6.                 if (@$image->pingImage($file_path)) {
  7.                     $dimensions = array($image->getImageWidth(), $image->getImageHeight());
  8.                     $image->destroy();
  9.                     return $dimensions;
  10.                 }
  11.                 return false;
  12.             } catch (\Exception $e) {
  13.                 error_log($e->getMessage());
  14.             }
  15.         }
  16.         if ($this->options['image_library'] === 2) {
  17.             $cmd = $this->options['identify_bin'];
  18.             $cmd .= ' -ping '.escapeshellarg($file_path);
  19.             exec($cmd, $output, $error);
  20.             if (!$error && !empty($output)) {
  21.                 // image.jpg JPEG 1920x1080 1920x1080+0+0 8-bit sRGB 465KB 0.000u 0:00.000
  22.                 $infos = preg_split('/\s+/', substr($output[0], strlen($file_path)));
  23.                 $dimensions = preg_split('/x/', $infos[2]);
  24.                 return $dimensions;
  25.             }
  26.             return false;
  27.         }
  28.     }
  29.     if (!function_exists('getimagesize')) {
  30.         error_log('Function not found: getimagesize');
  31.         return false;
  32.     }
  33.     return @getimagesize($file_path);
  34. }

因此我们可已直接通过上传含有恶意代码的图片来利用该漏洞,按照老规矩,VulnSpy 已经准备好了在线的实验环境,大家可以移步到下面链接进行测试:

在线测试地址:https://www.vulnspy.com/cn-jquery-file-upload-below-v9.x-rce/

漏洞修复

将 /server/php/UploadHandler.php 中的默认图片处理库修改为GD库:

  1. // Set to 0 to use the GD library to scale and orient images,
  2. // set to 1 to use imagick (if installed, falls back to GD),
  3. // set to 2 to use the ImageMagick convert binary directly:
  4. 'image_library' => 0
  • 服务器购买微信群
  • 阿里云&腾讯云&国外VPS
  • weinxin
  • 服务器购买QQ群
  • 阿里云&腾讯云&国外VPS
  • weinxin
CE安全网

发表评论

您必须登录才能发表评论!