各编程语言的安全漏洞情况
C语言
C语言是目前为止漏洞最多的语言,虽然在这十年中漏洞数量会出现上升和下降的情况,但是C语言的漏洞数量一直是远超其它编程语言的。
C语言安全漏洞:按严重程度
C语言的漏洞数量实在逐年增加。2018年,C语言的低严重性漏洞发生率相对较低,只有7%。另外,C语言是唯一存在大量内存损坏问题的语言,而这些问题被认为是一种关键的脆弱性类型。
C语言安全漏洞:CWE
缓冲区错误(CWE-119)是C语言中最常见的安全漏洞,类似于C++的漏洞配置文件。大多数的编程语言的CWE都与Web、Web服务相关,缓冲区错误和其他相关的CWE是不可能在管理语言中出现的。
需要注意的是,这组漏洞(有时称为内存损坏)通常会产生严重后果。
C语言中的每个项目的安全漏洞
构建在C语言之上的开源项目很容易被跟踪。从上图中,我们可以看到,Linux漏洞几乎总是在C语言中占很大比例的漏洞。2016年年中,我们发现了一个臭名昭著的名为ImageCritical的漏洞,为了确保安全,安全研究人员对其进行了大量的研究,因此我们可以看到ImageCritical在2017年呈现出了异常的增长。
Java
Java安全漏洞:按严重程度
自2016年起,Java的安全漏洞就一直在不断上升。2018年,其它编程语言的安全漏洞数量都在下降,Java是唯一一个安全漏洞在这一年增加了的编程语言,更夸张的是,2018年的Java安全漏洞相比2017年翻了一番。
从上图中,我们可以看到Java的严重性安全漏洞一直维持在75%z左右,而高严重性安全漏洞在最近两年增加到了20%。
Java安全漏洞:CWE
从上图中我们可以看到在Java的CWE中有一个很特别的漏洞类型——反序列化问题(CWE-502),这是在所有调查的编程语言中Java所独有的一个漏洞类型,PHP、Ruby和Python中没有出现反序列化的问题,这到底是研究人员还没注意到这些编程语言的反序列化问题还是序列化在其它语言中更安全呢?
JavaScript
JavaScript安全漏洞:按严重程度
JavaScript是唯一一个在过去10年中安全漏洞不断增加的编程语言,其2017年的安全漏洞数量是2016年的16倍,而2018年安全漏洞数量又增加了50%以上。
为何JavaScript的安全漏洞会一直增长呢?研究人员表示:“主要原因可能是JavaScript作为后端语言变得越来越流行了。”
JavaScript安全漏洞:CWE
JavaScript有两种常见的CWE——密码问题(CWE-310)和路径遍历(CWE-22)。研究人员表示,“我们在调查NPM包时发现,61%的JavaScript安全漏洞都存在路径遍历和加密的问题,但是这其中70%的包都已经不再使用维护了,且2018年的下载量少于2000次。”
为什么这两种类型的CWE数量会这么多呢?研究人员表示,“原因之一可能是新的自动化工具在这些几乎没有维护下载的包中发现了这些CWE。”
从调查结果来看,2016年发现的JavaScript安全漏洞几乎都是密码问题(CWE-310),而2017年发现了绝大多数的安全漏洞都是路径遍历问题(WEE-22)。同时,这两种类型的安全漏洞也导致了JavaScript安全漏洞的整体上升。
JavaScript社区
在研究JavaScript的安全漏洞时,研究人员还发现了一个有趣的现象:超过30%的JavaScript漏洞是在社区平台上公开的。
由于开源社区的分散性,有关安全漏洞的信息被分散在数百个安全顾问、开源项目的问题跟踪者和论坛中。虽然关于这些安全漏洞的信息也可以通过各种渠道被开发者知晓,但是可信度却无法进行衡量。 |