首页 程序猿 码农开发 浏览内容
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默认已经升级,无此漏洞)之前版本怎么来通过升级修复这个漏洞,如下:
cd /root/oneinstack #进入oneinstack工具目录#cd /root/lnmp #如果安装使用的是lnmptmux #进入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.sh):(非上述环境的小伙伴需要对应修改下升级脚本)
#!/bin/bash# Author: yeho# 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/oneinstackexport PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/binclearprintf "######################################################################## 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.shImageMagick_version=6.9.3-10imagick_version=3.4.1if [ -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 1fiStop_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.inifi[ -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.inifi[ -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/srcsrc_url=http://mirrors.linuxeye.com/oneinstack/src/ImageMagick-$ImageMagick_version.tar.gz && Download_srctar xzf ImageMagick-$ImageMagick_version.tar.gzcd ImageMagick-$ImageMagick_version./configure --prefix=/usr/local/imagemagick --enable-shared --enable-staticmake && make installcd ..rm -rf ImageMagick-$ImageMagick_versioncd ..}Install_php-imagick() {cd $oneinstack_dir/srcif [ -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_versionficd ..}Stop_ImageMagickInstall_ImageMagickInstall_php-imagickStart_ImageMagickCheck_ImageMagick
2.ImageMagick官方给出了一个临时解决方案:通过配置文件,禁用ImageMagick。可在“/etc/ImageMagick/policy.xml” 文件中添加如下代码:(此方法亦可参考:ImageMagick漏洞(CVE-2016-3714)修复方案)
3.关于wordpress的临时解决方法:将wordpress的默认图片处理库优先顺序改为GD优先,这也是阿里云给出的临时解决方案:
在wp-includes/media.php中搜索
$implementations = apply_filters( 'wp_image_editors', array( 'WP_Image_Editor_Imagick', 'WP_Image_Editor_GD' ) );
修改为:
$implementations = apply_filters( 'wp_image_editors', array('WP_Image_Editor_GD','WP_Image_Editor_Imagick' ) );
经过上诉方法,该漏洞问题就搞定了。