近日,安全公司 WhiteSource 发布了一份“开源安全年度报告”。报告表明,2019 年,公开披露的开源安全漏洞数量再创新高,总数为 6100 个。与 2018 年相比,开源安全漏洞的数量增长近 50%。同时,报告还表明代码漏洞最多的开源项目是用 C 语言编写的。并且,报告发现,2019 年最常见的安全漏洞类型是跨站脚本攻击、输入验证安全漏洞、缓冲区错误和越界读取以及信息泄露。
数据表明,2009 年,公开披露的开源安全漏洞不足 1000 个。
但是,随着企业对开源软件的使用增多和人们对开源安全漏洞的关注,公开披露的开源安全漏洞数量将不断增加。在这份名为《The State of Open Source Security Vulnerabilities》的研究报告中,WhiteSource 写道,“当今,开源组件已经成为现代软件应用的一部分。随着开源软件的使用不断增长,人们开始更多地关注开源软件安全研究。”
“一路飙升”的开源安全漏洞
在 2014 年,开源安全出现转折点。这一年,Codenomicon 和谷歌安全部门的研究人员披露 OpenSSL 漏洞,该漏洞可以让攻击者获得服务器上 64K 内存中的数据内容。该漏洞被国内称为“OpenSSL 心脏出血漏洞”,因其破坏性之大和影响范围之广,堪称网络安全里程碑事件。
这件事不仅给科技行业敲响了警钟,而且让科技公司开始采取行动,比如为修复类似的重大漏洞,业内十二家顶级科技企业加入Linux基金会基础架构联盟(CII),包括亚马逊、谷歌、IBM、Intel、微软和思科等。
据 WhiteSource 的报告显示,2015 年和 2016 年,每年开源安全漏洞的数量不超过 2000,但是在 2017 年和 2018 年,开源安全漏洞的数量一路飙升,超过 4000。
2019 年,开源安全的漏洞超过 6000 个,突破历史记录。
不过,好消息是超过 85%的开源安全漏洞在披露时已经有修复程序。
“过去几年,科技巨头在开源上加大投资,从而能更好地管理开源项目和提升安全性。同时,社区也在不断致力于安全研究,及时发布针对开源安全漏洞的修复版本。”WhiteSource 表示。
然而,有些用户并不知道这些修复程序,因为已知的开源漏洞只有 84%提交到 NVD(美国国家漏洞数据库)。
报告还指出:遗憾的是,开源软件的漏洞并没有集中在一处发布,而是分散在数百种资源中。有时,索引的编制并不正确,导致搜索特定数据成为一项艰巨挑战。
据悉,一部分新发现的安全漏洞来自谷歌开源模糊测试工具,比如OSS-Fuzz,它在 2 年时间找到 9000 个漏洞。仅在 2020 年 1 月,它又在 250 个开源项目中发现16000 个漏洞。
去年,WhiteSource 和 GitHub 合作,将其漏洞数据库带到 GitHub,为其安全警报提供服务。针对那些由 PHP、Java、Python、.NET、JavaScript 和 Ruby 编写的开源项目,GitHub 会扫描开源项目来发现潜在的安全漏洞。目前,它已经帮助开发者找到和修复了数百万漏洞。
另外,GitHub 在 2019 年成立安全实验室(Security Lab),汇聚安全研究人员查找并修复开源项目中的安全漏洞。并且,GitHub 成为授权 CVE 编号发布机构,项目维护者可以和安全专家一起研究安全修复程序,并直接从 GitHub 上申请 CVE 编号,并披露有关漏洞的详细信息。
尽管 GitHub 不断提升安全性,但是 WhiteSource 指出,开发者可能被发现的大量安全漏洞所“淹没”,应接不暇。
最不安全的编程语言
WhiteSource 还从编程语言角度对存在安全漏洞的开源项目进行了分析。研究发现,安全漏洞最多的开源项目是用 C 语言编写的,占比 30%。
这家公司解释,C 语言占比之高是因为有太多的开源项目是用它编写。
第二是 PHP。尽管 PHP 在开发者心中的受欢迎度大不如前,但用 PHP 编写的代码占开源安全漏洞的 27%,与 10 年前的 15%相比,进一步上升。
相比而言,用 Python 编写的代码占开源安全漏洞的 5%,这与 10 年前的 6%相比有所下降。
此外,报告还表明,2019 年,最常见的安全漏洞类型是 CSS(跨站脚本攻击)、输入验证安全漏洞、缓冲区错误、越界读取和信息泄露。其中,跨站脚本攻击是 Java、JavaScript、PHP、Python 和 Ruby 中最常见的漏洞类型。
评论