最受欢迎的 Top语言及其 Top 10漏洞
编译:奇安信代码卫士团队
报告指出,
在用 JavaScript 编写的 app 中,31.5% 至少含有一个跨站点脚本 (XSS) 缺陷;
在用 PHP 编写的app 中,74.6% 至少含有一个 XSS 缺陷;
在PHP 应用中,71% 存在加密问题;
.NET 应用中最主要的问题是信息泄露问题,占比 62.8%;
C++ 应用的最主要问题是错误处理,占比 66.5%;
Java 应用中占比最高的缺陷是回车符或换行符或 CRLF 注入,占比64.4%;
在 Python 中,最常见的漏洞和加密有关,占比35%。
每种语言所含缺陷的严重程度也各不相同。在C++ 和 PHP 应用程序中,高危缺陷占比分别为59%和52%,Java 应用中高危缺陷占比为24%, 而JavaScript 应用中仅为9.6%。
Veracode 公司的首席安全官 Chris Eng 解释了为何用不同语言编写的应用中会出现某些漏洞趋势,以及如何降低修复成本。
Eng 指出,从漏洞总数上来看,十年来并未出现某种缺陷类型消失的情况。某些缺陷的情况虽然会有波动,但相比其它因素,漏洞数量的平均值更多地反映了人们选择语言的情况和语言的流行程度。
他还表示,C++ 应用中的常见漏洞即缓冲区溢出漏洞在减少,原因并非开发人员出现的这种问题在减少而是因为 C++ 的流行程度在下降。另外一方面,影响 JavaScript 和 Python 的安全问题在增多,原因是 JavaScript 目前非常流行。Java 和 .NET 仍然广受企业欢迎。PHP 虽然仍是最流行的 Web 应用开发脚本语言之一,但 PHP 的漏洞数量更多的原因在于 PHP 提供了如此多的不安全原语以及很多会导致出现错误的方法。
Eng 表示,.NET 的很多 API 的默认值更安全,因此相比 PHP,更难以在 .NET 中引发 XSS 或SQL 注入问题。在PHP 中,只要是默认的,除非碰巧在使用其中一种更现代化的框架以获取更多的保护措施,则会有很多方式导致错误发生。
虽然从所分析的 JavaScript 应用中找到的缺陷更少,但 JavaScript 的庞大的开源库 npm 生态系统仍然是一个潜在的薄弱点,尽管 JavaScript 的默认值更安全。Eng 指出,即使可以从自己编写的代码中找到并修复所有的漏洞,但还需要处理大量多种类型的第三方库。他认为,“打补丁的过程并没有预期那样美好。当前的趋势是开发人员在需要时下载最新的库版本,之后除非出现功能崩溃的情况,否则他们永远不会更新。”
那么,工程和产品团队该如何降低修复关键应用程序的成本?Eng 建议将版本更新至最新版本,并认识到随着时间的流逝,应用程序会出现很多技术或安全负债。在某些节点,需要修复应用程序或打补丁,包括语言更新以及为关键库打补丁。
Eng 指出,“如果我当前使用的版本是4.5但4.6已发布,那么就可以应用该补丁,且出现功能崩溃问题的几率非常小。开源库不会在次要版本中对库进行重大修改。现在假设使用的是版本2,那么就不得不更新至4.6,而这个过程会出现很多困难,很痛苦。”对于 JavaScript 而言,这个库更新的问题会因为庞大的 npm 生态系统而变得更大;Java 的 Maven 库和 Python 的 PyPI 库也具有庞大的生态系统。
Eng 指出,一般的 JavaScript 应用具有400个依赖关系。但10%的 JavaScript 应用拥有1000个或2000个依赖关系。
最近,Snyk 公司指出,影响 JavaScript、Ruby、Java、PHP 和 Python 的安全漏洞是由某项目中加载的主要组件的间接依赖关系导致的。一些非常流行的 JavaScript 库用于80%到90%的 JavaScript 应用中。
Eng 表示,“只要其中一个数据包中存在一个漏洞,那么你就会继承该风险,而不止是安全风险。”比如2016年因出现纠纷,某开发人员从 npm 删除了 left-pad JavaScript 库的案例。该库从 GitHub 消失,导致三分之二的互联网突然崩溃。
(各语言的漏洞热力图 —— Veracode)
2018年度Veracode软件安全报告
Linux 基金会发布《开源软件供应链安全报告》
https://www.zdnet.com/article/programming-language-security-these-are-the-worst-bugs-for-each-top-language/
题图:Pixabay License
本文由奇安信代码卫士编译,不代表奇安信观点。转载请注明“转自奇安信代码卫士 https://codesafe.qianxin.com”。
奇安信代码卫士 (codesafe)
国内首个专注于软件开发安全的
产品线。