企业动态 NEWS

  • 正则表达式根本库源码审计取缝隙阐发
    发布时间:2019-04-12   浏览次数:

      本文以PCRE库为例,简述源码审计和缝隙挖掘的过程,并深切阐发CVE-2017-11660的道理,申明不妥的底层根本库源码处置对上层使用软件的影响和风险,进而申明根本库软件源代码平安的主要性。

      正在上述for轮回中,贫乏每次进入轮回的无效判断,创制了死轮回的可能性;if语句判断前提为等值判断,只要正在摆布两值相等的环境下,才能触发施行语句;等值判断的摆布值,存正在被污染的可能性。如许,if等值前提可能无法被满脚,轮回退出语句break无法被施行,因而进入死轮回。检测流程示企图如下:

      正在上述POC中往内存前搜刮字符串“AABB”,当然也能够搜刮其它字符串,如许会激发严沉的消息泄露。PHP利用了PCRE正则表达式库,因而我们测验考试正在PHP中对此缝隙进行操纵和风险阐发,确认PCRE的这个缝隙能否影响到PHP。下载PHP最新版7.2.0,并编译,构制PHP的精简POC如下:

      pp的值恰是subject+1,为一般的值,而eptr远远小于pp,且达到了内存鸿沟,从而导致了内存拜候非常。

      正则表达式是字符串处置的根基功能,它利用单个字符串来描述、婚配一系列合适某个句法法则的字符串,绝大部门言语库都供给了正则表达式的功能,例如:、glibc、uclibc、php等等,而且一般利用开源的正则表达式根本库来实现其功能,例如:

      阐发发觉,这段代码是PCRE中“match”函数处置“OP_NCLASS”、“OP_CLASS”操做码的代码,而且这段代码正在其它处所也呈现了,对应着“OP_XCLASS”操做码。

      正则表达式包罗查找合适某些复杂法则的字符串的描述法则,这些法则有通用的尺度,涉及到上述缝隙的元字符包罗:

      表中的越界拜候缝隙就是CVE-2017-11660,次要触发缘由是代码中没有对轮回鸿沟进行准确查抄,导致越界拜候了分派的内存。其次要相关代码如下:

      内存溢出是代码缺陷运转的成果。形成此缺陷,从代码层面讲,间接的缘由是轮回退出前提判断不妥。上述代码中,对轮回“for(;;)”的退出,通过前提“if (eptr– == pp)”进行判断,若是eptr正在轮回起头时,其值曾经小于pp,那么,该轮回将无法无效终止。此类类似环境可能呈现的判断前提为:

      正在这个轮回中有个判断前提退出,当“eptr– == pp”的时候就会退出,可是后面的宏“BACKCHAR(eptr)”会对eptr做递减,当递减至“eptr

      所以,虽然此缝隙存正在于PCRE中,但因为PHP对PCRE中的函数进行了封拆挪用,并对成果值做了检测,因而PHP并不受CVE-2017-11660这个缝隙的影响。但本次源码审计和缝隙挖掘发觉的别的一个PCRE的缝隙CVE-2017-11164,就确认影响到了PHP,能够正在PHP中形成办事。

      POC的实现从subjectmp的内存往前搜刮字符串“AABB”,曲到婚配到“AABB”的内存内容或者是拜候了内存鸿沟从而导致段拜候错误。gdb中调试消息如下:

      CVE-2017-11164缝隙影响到PHP的库函数preg_match,因而基于PHP的各类web使用若是利用了pcre_match这个库函数则也会遭到影响,存正在被办事的风险。好比,web使用中利用preg_match来实现搜刮功能,那么者正在搜刮的原始内容中插入“\x6C\x6F\xE5\xA2\x80\x2D”内容,然后正在婚配的时候利用特殊构制的字符即可办事。

      比来,360代码卫士团队对常见的正则表达式根本库进行了源码审计和缝隙挖掘,发觉了10余个缝隙,均提交至CVE以及国度消息平安缝隙库,目前已获得CVE编号的缝隙有5个,具体如下:

      相关链接:


友情链接:
Copyright 2018-2021 http://www.uph123.com All Rights Reserved.版权所有 @