2024年开源安全和风险分析报告 您的开源供应链安全指南 目录 3 |综述3 |关于OSSRA 20244 |概述 6 |开源漏洞与安全性7 |采取措施,防止漏洞进入您的软件供应链8 | 10大漏洞中有8个可以追溯到同一个CWE9 |为何某些BDSA没有CVE10 |按行业划分的漏洞情况 11 |开源许可12 |了解许可证风险14 |防范AI编码工具带来的安全和知识产权合规风险 15 |影响开源风险的运营因素15 |开源使用者需要改进维护实践 16 |研究结果与建议17 |创建安全的软件开发框架17 |了解代码的构成18 |术语18 |贡献者 本报告提供了一些建议,旨在帮助开源软件创建者和使用者负责任地管理软件,特别是在保障软件供应链安全的背景下。无论您是软件的使用者还是提供者,您都是软件供应链的一部分,需要保护您所使用的应用免受上游和下游风险的影响。在接下来的几页中,我们将探讨: 综述 •对开源安全的持续关注•为何说开发者需要改进以保持开源组件的持续更新•软件供应链管理需要软件物料清单(SBOM)•如何防范AI编码工具带来的安全和知识产权合规风险 近十年来,开源安全和风险分析(OSSRA)报告的主题一直是“您是否知道贵组织的代码构成情况?”2024年,这个问题比以往任何时候都更加重要。如今,随着开源的广泛使用以及AI生成代码的日益增多,使用第三方代码构建的应用越来越多。 如果无法全面了解代码的构成情况,无论是您自己,还是您的供应商和最终用户,都将无法确定软件可能包含的风险。保障软件供应链的安全首先要知道代码中包含哪些开源组件,并识别它们各自的许可证、代码质量和潜在漏洞。 关于OSSRA 2024 欢迎阅读2024年第9版开源安全和风险分析(OSSRA)报告。今年的OSSRA提供了新思网络安全研究中心(CyRC)对商业软件中的开源安全性、合规性、许可和代码质量风险当前状态的年度深入研究。我们分享这些调查研究结果,也是为了帮助安全、法务、风险和开发团队更好地了解安全和许可证风险状况。 本报告使用的数据来自新思科技Black Duck®审计服务团队在2023年间对来自17个行业的1,067个商业代码库的匿名调查结果。20多年来,审计服务团队一直在帮助世界各地的安全、开发和法务团队加强其项目的安全性和许可证合规。审计服务团队每年为客户审计数千个代码库,主要目的是识别并购(M&A)交易中一系列的软件风险。 该审计还提供全面、高度准确的软件物料清单(SBOM),涵盖企业应用中的开源代码、第三方代码、Web服务和应用编程接口(API)。审计服务团队依靠Black Duck KnowledgeBase™知识库的数据识别潜在许可证合规与安全风险。该知识库由CyRC创建、管理并积累多年,存储了来自3.1万+开源代码仓库的780万+开源组件。 本OSSRA报告强调了开源代码在软件领域的广泛使用,以及管理不善可能带来的风险。开源代码是当今各种企业和个人应用程序的基石。有效地识别、跟踪和管理开放源代码,对于成功实施软件安全计划非常重要,也是提高软件供应链安全水平的关键因素。 概述 96%96%的被审代码库中包含开源代码 53%53%的被审代码库中存在许可证冲突 31%31%的被审代码库中包含没有许可证或使用定制许可证的开源代码 77%77%的开源代码存在于被审的代码库中 经过风险评估的代码库中,49%包含24个月内未更新的组件 经过风险评估的代码库中,14%包含10年以上的漏洞 经过风险评估的代码库中,漏洞平均年龄为2.8年 经过风险评估的代码库中,1%包含至少12个月内未被更新/修补的组件 84% 经过风险评估的代码库中,84%包含漏洞 91% 74% 经过风险评估的代码库中,91%包含了比最新版本落后10个以上版本的组件 经过风险评估的代码库中,74%包含高风险漏洞 开源漏洞与安全 关于本次审计的说明 所有的Black Duck审计都会检查开源许可证的合规性,但客户可以自行决定放弃该审计的漏洞/运营风险评估部分。2023年,Black Duck审计服务团队共进行了1,067次审计。在这些审计中,88%的客户(936家)接受了安全和运营风险评估。在2024年的OSSRA报告中,“开源漏洞与安全性”以及“影响开源风险的运营因素”部分的数据基于包含风险评估的936个代码库,而“开源许可”部分的数据则基于全部的1,067个代码库。 在Black Duck审计服务团队为今年的OSSRA报告分析的1,067个代码库中,有96%包含开源代码。所有被审查的源代码和文件中,有77%来自开源代码。 今年,给定应用中的开源组件的平均数量为526个—证明自动安全测试非常重要甚至绝对必要的实际证据。如果只有区区几个组件,则手工测试也许是可行的,但在这种规模下,开展此类活动将变得举步维艰,几乎不可能实现,需要使用软件组成分析(SCA)之类的自动化解决方案。与手工测试不同,自动安全测试可以快速且一致地执行,允许开发者在开发过程的早期阶段识别问题,而不会影响交付进度或生产力。 在包含风险评估的代码库中,84%包含至少一个已知开源漏洞。这些代码库有74%包含高风险漏洞,与2022年相比有显著增长,2022年只有48%的代码库包含高风险漏洞。高风险漏洞是指已被主动利用、已有POC(证明漏洞存在)记录或已被归类为远程代码执行的漏洞。 包含高风险漏洞的代码库数量比去年增加了54% 84%的代码库包含至少一个开源漏洞 2022至2023年间,高风险漏洞增加了54%(26个百分点),造成这种情况的原因可能不止一个。例如,有可能是经济衰退和随之而来的裁员导致用于寻找和修补漏洞的人员数量减少。此外,审查发现,91%的代码库包含了比最新版本落后10个或更多版本的组件,由此可以得出一个简单的结论:绝大多数开源软件使用者并没有更新他们使用的组件。 广义上说,术语“维护者”指的是那些领导开源项目的贡献者。他们可能是决定编译或发布哪些部分源代码的最终决策者,他们可能负责所有的代码审查工作,并在其名下托管较小的项目,他们也可能对项目的方向做出最终决定。他们的日常工作可能有所不同,但都包括审查拉取请求和其他提交、发布新版本的软件、分类和处理安全修复以及社区管理和协调。 大多数维护者都会努力使其参与的开源项目保持最新状态。实际上,许多公司还专门雇人来维护公司软件所依赖的开源项目。开源使用者也需要具备同样的勤奋精神。他们需要时刻关注使用的版本,定期进行更新,并在使用开源软件时注意软件卫生—只从那些拥 有健康的维护者和贡献者生态系统的项目下载。 缓解风险:安全地使用jQuery和其他常用开源软件的技巧 “通用缺陷列表”(CWE)和“公共漏洞和暴露”(CVE)是用于识别和分类软件中安全缺陷和漏洞的常用列表。Black Duck SecurityAdvisories (BDSA)是新思科技的专有报告,旨在为客户提供比国家漏洞数据库(NVD) CVE通知更高水平、更及时、更详细的信息。BDSA针对影响客户SBOM中项目的漏洞提供可操作的建议和细节,以帮助确保他们全面了解开源代码漏洞可能带来的风险。 在审计中现的10大开源组件中,全部都是使用JavaScript编写的。审计中发现的大部分漏洞也与JavaScript库相关,尤其是过时版本的jQuery JavaScript库中的漏洞。 •使用最新版本的jQuery。正如本报告所示,jQuery的旧版本通常都存在安全漏洞。•考虑订阅安全咨询服务,如Black Duck Security Advisories,以获取最新的漏洞信息。jQuery时不时就会出现新的安全漏洞。•使用安全的编码框架来帮助您识别并避免代码中的潜在安全漏洞。•使用自动安全测试,包括静态分析、软件组成分析和动态分析,贯穿整个软件开发生命周期来解决代码质量和安全问题。 如图2所示,CWE-707是CWE 20、79、80、97、937的支柱。CWE-707涉及从上游组件读取数据或发送数据到下游组件之前,没有满足安全需求。不能正确地净化输入可能会带来跨站脚本(XSS)和SQL注入等漏洞利用攻击。XSS是一种常见且危险的漏洞利用,与本报告中 往往也会随之而来。审计结果显示,jQuery是最有可能存在漏洞的组件,尽管本报告中列出的每个jQuery漏洞都已经有了可用的补丁。对于jquery用户(实际上是所有开源软件的用户)来说,意识到旧版本软件可能带来的潜在安全风险并采取措施减轻这些风险是非常重要的。 Top 10的漏洞中,有8个都可以映射到CWE的同一个支柱缺陷,即CWE-707。也就是说,没有满足安全需求可能导致跨站脚本和SQL注入等攻击。 采取措施,防止漏洞进入您的软件供应链 强调的大多数Top 10漏洞有关。 •创建并维护软件物料清单(SBOM)。在防范软件供应链攻击的斗争中,拥有一个列出开源组件的准确并实时更新的SBOM,对于评估风险以及确保代码质量、合规性和安全至关重要。全面的SBOM列出了您的应用中包含的所有开源组件,以及这些组件的许可证、版本和补丁状态,构成了防范供应链攻击的有力武器,包括那些使用恶意软件包的攻击。•了解最新情况。确保您有办法了解新发现的恶意软件包、恶意软件和公开的开源漏洞。查阅新闻报道或定期发布的通知,以便针对影响SBOM中开源组件的问题获得实用性的建议和详细信息。•开展代码审查。在将软件引入项目之前,仔细检查其代码,看看是否存在任何已知漏洞。为了获取更多的信息,您可以考虑对源代码进行静态分析,以发现未知的安全缺陷。•积极主动。一个组件今天没有漏洞,不代表明天也没有。故意设计的恶意软件包可能永远不会被发现或标记为“可能有漏洞”。所以,在使用之前,请检查组件的健康状况和来源,以免将来出现安全问题。•使用自动化的软件组成分析(SCA)工具。SCA工具可以自动执行软件安全问题的识别、管理和缓解任务,使开发者能够专注于编写代码。此类工具可以评估开源和第三方代码。 当攻击者利用网站中的漏洞发送通常使用JavaScript编写的恶意的畸形代码时,就会出现跨站脚本攻击。由于该输入没有正确净化或转义,导致攻击者可以操纵原本值得信赖的主机执行恶意任务。不过,大多数XSS攻击的最终目标并不是主机本身,而是Web应用的其他用户。恶意脚本一旦注入,便可用来窃取敏感信息,如会话cookies。 XSS不仅是十大漏洞之一,也是OWASP Top 10列表中的一个漏洞—该列表列出了10种最严重的Web应用安全风险。在其列表中,OWASP将XSS归类为“A03:2021 -注入”。XSS漏洞的普遍存在与组织机构日益依赖基于Web的应用与客户交互有关。例如,许多电子商务公司、银行、互联网服务提供商和保险公司等组织机构都提供Web体验来吸引客户和合作伙伴。 数据再次清楚地表明,开发团队需要改进开源组件更新工作,特别是在涉及jQuery等常用的开源组件时。使用更易受攻击的旧版开源软件,后果可能很严重。例如,在审计发现的十大漏洞中,排名第二的BDSA-2020-0686 (CVE-2020-11022)是影响从jQuery 1.2到3.5.0之间所有版本的XSS漏洞。该漏洞允许将不可信来源的HTML传递给jQuery的一种DOM操作方法—即使经过了清理也不例外—并且可能执行不可信的代码。 这个问题在jQuery 3.5.0中得到了修复,但正如我们的数据所示,有三分之一的被测代码库仍在使用易受攻击的jQuery版本。恶意数据可能被用来入侵系统,或者泄露密码和信用信息等敏感数据。正如前面提到的,跨站脚本是应用中最常见的漏洞之一,通常用于对浏览器中的各种语言解释器(如HTML或JavaScript)发动代码注入攻击。 jQuery并非天生不安全。事实上,它是一个维护良好的开源库,拥有庞大的用户、开发者和维护者社区。但是,随着普及度的提高,问题 Top 10的安全漏洞中,有8个可以追溯到同一个