首页 程序猿 码农开发 浏览内容
WP_Image_Editor_Imagick漏洞解决方法
这几天很多人都收到了阿里云推送的一条短信通知,大意就是存放在上面的WordPress程序有WP_Image_Editor_Imagick漏洞问题,需要登入后台补丁等等的暗示。当然,如果需要在线补丁则需要升级阿里云的安骑士专业版,100元/5台/月,很是很贵的。其实对于我们来说我们没有必要去购买这个服务,因为这个漏洞并不是由于WordPress程序本身造成的,而是由于ImageMagick这个PHP图像处理模块爆出的“0day”漏洞所引发的。
那先来说下ImageMagick这个模块,ImageMagick是一个免费的创建、编辑、合成图片的软件。它可以读取、转换、写入多种格式的图片。图片切割、颜色替换、各种效果的应用,图片的旋转、组合,文本,直线,多边形,椭圆,曲线,附加到图片伸展旋转。ImageMagick是免费软件:全部源码开放,可以自由使用,复制,修改,发布,它遵守GPL许可协议,可以运行于大多数的操作系统,ImageMagick的大多数功能的使用都来源于命令行工具。由于其强大的功能以及超强的可操作性,是的这款作图软件深得广大办公人士喜爱,正因为如此,此次0day漏洞所带来的影响超乎了人们的想象。诸多网站论坛都深受其害,其中不乏百度、阿里、腾讯、新浪等知名网站,一时间,业界各大网站及企业都人人自危,纷纷自查,以免中招。
漏洞参考信息:1.官方公布的漏洞详情 2.ImageMagick爆远程代码执行漏洞(CVE-2016-3714)
那么对于我们来说,如果去解决这个漏洞呢?
1.最完善的解决方案是:使用 ImageMagick的官方更新,并将其升级到最新版本。该漏洞在6.9.3-10、7.0.1-1及以上版本得到修复,
下面来看看OneinStack或lnmp、lamp、lnmpa一键安装包(最新下载OneinStack默认已经升级,无此漏洞)之前版本怎么来通过升级修复这个漏洞,如下:
1 2 3 4 5 6 | cd /root/oneinstack #进入oneinstack工具目录 #cd /root/lnmp #如果安装使用的是lnmp tmux #进入tmux模式下,防止断网导致升级中断 wget http://mirrors.linuxeye.com/scripts/update_ImageMagick.sh #下载升级脚本 chmod +x update_ImageMagick.sh #赋权权限 ./update_ImageMagick.sh #升级,注:请勿sh或bash update_ImageMagick.sh方式执行脚本 |
如下图表示升级成功:

update_ImageMagick
升级脚本内容如下(update_ImageMagick.sh):(非上述环境的小伙伴需要对应修改下升级脚本)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | #!/bin/bash # Author: yeho <lj2007331 AT gmail.com> # BLOG: https://blog.linuxeye.com # # Notes: OneinStack for CentOS/RadHat 5+ Debian 6+ and Ubuntu 12+ # # Project home page: # http://oneinstack.com # https://github.com/lj2007331/oneinstack export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin clear printf " ####################################################################### # OneinStack for CentOS/RadHat 5+ Debian 6+ and Ubuntu 12+ # # upgrade ImageMagick for OneinStack # # For more information please visit http://oneinstack.com # ####################################################################### " . ./options.conf . ./include/color.sh . ./include/download.sh ImageMagick_version=6.9.3-10 imagick_version=3.4.1 if [ -e "/usr/local/imagemagick/bin/convert" ];then OLD_ImageMagick_version=`/usr/local/imagemagick/bin/Magick-config --version | awk '{print $1}'` else echo "${CWARNING}You do not have to install Imagemagick! ${CEND}" exit 1 fi Stop_ImageMagick() { if [ -e "$php_install_dir/etc/php.d/ext-imagick.ini" ];then /bin/mv $php_install_dir/etc/php.d/ext-imagick.ini{,_bk} elif [ ! -e "$php_install_dir/etc/php.d/ext-imagick.ini" -a -n "`grep imagick.so $php_install_dir/etc/php.ini`" ];then sed -i 's@extension.*imagick.so.*@;&@' $php_install_dir/etc/php.ini fi [ -e "$apache_install_dir/conf/httpd.conf" ] && service httpd restart || service php-fpm restart /bin/mv /usr/local/imagemagick{,_`date +"%Y%m%d_%H%M%S"`} } Start_ImageMagick() { if [ -e "$php_install_dir/etc/php.d/ext-imagick.ini_bk" ];then /bin/mv $php_install_dir/etc/php.d/ext-imagick.ini{_bk,} elif [ ! -e "$php_install_dir/etc/php.d/ext-imagick.ini" -a -n "`grep imagick.so $php_install_dir/etc/php.ini`" ];then sed -i 's@;extension.*imagick.so.*@extension=imagick.so@' /usr/local/php/etc/php.ini fi [ -e "$apache_install_dir/conf/httpd.conf" ] && service httpd restart || service php-fpm restart } Check_ImageMagick() { if [ -n "`/usr/local/imagemagick/bin/convert -version | grep "$ImageMagick_version"`" ];then echo "You have ${CMSG}successfully${CEND} upgrade from ${CWARNING}$OLD_ImageMagick_version${CEND} to ${CWARNING}$ImageMagick_version${CEND}" else echo "${CWARNING}Imagemagick upgrade failed! ${CEND}" fi } Install_ImageMagick() { cd $oneinstack_dir/src src_url=http://mirrors.linuxeye.com/oneinstack/src/ImageMagick-$ImageMagick_version.tar.gz && Download_src tar xzf ImageMagick-$ImageMagick_version.tar.gz cd ImageMagick-$ImageMagick_version ./configure --prefix=/usr/local/imagemagick --enable-shared --enable-static make && make install cd .. rm -rf ImageMagick-$ImageMagick_version cd .. } Install_php-imagick() { cd $oneinstack_dir/src if [ -e "$php_install_dir/bin/phpize" ];then if [ "`$php_install_dir/bin/php -r 'echo PHP_VERSION;' | awk -F. '{print $1"."$2}'`" == '5.3' ];then src_url=http://mirrors.linuxeye.com/oneinstack/src/imagick-3.3.0.tgz && Download_src tar xzf imagick-3.3.0.tgz cd imagick-3.3.0 else src_url=http://mirrors.linuxeye.com/oneinstack/src/imagick-$imagick_version.tgz && Download_src tar xzf imagick-$imagick_version.tgz cd imagick-$imagick_version fi make clean export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig $php_install_dir/bin/phpize ./configure --with-php-config=$php_install_dir/bin/php-config --with-imagick=/usr/local/imagemagick make && make install cd .. rm -rf imagick-$imagick_version fi cd .. } Stop_ImageMagick Install_ImageMagick Install_php-imagick Start_ImageMagick Check_ImageMagick </lj2007331> |
2.ImageMagick官方给出了一个临时解决方案:通过配置文件,禁用ImageMagick。可在“/etc/ImageMagick/policy.xml” 文件中添加如下代码:(此方法亦可参考:ImageMagick漏洞(CVE-2016-3714)修复方案)
1 2 3 4 5 6 7 | <policymap> <policy domain="coder" rights="none" pattern="EPHEMERAL"></policy> <policy domain="coder" rights="none" pattern="URL"></policy> <policy domain="coder" rights="none" pattern="HTTPS"></policy> <policy domain="coder" rights="none" pattern="MVG"></policy> <policy domain="coder" rights="none" pattern="MSL"></policy> </policymap> |
3.关于wordpress的临时解决方法:将wordpress的默认图片处理库优先顺序改为GD优先,这也是阿里云给出的临时解决方案:
在wp-includes/media.php中搜索
1 | $implementations = apply_filters( 'wp_image_editors', array( 'WP_Image_Editor_Imagick', 'WP_Image_Editor_GD' ) ); |
修改为:
1 | $implementations = apply_filters( 'wp_image_editors', array('WP_Image_Editor_GD','WP_Image_Editor_Imagick' ) ); |
经过上诉方法,该漏洞问题就搞定了。