2018年1月18日,国家信息安全漏洞共享平台(CNVD)收录了PHP GD Graphics Library存在拒绝服务漏洞(CNVD-2018-02505,对应CVE-2018-5711)。综合利用上述漏洞,攻击者可以构造恶意GIF文件,远程利用PHP函数形成无限循环的方式发起拒绝服务攻击。目前,漏洞利用代码已公开,且厂商已发布漏洞修复版本。
一、漏洞情况分析
PHP(超文本预处理器)是一种通用开源脚本语言。GD Graphics Library(又名libgd或libgd2)是一个开源的用于动态创建图像的库,它支持创建图表、图形和缩略图等,广泛应用于PHP语言的开发。
该漏洞触发的前提条件为受影响版本的PHP,并且使用了libgd库,漏洞文件存在于ext/gd/libgd/gd_gif_in.c。在“LWZReadByte_”函数存在一个循环(while-loop),该循环里“GetCode_”函数会调用GetDataBlock来读取GIF图片中的数据,但由于“GetCode_”函数未能正确处理int到unsigned char的类型转换,导致PHP在解析特定GIF文件调用PHP函数imagecreatefromgif或imagecreatefromstring时出现死循环,从而导致服务器计算资源大量消耗,直至崩溃宕机。该漏洞允许远程攻击者利用该漏洞导致拒绝服务攻击。
CNVD对上述漏洞的综合评级为“高危”。
二、漏洞影响范围
PHP 5 < 5.6.33版本
PHP 7.0 < 7.0.27版本
PHP 7.1 < 7.1.13版本
PHP 7.2 < 7.2.1版本
三、漏洞修复建议
目前,厂商已发布升级新版本以修复该漏洞,最新版本下载链接http://php.net/downloads.php。
附:参考链接:
http://php.net/ChangeLog-7.php
https://bugs.php.net/bug.php?id=75571
http://www.cnvd.org.cn/flaw/show/CNVD-2018-02505