开源软件在现代软件开发中持续发挥着基础支持的作用。
根据奇安信代码安全实验室的监测和统计,2022 年底和2023年底,主流开源软件包生态系统中开源项目总量分别为5499977和7959049,一年间增长了 44.7%,增速迅猛;截至2023 年底,主流开源软件包生态系统中平均每个开源项目有11.3 个版本,与前几年基本持平。2023 年开源软件生态持续繁荣。对 Maven、NPM、Packagist、Pypi、Godoc、Nuget、Rubygems、Swift 等八个典型开源软件包生态系统的具体分析如下:NPM 包生态开源项目数量和增速均位列第一。与前三年相比,NPM超越 Godoc,成为开源项目数增速最快的包生态系统。八个典型的开源软件包生态系统中开源项目数量和增长率情况如下图所示,其中开源项目数量最多的是 NPM 包生态系统,截至2023 年底,其开源项目数量达到了 4170641,依然远高于其他生态;开源项目数量增速最快的也是 NPM,2023 年一年间的项目总量增速高达79.1%,Godoc 的项目数增长也很快,达 58.1%。

Maven 包生态系统的开源项目开发者依然“最勤奋”,开源项目的平均版本数超过 23 个。截至 2023 年底,八个典型的开源软件包生态系统的开源项目数量和版本数量如下表所示。其中,Maven包生态系统平均每个开源项目有高达 23.6 个版本,比去年的21.9 又有增加;NPM 和 Godoc 的开源项目平均版本数有所降低,分别从13.4 和9.4降至 10.2 和 8.8。
2023 年全年,“奇安信开源项目检测计划”对2248 个开源软件项目的源代码进行了安全检测,代码总量为309522947 行,共发现安全缺陷 5108161 个,其中高危缺陷 355721 个,整体缺陷密度为16.50个/千行,高危缺陷密度为 1.15 个/千行。两项缺陷密度指标较去年均有所下降。
(1)编程语言分布情况 2023 年检测的 2248 个开源项目中,共涉及10 种编程语言,分别是 Java、C/C++、JavaScript、Python、Groovy、C#、Lua、Kotlin、Ruby 和 Go。被测项目中,使用Java、C/C++、JavaScript 和
(2)典型安全缺陷检出情况 对 2248 个开源软件项目的缺陷检测结果分析发现,注入、密码管理、日志伪造、跨站脚本、NULL 引用、配置管理、输入验证、资源管理、路径遍历、API 误用等十类典型安全缺陷的总体检出率为76.7%,与前两年相比,有小幅升高。
可以看出,除了密码管理类缺陷的检出率较往年,特别是去年有较大幅度的提升外,其他均在正常的波动范围内。从历年数据来看,输入验证、路径遍历和资源管理三类缺陷的检出率较高,均在30%左右或以上;日志伪造、跨站脚本和配置管理三类缺陷检出率较低,均在 20%左右或以下。

根据奇安信代码安全实验室监测与统计,截至2023 年底,CVE/NVD、CNNVD、CNVD 等公开漏洞库中共收录开源软件相关漏洞64938个,其中有 7107 个漏洞为 2023 年新增。 (1)大型开源项目漏洞总数及年度增长TOP20截至 2023 年底,历史漏洞总数排名前20 的大型开源项目信息如下表所示。Linux Kernel、Chromium (Google Chrome)和Mozilla Firefox一如既往,依然排名前 3。
2023 年一年间,公开报告漏洞数量增长排名前20 的大型开源项目信息,Linux Kernel 依然是一年来增加漏洞最多的项目,达到 607 个。 序号 大型开
(2)主流开源软件包生态系统漏洞总数及年度增长TOP20截至 2023 年底,主流开源软件包生态系统中历史漏洞总数排名前 20 的开源软件信息如下表所示。排名前两位的依然是TensorFlow和 Chakra Core。
本年度报告依然把活跃度作为衡量开源软件安全性的一个维度。太过活跃的开源软件,其版本更新发布频率过高,会增加使用者运维的成本和安全风险;不活跃的开源软件,一旦出现安全漏洞,难以得到及时的修复。因此,两者都会给运维带来一些风险。
(1)68.7%的开源软件项目处于不活跃状态,比例下降报告中依然将超过一年未更新发布版本的开源软件项目定义为不活跃项目。2023 年全年,主流开源软件包生态系统中不活跃的开源软件项目数量为 5469685 个,占比为 68.7%,低于去年的72.1%,与前年的 69.9%基本持平。 对八个典型的开源软件包生态系统进行分析和比较发现,NPM从去年的 72.7%大幅度下降为 60.4%,Nuget 从去年的54.3%迅速上升至79.0%。除此之外,其他包生态系统中不活跃项目的占比均与去年持平。NPM 的不活跃项目数量依然最多,达2520717 个,Rubygems 的不活跃项目占比依然最高,达 90.7%。。
(2)版本频繁更新的项目较去年增长21.6%2023 年全年,主流开源软件包生态系统中,更新发布100 个以上版本的开源项目有 27234 个,较去年增长21.6%。
一般而言,如果开源软件出现漏洞后,造成的放大效应越大,影响范围越广,那么这个软件就应当越重要。因此,本期报告继续分析“关键基础开源软件”(被多于 1000 个其他开源软件直接依赖的一类开源软件)的安全状况。这类开源软件一旦出现漏洞,影响范围巨大且消除困难,其安全性应得到更多关注。Apache Log4j2 就是一款关键基础开源软件,截止 2023 年底,其直接依赖数为7919。
(1)主流开源生态关键基础开源软件TOP50 分析发现,截止 2023 年底,Maven、NPM、Nuget、Pypi、Packagist、Rubygems 等主流开源生态中的关键基础开源软件共有1709 款,较2022 年底上涨 36.3%,直接依赖数排名 TOP50 的软件如下表所示。开源软件junit:junit的直接依赖数已连续三年位居榜首。ApacheLog4j2 仅排在第 139 名,未进入 TOP50,也就是说,如果TOP50表中的任何一款开源软件曝出严重漏洞,其影响都可能会大过“Log4Shell”漏洞。
(2)关键基础开源软件的漏洞披露情况未见改善分析发现,历年来,有较大比例的关键基础开源软件从未公开披露过漏洞,造成这种现象的原因主要有两个,一方面,有的关键基础开源软件,特别是有的开源社区中的软件,漏洞虽然已被修复了,但没有记录和公开;另一方面,维护和安全研究等相关人员对一些关键基础开源软件安全性的关注程度不够,对它们漏洞挖掘的研究还不多。2023 年,对 1709 款关键基础开源软件分析发现,有1313 款从未公开披露过漏洞,占比达 76.8%,呈现出逐年升高的趋势,如下图所示。但另一方面,关键基础开源软件中也不乏漏洞披露流程非常正规的优秀开源项目。

(3)关键基础开源软件的整体运维风险有所改观本期报告依然从“版本更新时间”和“周提交频率”两个维度来分析判断关键基础开源软件的运维状况。首先,关键基础开源软件新版本发布的活跃度有较大提升。截止2023 年底,半年内没有发布过新版本的关键基础开源软件有453款,占比为 26.5%,较去年的 41.5%有较大的下降。其次,关键基础开源软件提交的积极性有所降低。去年一年内,周平均提交次数小于5和小于1的关键基础开源软件数量分别为1245和 916,占比分别为 72.8%、53.6%,两项指标较前两年持续升高。此外,在 TOP50 的关键基础开源软件中,有34 款软件明确已获得大厂或者基金会支持,比前两年的 23 和24 款有明显增加;Github贡献者数量小于 100 的有 8 款,比去年和前年减少1 款。