安全路透社
当前位置:安全路透社 > 网络转载 > 正文

正则表达式基础库源码审计与漏洞分析

一、基本概述 

正则表达式是字符串处理的基本功能,它使用单个字符串来描述、匹配一系列符合某个句法规则的字符串,绝大部分语言库都提供了正则表达式的功能,例如: perl、python、tcl、php 、glibc、uclibc、php等等,并且一般使用开源的正则表达式基础库来实现其功能,例如: glibc就使用了GRegex来提供正则表达式功能,而glibc是GNU 发布的C运行库,是Linux系统中最底层的API,几乎其它任何应用库都会依赖于 glibc。所以,如果正则表达式基础库包含漏洞,则会影响到上层的各种软件,风险隐患极大。

最近,360代码卫士团队对常见的正则表达式基础库进行了源码审计和漏洞挖掘,发现了10余个漏洞,均提交至CVE 以及国家信息安全漏洞库,目前已获得CVE编号的漏洞有5个,具体如下:

CVE编号 影响软件和版本 漏洞类型
CVE-2017-11660 PCRE – 8.41 内存越界访问
CVE-2017-11659 PCRE – 8.41 越界读漏洞
CVE-2017-11164 PCRE – 8.41 递归处理不当
CVE-2017-9729 GRegex 递归处理不当
CVE-2017-9728 GRegex 越界读一个字节

其中,PCRE库在Apache、MySQL 、PHP、KDE、Postfix、 Analog、Nmap、Apple Safari、Nginx 等基础框架或组件中均有使用;GRegex库由Isamu Hasegawak开发,在glibc 、uclibc等标准库中有所使用。

本文以PCRE库为例,简述源码审计和漏洞挖掘的过程,并深入分析CVE-2017-11660的原理,说明不当的底层基础库源码处理对上层应用软件的影响和危害,进而说明基础库软件源代码安全的重要性。

二、源码审计与漏洞挖掘

PCRE库的源代码基本信息如下:

源代码基本信息表
源代码名称 pcre-8.41-IR-1.6.1.zip
开发语言 C/C++
源代码文件数 43
源代码行数 64616

使用360代码卫士扫描后,结果统计如下:

等级统计表
等级 数量 所占%
3 0.68
378 85.52
61 13.8

总体而言,PCRE的代码质量还是挺高的。各缺陷详细信息及分类如下:

赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册