常见安全风险

根据《2021年开源软件供应链安全风险研究报告》,2020年发现的最主要的缺陷类型为:CWE-79,占新增开源漏洞的14%左右。

CWE编号中文名称个数
CWE-79在 Web 页面生成时对输入的转义处理不恰当(跨站脚本)824
CWE-506内嵌的恶意代码726
CWE-400未加控制的资源消耗(资源穷尽)510
CWE-200信息暴露305
CWE-20输入验证不恰当212
CWE-94对生成代码的控制不恰当(代码注入)201
CWE-119内存缓冲区边界内操作的限制不恰当142
CWE-125跨界内存读134
CWE-78OS 命令中使用的特殊元素转义处理不恰当( OS 命令注入)124
CWE-325缺少必要的密码学步骤117

开源组件生态安全风险分析

  • 开源组件生态中的漏洞数呈上涨趋势, 2020 年环比增长40%
    • 根据调查结果,近 6 年开源组件生态中漏洞数逐年递增。其中,2020 年新增漏洞数为 3426,环比去年增长 40%; 2017 年增长速度最快,环比增长 49%;近 3 年增长速度呈上升趋势, 2020 年新增漏洞数是 2015 年的 4.48 倍。
  • 近 6 年中 Maven 仓库漏洞数量最多
    • 漏洞数量 为 3533 个; Go 仓库漏洞数量最少,漏洞数量为 348 个;平均每个仓库漏洞数量为 1413 个。
  • 2020 年,含高危以上漏洞占比最多仓库是 Rubygems
    • 超八成组件含高危以上漏洞占比均超过 40%。 2020 年,Rubygems 仓库含高危以上漏洞占比最多,占 Rubygems 仓库新增漏洞的 96%; Go 仓库含高危以上漏洞占比最少,占 2020 年 Go 仓库新增漏洞的 39%。
  • 平均每版本漏洞最多的 TOP 25 组件约五成来自 Composer 仓库
    • 平均版本漏洞最多的 TOP25 中, Composer 仓库的组件数占比最多,共计 12 个,占比约 5 成左右; PyPI 仓库的组件数排名第二,共计 7 个;平均版本漏洞数最多的组件来自 Maven 仓库,漏洞数量为 47 个。

组件漏洞依赖层级传播范围分析

  • 一级传播影响范围扩大 125 倍,二级传播影响范围扩大 173 倍
  • npm 仓库中的组件经 2 轮传播,影响组件数量最多
    • npm 仓库原始样本中共有 1,962 个含有漏洞的组件,经过一级传播共波及 459,876 个组件,漏洞的影响范围扩大了 234 倍;二级传播共波及 601,574 个组件,范围比最初 1,962 个组件扩大了 307 倍。
  • 传播影响范围最小的仓库是 Maven
    • Maven 仓库原始含漏洞组件数量为 2,289 个,经过 2 次传播, 6 组仓库中受漏洞影响范围最小是 Maven 仓库。经过一级传播共波及 94,724 个组件,漏洞的影响范围扩大了 41 倍;二级传播共波及 145,827 个组件,范围比最初 2,289 个组件扩大了 64 倍。

从整体上看,开源组件生态中漏洞影响范围远超预期,组件间的依赖层级关系会导致组件之间漏洞存在传播风险。因此,要保证软件的安全风险控制,应通过自动化的手段识别软件工程中的组件成分,梳理组件间的依赖关系;在已知成分清单基础上对组件漏洞风险实施管控;同时,还要对已知成分进行动态监控,建立组件生态的漏洞威胁警报,在动态变化中将安全漏洞风险降到最低。


大型开源项目漏洞总数 TOP20

序号大型开源项目主页地址历史漏洞总数
1Linux Kernelhttps://www.kernel.org/4653
2Chromium(Google Chrome)http://www.chromium.org/2695
3Mozilla Firefoxhttps://www.mozilla.org/en-US/firefox/2241
4MySQLhttps://dev.mysql.com/1171
5Thunderbirdhttps://www.thunderbird.net/zh-CN/1119
6Adobe Flash Player pluginhttps://www.adobe.com/products/flashplayer/end-of-life.html1087
7Firefox ESRhttps://www.mozilla.org/en-US/firefox/enterprise/863
8SeaMonkeyhttps://www.seamonkey-project.org/706
9Drupal(core)https://www.drupal.org/699
10PHPhttps://www.php.net/678
11ImageMagickhttps://imagemagick.org/index.php624
12GitLabhttps://about.gitlab.com/623
13Wiresharkhttps://www.wireshark.org/623
14WebKitGTKhttp://webkitgtk.org/591
15WordPresshttps://wordpress.org/575
16OpenJDKhttps://openjdk.java.net/518
17Moodlehttps://moodle.org/442
18Xen Project (Hypervisor)https://xenproject.org/411
19FFmpeghttps://ffmpeg.org/392
20QEMUhttps://www.qemu.org/384

大型开源项目漏洞年度增长 TOP20

序号大型开源项目主页地址2021年漏洞增量
1Linux Kernelhttps://www.kernel.org/419
2Chromium (Google Chrome)http://www.chromium.org/346
3TensorFlowhttps://www.tensorflow.org/201
4MySQLhttps://dev.mysql.com/191
5GitLabhttps://about.gitlab.com/158
6Mozilla Firefoxhttps://www.mozilla.org/en-US/firefox/123
7gpachttps://gpac.wp.imt.fr/116
8Electron - Cross-platform desktop application shellhttps://www.electronjs.org/83
9Thunderbirdhttps://www.thunderbird.net/zh-CN/79
10FFmpeghttps://ffmpeg.org/66
11Firefox ESRhttps://www.mozilla.org/en-US/firefox/enterprise/62
12WebKitGTKhttp://webkitgtk.org/60
13MediaWikihttps://www.mediawiki.org/wiki/MediaWiki50
14Oracle VM VirtualBoxhttps://www.virtualbox.org/49
15QEMUhttps://www.qemu.org/41
16Magentohttps://business.adobe.com/39
17Nextcloudhttps://nextcloud.com/36
18Xen Project (Hypervisor)https://xenproject.org/34
19libredwghttps://www.gnu.org/software/33
20SWFToolshttp://www.swftools.org/32

包生态系统漏洞增量

序号开源软件所属包生态系统2021年漏洞增量
1FFmpeg-iOSSwift67
2Magento CorePackagist23
3Go programming languageGodoc20
4Python PillowPypi20
5VaadinMaven19
6QuarkusMaven19
7keycloakMaven16
8TYPO3 CMSPackagist16
9saltPypi、Conda14
10jackson-databindMaven13
11OpenEXRConan13
12Firefly IIIPackagist12
13dubboMaven12
14Synapse homeserver for Matrix.orgPypi12
15ElasticsearchMaven12
16Data Mapper for JacksonMaven12
17jackson-mapper-aslMaven12
18Apache SolrMaven11
19PlonePypi11
20WebPSwift11

七成项目不活跃,具体分布情况

序号包生态系统项目总数不活跃项目数不活跃项目比例
1Maven54274335239064.9%
2NPM1892984131886869.7%
3Packagist34054124032570.6%
4Pypi35297321734861.6%
5Godoc32826122207967.7%
6Nuget37561425561968.1%
7Rubygems16843615091289.6%
8Swift829997062185.1%

主流开源生态关键基础开源软件TOP50

排名开源软件所属包生态系统直接依赖数
1junit:junitMaven95614
2rakeRubygems78524
3bundlerRubygems68683
4org.scala-lang:scala-libraryMaven68469
5rspecRubygems58262
6org.slf4j:slf4j-apiMaven49376
7Newtonsoft.JsonNuget48964
8tslibNPM42259
9chalkNPM34576
10commanderNPM34494
11lodashNPM33964
12requestsPypi32640
13numpyPypi32498
14illuminate/supportPackagist29657
15guzzlehttp/guzzlePackagist26706
16com.google.guava:guavaMaven26094
17expressNPM24863
18requestNPM24479
19ch.qos.logback:logback-classicMaven23898
20org.mockito:mockito-coreMaven22417
21inquirerNPM21485
22reactNPM20391
23pandasPypi20223
24axiosNPM20146
25commons-io:commons-ioMaven19481
26com.fasterxml.jackson.core:jackson-databindMaven19229
27org.apache.commons:commons-lang3Maven19084
28fs-extraNPM18713
29pytestPypi17708
30org.clojure:clojureMaven17304
31pryRubygems14197
32matplotlibPypi14015
33log4j:log4jMaven13749
34org.projectlombok:lombokMaven13735
35laravel/frameworkPackagist13472
36scipyPypi13459
37org.jetbrains.kotlin:kotlin-stdlib-commonMaven13386
38org.jetbrains.kotlin:kotlin-stdlib-jdk8Maven13349
39org.slf4j:slf4j-log4j12Maven13294
40yiisoft/yii2Packagist13094
41typescriptNPM12921
42railsRubygems12805
43activesupportRubygems12791
44minitestRubygems12624
45react-domNPM12584
46simplecovRubygems12520
47momentNPM12460
48org.mockito:mockito-allMaven12049
49com.google.code.gson:gsonMaven11821
50org.assertj:assertj-coreMaven11773

影响最广的开源软件漏洞存在于超3成的软件项目中

漏洞名称CVE编号影响项目数量影响度
Spring Framework远程代码执行漏洞CVE-2022-22965106331.7%
Vmware Spring Framework安全漏洞CVE-2022-22950100930.1%
Vmware Spring Framework 安全特征问题漏洞CVE-2022-22968100930.1%
Vmware Spring Framework 代码问题漏洞CVE-2016-1000027100930.1%
FasterXML jackson-databind缓冲区错误漏洞CVE-2020-3651894628.2%
Apache Commons IO路径遍历漏洞CVE-2021-2942589326.6%
Google Guava访问控制错误漏洞CVE-2020-890887826.2%
Apache Log4j 信任管理问题漏洞CVE-2020-948885925.6%
jQuery 跨站脚本漏洞CVE-2020-1102281924.4%
jQuery 跨站脚本漏洞CVE-2020-1102381924.4%

最容易利用的漏洞 TOP10

容易利用的漏洞名称CVE编号影响项目数量影响度
Spring Framework 远程代码执行漏洞CVE-2022-22965106331.7%
Vmware Spring Framework代码问题漏洞CVE-2016-1000027100930.1%
jQuery 跨站脚本漏洞CVE-2020-1102281924.4%
jQuery 跨站脚本漏洞CVE-2020-1102381924.4%
Apache HttpClient 安全漏洞CVE-2020-1395679623.7%
OpenSSL 缓冲区错误漏洞CVE-2021-371177423.1%
jQuery 跨站脚本漏洞CVE-2019-1135876522.8%
FasterXML jackson-databind 代码问题漏洞CVE-2020-884076322.7%
jQuery 跨站脚本漏洞CVE-2015-925168920.5%
Apache Log4j 代码问题漏洞CVE-2021-4422866619.9%

老旧版本依然使用

开源软件名称版本号版本发布日期使用它的项目数量
JDOM1.0-FCS2002.05.1528
Apache Xalan2.5.D12003.03.031
XML Pull Parsing API1.1.3.12003.06.17228
JUnit3.8.12004.03.05100
Log4j1.2.82004.03.0552
SSLExt1.2-02004.10.0426
jaxen1.0-FCS2005.04.2713
Mockobjects Core0.092005.04.273
Mockobjects Jdk1 4 J2ee1 30.092005.04.273
JLine0.9.12005.05.183

开源软件多版本使用混乱

开源软件名称被使用的版本数量
Spring Data235
Spring Framework226
Apache Tomcat206
@types/node186
jackson-databind170
electron-to-chromium168
Hibernate ORM162
Jetty158
Spring TestContext Framework155
Spring Boot145