Veracode 最新发布的一项《State of Software Security v11: Open Source Edition》研究报告指出,现代软件的表面下存在着安全问题的雷区,有 80% 的第三方库在被纳入代码库后从未被开发者更新过。
该报告基于对 86000 多个软件库的 1300 万次扫描分析,其中包含 301000 多个独特的库;同时还调查了近 2000 名开发人员,以了解他们如何使用第三方软件。Veracode 方面称,尽管超过三分之二的修复是小事,甚至对最复杂的软件应用程序的功能也没有影响。但开源库不断发展,今天看起来安全的东西明天可能就不再安全了,这可能会给软件供应商和用户带来巨大的安全风险。
研究发现,库的流行度和漏洞每年都有明显的波动。例如,2019 年 Ruby 中最受欢迎的五个库中有四个在 2020 年跌出前 10,而 2019 年 Go 中一些最易受攻击的库在 2020 年也变得不再那么容易受攻击,反之亦然。鉴于几乎所有的现代应用程序都是使用第三方开源软件构建的,一个库中的单个缺陷或调整可以连带到所有使用该代码的应用程序;这也就意味着,这些不断的变化对软件安全会产生直接影响。
几乎所有存储库都包含具有至少一个漏洞的库。Veracode 首席研究官 Chris Eng 解释称:“当今绝大多数应用程序都使用开源代码。库的安全性可能会迅速发生变化,因此保持应用程序中内容的最新清单至关重要。我们发现,一旦开发人员选择了一个库,他们就很少更新它。随着供应商面临越来越多的对其供应链安全性的审查,根本无法证明‘set it and forget it’的心态是合理的。至关重要的是,开发人员必须让这些组件保持最新状态,并在发现新漏洞时迅速做出响应。”
此外,尽管软件环境是动态的,但开发人员在将开源库纳入软件应用程序后,往往不会更新它们。而缺乏对易受攻击的库与他们的应用程序之间关系的上下文理解,也可能会造成一些限制。报告指出,缺乏信息的开发者将需要七个多月的时间来修复 50% 的缺陷;但当他们有了正确的信息和指导时,时间则会大幅减少至三周。
且当发现存在漏洞的库时,他们可以迅速做出反应,在一小时内解决 17% 的缺陷,在一周内解决 25% 的缺陷。因此,当及时提供准确的信息时,开发人员可以适当地确定安全的优先次序,并快速修补漏洞。
其他主要发现包括:
-
92% 的开源库缺陷可以通过更新修复,69% 的更新只是较小的版本更改或更小;
-
即使一个开源库的更新产生了额外的更新,只要其中近三分之二是次要的版本更改,那么即使是最复杂的应用程序也不太可能破坏其功能;
-
接受调查的开发人员中只有 52% 有选择第三方库的正式流程,而超过四分之一的人不确定,甚至不知道是否有正式流程;
-
选择 library 时,“Security”仅排在第三位,而“Functionality”和“Licensing”分别占据了第一和第二位。