2021中国软件供应链安全分析报告.pdf
2021 中国 软件供应链安全 分析报告 奇安信代码安全实验室 2021 年 6 月 目 录 一、前言 . 1 二、国内企业自主开发源代码安全状况 . 3 1、编程语言分布情况 . 3 2、典型安全缺陷检出情况 . 4 三、开源软件生态发展与安全状况 . 5 1、开源软件生态发展状况分析 . 5 2、开源软件源代码安全状况分析 . 7 ( 1)编程语言分布情况 . 7 ( 2)典型安全缺陷检出情况 . 8 3、开源软件公开报告漏洞状况分析 . 9 ( 1)大型开源项目漏洞总数及年度增长 TOP20 . 9 ( 2)主流开源软件包生态系统漏洞总数及年度增长 TOP20 . 11 4、开源软件活跃度状况分析 . 13 ( 1) 61.6%的开源软件项目处于不活跃 状态 . 13 ( 2) 13000 多个开源软件一年内更新发布超过 100 个版本 . 14 四、国内企业软件开发中开源软件应用状况 . 15 1、开源软件总体使用情况分析 . 15 ( 1)国内企业软件项目 100%使用开源软件 . 15 ( 2)流行开源软件被近 1/4 的软件项目使用 . 16 2、开源软件漏洞风险分析 . 17 ( 1)近 9 成软件项目存在已知开源软件漏洞 . 17 ( 2)平均每个软件项目存在 66 个已知开源软件漏洞 . 17 ( 3)影响最广的开源软件漏洞存在于 44.3%的软件项目中 . 17 ( 4) 15 年前的开源软件漏洞仍然存在于多个软件项目中 . 18 3、开源软件 运维风险分析 . 18 ( 1) 18 年前的老旧开源软件版本仍在被使用 . 18 ( 2)开源软件各版本使用非常混乱 . 19 五、典型软件供应链安全风险实例分 析 . 20 1、国内某主流 OA 系统供应链安全分析 . 20 2、国内某流行 Windows 桌面软件供应链安全分析 . 21 3、某国产网络设备固件供应链安全分析 . 22 4、 Google Chrome 浏览器供应链攻击实例分析 . 23 5、 VMware Workstation 供应链攻击实例分析 . 24 六、总结及建议 . 26 附录:奇安信代码安全实验室简介 . 29 1 一、 前言 数字化时代 ,软件 无处不在。软件如同社会中的“虚拟人”,已 经 成为支撑社会正常运转的 最 基本元素 之一,软件的安全性问题也正 在成为当今社会的根本性、基础性问题。 随着软件产业的快速发展,软件供应链也越发复杂多元,复杂的 软件供应链会引入一系列的安全问题,导致信息系统的整体安全防护 难度越来越大。近年来,针对软件供应链的安全攻击事件一直呈快速 增长态势,造成的危害也越来越严重。 2020 年 4 月, Rubygems 开源软件 包生态系统被放入了 数百 个恶 意软件包,这些恶意软件包的下载总量近 10 万次。例如, “ atlas- client” 是一个诱骗的诱饵程序包,用来仿冒 “ atlas_client” ,被下 载了超过 2100 次。 2020年 5 月, GitHub 披露 了针对 Apache NetBeans IDE 项目的 开源 软件 供应链攻击 Octopus Scanner,最终统计显示,有 26 个开 源项目被植入了 Octopus Scanner 后门 。 2020年 12 月,全球著名的网络安全管理软件供应商 SolarWinds 遭遇国家级 APT团伙高度复杂的供应链攻击。该攻击直接导致包括美 国关键基础设施、军队、政府 等 在内的超过 18000 家客 户全部受到影 响,可任由攻击者完全操控。 2021 年 2 月,安全研究人员通过 利用 开源生态安全机制上的漏 洞, 成功侵入了微软、苹果、 PayPal、特斯拉、优步等 35 家国际大 2 型科技公司的内网 ,这种新颖的软件供应链攻击方式被定义为 依赖混 淆 攻击。 2021年 3 月, PHP的 Git 服务器被攻击, 攻击者向 服务器上的 php-src 存储库推送了两次恶意提交,在 PHP 代码中植入 了一个后门,其目标是可以通过该后门获得运行 PHP 的网站系统的远 程代码执行权限。 2021 年 4 月, 知名 代码 测试公司 Codecov 宣布 其产品的 bash uploader 脚本被攻击者修改,导致用户 在 使用 Codecov 产品时,会 向攻击者的服务器发送敏感信息 , 从而 导致 攻击者可以获取 用户的 软 件源代码等机密信息。 攻击不断左移,针对软件供应链的攻击事件频发,系统性的研究 软件供应链安全,防范软件供应链安全风险,已经迫在眉睫 。 2020年, 奇安信代码安全实验室依托自身在软件安全领域十余年的技术积累, 针对国内软件供应链的安全状况进行了大量的研究、实践和数据分析 工作,形成本报告。报告内容主要包括国内企业自主开发源代码安全 状况分析、开源软件生态发展与安全状况分析、国内企业软件开发中 开源软件应用状况分析、典型应用系统供应链 安全 风险实例分析、总 结及建议等五个方面,希望可以为相关单位开展软件供应链安全 相关 的研究和实践 工作提供借鉴和参考。 3 二、 国内 企业自主开发源 代码安全 状况 源代码是软件的原始形态,位于软件供应链的源头。源代码安全 是软件供应链安全的基础,其地位非常关键和重要。 2020 年 全年 ,奇 安信代码安全实验室对 2001 个国内企业 自主开 发的软件 项目源代码 进行了安全 缺陷 检测, 检测的 代码 总 量为 335011173行, 共 发现 安全 缺陷 3387642 个,其中高危缺陷 361812 个, 整体 缺陷 密度为 10.11 个 /千行, 高危缺陷密度为 1.08个 /千行 。 1、 编程 语言分布 情况 在 被 检测的 2001 个国内企业自主开发的 软件 项目中 ,使用数量 排名前 3的 编程 语言为 Java、 PHP、 C/C+,对应的软件项目数 量 分别 为 1492 个 、 204个 和 97个。可以看出, 相关 国内企业在进行软件开 发时的首选语言是 Java 语言, 占比高达 75%。 编程 语言的总体 分布 情况如下图所示 。 1492, 75% 204, 10% 97, 5% 61, 3% 50, 3% 44, 2% 41, 2% 6, 0% 5, 0% 1, 0% 编程语言总体分布情况 Java PHP C/C+ Python Javascript Go C# Swift OC Cobol 4 2、 典型 安全 缺陷检出 情况 输入验证、路径遍历、跨站脚本、注入、 NULL引用、资源管理、 密码管理、 API 误用、配置管理 、日志伪造 等十类安全缺陷是程序 员 在编写软件代码时经常会出现的典型安全缺陷。典型安全缺陷的检出 率可以体现出软件源代码的基本安全状况(检出率指含有某类缺陷的 软件项目数占软件项目总数的比例)。 在 被 检测的 2001 个 软件 项目 中 ,十类典型 安 全缺陷 的 总体 检出率 为 77.8%,每类典型缺陷的 检出 率 及排名 如下表所示 。 排名 缺陷类型 检出率 1 输入验证 50.8% 2 路径遍历 39.6% 3 跨站脚本 39.5% 4 注入 37.3% 5 NULL引用 31.8% 6 资源管理 31.6% 7 密码管理 31.0% 8 API误用 28.7% 9 配置管理 28.0% 10 日志伪造 18.2% 5 三、 开源 软件 生态 发展 与 安全 状况 Gartner表示,现代软件大多数是被“组装”出来的,不是被“开 发”出来的。据 Forrester 统计,软件开发中, 80-90%的代码来自于 开源软件。 因此,现代软件的源代码 绝 大多 数 是混源代码,由企业自 主开发的源代码和开源软件代码共同组成。 开源软件是 现代 软件开发 最基础的原材料 ,与企业自主开发的源代码所处的软件供应链环节相 同,也 位于软件供应链的源头,其代码自身的安全状况, 会 直接影响 最终软件的安全性。 本报告从 开源 软件生态发展 状况、 开源软件 源代码 安全 状况、 开 源软件公开报告漏洞 状况 、开源软件活跃度 状况 等 四个 方面 对 2020 年 开源软件生态 发展 与安全 状况 进行 综合 分析 。 1、开源软件生态发展状况分析 据 奇安信代码安全实验室监测和 统计 , 2019 年 底 和 2020 年底 , 主流 开源 软件 包生态系统中开源项目总量 分别为 2841314 个 和 3814194个 ,一年间增长了 34.2%; 截至 2020 年底 ,主流开源软件包 生态系统中 平均每个开源项目有 10.2个版本 。 可以看出, 2020 年开 源软件生态 更加繁荣, 整体 发展非常迅猛。 本报告中对 八 个典型的开源软件包生态系统进行了进一步的分 析和比较,这 八 个包生态系统为 Maven、 NPM、 Packagist、 Pypi、 Godoc、 Nuget、 Rubygems、 Swift,具体 分析如下。 6 NPM 包 生态项目 数量 最多, Godoc 包 生态增速最快 。 八 个 典型 的 开源软件 包生态系统中开源 项目 数量 和增长率 情况 如下图所示,其中 开源 项目数量最多的是 NPM 包 生态 系统 , 截至 2020 年底 ,其 开源项 目数量达到了 1559835 个 ;开源项目数量 增 速 最快的是 Godoc 包 生态 系统 , 2020年 一年间的项目总量增速 达到了 36.2%。 Maven、 Nuget、 NPM包 生态 系统的 开源项目 开发 者比较“勤奋”, 开源项目 的平均版本数 超过 11 个。 截至 2020 年底, 八 个 典型 的 开源 软件 包生态系统的开源项目 数量 和版本 数量 如下表所示 。其中, Maven 包 生态 系统 平均每个开源项目有 18.0 个版本 , Nuget 包 生态 系统 平 均每个开源项目有 11.7 个版本, NPM 包 生态 系统 平均每个开源项目 有 11.0 个版本。 序号 包生态系统 2020 年项目数 2020 年版本数 平均版本数 1 Maven 487799 8785416 18.0 2 NPM 1559835 17148119 11.0 3 Packagist 309125 3035815 9.8 Maven NPM Packagist Pypi Godoc Nuget Rubygems Swift 2019年数量 385042 1174332 254710 212717 172215 233871 155092 66814 2020年数量 487799 1559835 309125 287113 234579 307336 163392 77015 增长率 26.7% 32.8% 21.4% 35.0% 36.2% 31.4% 5.4% 15.3% 0 200000 400000 600000 800000 1000000 1200000 1400000 1600000 1800000 典型 开源 软件 包生态系统中项目数量变化情况 2019年数量 2020年数量 增长率 7 4 Pypi 287113 2419533 8.4 5 Godoc 234579 1109833 4.7 6 Nuget 307336 3588880 11.7 7 Rubygems 163392 1094135 6.7 8 Swift 77015 474314 6.2 2、开源软件源代码安全状况 分析 奇安信 代码安全实验室于 2015 年初发起了 “ 奇安信 开源项目检 测计划 ” , 该计划 是 一项针对开源软件 项目 的 公益性安全检测计划, 旨在让广大开发者关注和了解开源软件的安全问题,提高软件安全开 发意识和技能 。 2020 年 全年 ,“奇安信开源项目检测计划” 对 1364 个 开源 软件 项目 的源代码 进行了安全检测,代码 总 量为 124296804行 , 共 发现 安 全缺陷 1859129个,其中 高危缺陷 117738 个。 2020 年检测的 1364 个 开源 软件 项目整体 缺陷 密度为 14.96个 /千行, 高危缺陷密度为 0.95 个 /千行。 ( 1) 编程语言分布情况 2020 年 检测的 1364 个 开源 项目 中 ,一共涉及 到 7 种编程语言, 分别是 Java、 C/C+、 Python、 OC、 Go、 JavaScript、 PHP, 编程 语言 的 分布 情况如下图所示。 8 ( 2)典型安全缺陷检出情况 输入验证、路径遍历、跨站脚本、注入、 NULL引用、资源管理、 密码管理、 API 误用、配置管理 、日志伪造 等十类安全缺陷是程序员 在编写软件代码时经常会出现的典型安全缺陷。典型安全缺陷的检出 率可以体现出软件源代码的基本安全状况(检出率指含有某类缺陷的 软件项目数占软件项目总数的比例)。在 2020 年 检测的 1364 个 开源 软件 项目 中 ,十类典型安 全缺陷的 总体 检出率 为 56.3%,每类典型缺 陷的检出率 及排名 如下表所示 。 排名 缺陷类型 检出率 1 输入验证 34.9% 2 路径遍历 30.7% 3 注入 28.6% 4 NULL引用 24.8% 5 API误用 24.3% 6 资源管理 20.7% 618, 45% 321, 23% 174, 13% 84, 6% 69, 5% 49, 4%49, 4% 编程语言总体分布情况 Java C/C+ Python OC Go Javascript PHP 9 7 跨站脚本 19.1% 8 日志伪造 17.9% 9 密码管理 13.8% 10 配置管理 12.9% 3、开源软件公开报告漏洞状况 分析 据奇安信代码安全实验室监测 与统计 , 截至 2020 年底, CVE/NVD、 CNNVD、 CNVD 等公开漏洞库中共收录开源软件相关漏洞 41342 个,其 中 5366 个为 2020年度新增 漏洞 。 ( 1)大型开源项目 漏洞 总数及年度增长 TOP20 截至 2020 年底 ,历史漏洞总数排名前 20 的 大型开源项目 信息 如 下表所示 。 序号 大型 开源项目 主页 地址 历史 漏洞总数 1 Linux Kernel kernel/ 4193 2 Chromium (Google Chrome) chromium/Home 2658 3 Mozilla Firefox mozilla/en-US/firefox/ 2093 4 Thunderbird 1023 5 MySQL 997 6 PHP 653 7 Wireshark wireshark/ 597 8 ImageMagick imagemagick/ 597 9 WordPress wordpress/ 561 10 GitLab 465 11 Moodle moodle/ 412 10 12 Xen Project (Hypervisor) xenproject/ 355 13 QEMU qemu/ 333 14 FFmpeg ffmpeg/ 324 15 Chakra Core 279 16 phpMyAdmin 265 17 Oracle VM VirtualBox virtualbox/ 262 18 MediaWiki mediawiki/ 231 19 WebKitGTK webkitgtk/ 221 20 Magento 188 2020年一年间 ,公开报告 漏洞 数量增长排名前 20的 大型 开源 项 目 信息 如下表所示 。 序号 大型 开源项目 主页 地址 2020 年漏洞增量 1 Chromium (Google Chrome) chromium/Home 261 2 GitLab 237 3 Linux Kernel kernel/ 235 4 Mozilla Firefox mozilla/en-US/firefox/ 157 5 Mattermost mattermost/ 143 6 MySQL 139 7 Thunderbird 81 8 Oracle VM VirtualBox virtualbox/ 70 9 QEMU qemu/ 46 10 Xen Project (Hypervisor) xenproject/ 43 11 ImageMagick imagemagick/ 43 12 FreeRDP 40 13 Magento 40 11 14 OpenJDK 39 15 Nextcloud 37 16 TensorFlow tensorflow/ 35 17 MediaWiki mediawiki/ 35 18 Chakra Core 32 19 Ghostscript 27 20 WordPress wordpress/ 24 ( 2) 主流 开源软件 包生态 系统 漏洞 总数 及 年度 增长 TOP20 截 至 2020 年底 , 主流 开源软件 包生态 系统 中 历史 漏洞 总数 排名 前 20的开源 软件 信息 如下表所示 。 序号 开源 软件 所属包生态系统 历史 漏洞 总数 1 TYPO3 CMS Packagist 101 2 Ruby on Rails Rubygems 98 3 OpenSSL Swift 95 4 Exiv2 Conan 80 5 Plone Pypi 79 6 Apache Struts Maven 78 7 Django Pypi 76 8 Dolibarr ERP & CRM Packagist 73 9 Symfony Packagist 73 10 Puppet Rubygems 70 11 Drupal (core) Packagist 65 12 silverstripe-framework Packagist 62 13 Jackson-databind Maven 55 14 Ansible Pypi 53 15 keycloak Maven 53 12 16 OpenShift Origin Godoc 45 17 SQLite Swift 42 18 Zend Framework Packagist 39 19 libxml2 Conan 36 20 Kubernetes Godoc 35 2020 年一年间 , 主流开源软件包生态系统中 公开报告 漏洞 数量 增长排名 前 20 的开源 软件 信息 如下表所示 。 序号 开源 软件 所属包生态系统 2020 年 漏洞增量 1 Jackson-databind Maven 26 2 keycloak Maven 22 3 Dolibarr ERP & CRM Packagist 20 4 Ansible Pypi 18 5 Openfire Maven 16 6 Electron - Cross- platform desktop application shell NPM 16 7 Centreon Packagist 14 8 Drupal (core) Packagist 14 9 TYPO3 CMS Packagist 13 10 October CMS Packagist 13 11 Kubernetes Godoc 12 12 SQLite Swift 12 13 Airflow Pypi 12 14 Vault by HashiCorp Godoc 11 15 Apache Tomcat Maven 10 16 Infinispan Maven 10 17 Python Pillow Pypi 10 18 Consul Godoc 9 19 Plone Pypi 9 20 Subrion Packagist 9 13 4、开源软件活跃度状况 分析 活跃度 也 是衡量开源软件安全性的一个 重要 维度 。 不活跃的开源 软件,无论是 更新 频率很低,或者被废弃,一旦出现安全漏洞,难以 得到及时的修复, 安全 风险 很高 ; 活跃的开源软件中,如果其 版本更 新 发布的频率过高 , 同样 会增加使用者运维 的 成本 和 安全 风险 。在选 择使 用开源软件时,应该充分考虑这两个因素。 本报告中 分析了 2020 年主流 开源软件 包生态系统中开源软件的版本更新情况,可以一定程 度上体现当前 开源软件活跃度 的整体 状况 。 ( 1) 61.6%的开源软件项目处于 不活跃 状态 我们将一年内未更新 发布 过版本的开源 软件 项目定义为不活跃 项目。 2020 年全年,主流 开源 软件 包生态系统中不活跃 的开源 软件 项 目 数量 为 2347794个 , 占 比达到 61.6%。 本报告中对 八 个典型的开源软件包生态系统进行了进一步的分 析和比较,这 八 个包生态系统为 Maven、 NPM、 Packagist、 Pypi、 Godoc、 Nuget、 Rubygems、 Swift, 其中 NPM 的不活跃项目数 量 最多,达到 1018533个 , Rubygems 的不活跃项目比例最 高 , 占比 达到 86.5%, 具 体数据见下表 。 序号 包生态系统 项目 总 数 不活跃项目数 不活跃 项目 比例 1 Maven 487799 272555 55.9% 2 NPM 1559835 1018533 65.3% 3 Packagist 309125 208890 67.6% 4 Pypi 287113 170044 59.2% 14 5 Godoc 234579 143685 61.3% 6 Nuget 307336 187238 61.0% 7 Rubygems 163392 141259 86.5% 8 Swift 77015 59521 77.3% ( 2) 13000 多 个开源 软件 一年内 更新 发布超过 100 个版本 2020 年全年,主流开源 软件 包生态系统中,更新 发布 100 个以 上 版本 的 开源 项目有 13411个 。 前述八 个 典型 的开源软件 包生态系统 中 , 一年内更新发布超过 100 个版本的项目数量见下表。 排名 包生态系统 对应的开发语言 一年内发布超过 100 个版本 的项目数 量 1 NPM Javascript 8317 2 Maven Java 2264 3 Nuget 1104 4 Pypi Python 613 5 Packagist PHP 554 6 Swift Swift 281 7 Godoc Go 193 8 Rubygems Ruby 38 15 四 、 国内 企业软件开发中开源软件应用 状况 如前所述,现代软件的源代码 绝 大多数是混源代码,由企业自主 开发的源代码和开源软件代码共同组成。本章内容将针对国内企业在 进行软件开发工作时,使用开源软件的具体情况进行分析。主要回答 两个问题:一是国内企业在软件开发中是否使用以及使用了多少开源 软件?二是其使用的开源软件是否存在安全问题? 2020年 全年 ,奇安信 代码安全实验室对 2557 个国内企业 软件项 目 中使用开源软件的情况 进 行了分析 ,这些软件项目的应用领域涉及 政府、金融、能源等重要行业。 分析发现,国内企业在软件开发中普 遍使用存在已知漏洞的开源软件,存在 巨大的软件供应链安全风险 。 具体分析数据如下。 1、 开源 软件 总体使用情况 分析 ( 1) 国内企业 软件项目 100%使用开源软件 在 被 分析的 2557 个 国内企业 软件 项目 中 , 无一例外 , 均使用了 开源 软 件 。最多的项目使用了 3878 个开源 软 件,平均 每个项目使用 126 个 开源软件 。使用开源 软 件最多的 5 个项目 情况 如下表所示。 项目 名称 使用的开源软件数量 项目 1 3878 项目 2 3838 项目 3 3536 项目 4 3062 项目 5 2637 16 经过后续的调研和访谈,我们 还 发现,软件项目中使用的开源软 件数量大大超出了软件项目管理者和程序员自身的认知。由于开源软 件之间的依赖关系错综复杂, 且软件开发中依赖包的管理通常通过包 管理器程序自动管理,软件开发者常常意识不到自己使用了数量巨大 的开源软件,因此当某个开源软件曝出安全漏洞时,软件开发者常常 “躺枪”而不自知,这中间隐含了巨大的软件供应链安全风险。 ( 2) 流行 开源 软件 被近 1/4 的 软件 项目使用 一些流行开源软件会被很多软件项目所使用,这些开源软件一旦 出现安全漏洞,影响面将会非常巨大。对于大型企业来说,企业内 部 可能就有数以 百 计的软件开发项目,更加需要对流行开源软件保持足 够的关注和重视,应该做到对其在本单位内的使用情况心中有数 。 经 统计 , 在我们分析的 2557 个 国内企业 软件项目中, 被使用最多的开 源软件为 Apache Commons Lang, 被 622个项目 所使用 ,占比达 24.3%。 被使用最多的前 5名开源 软件 如下表所示。 开源 软 件名称 使用 它 的 项目 数量 被使用率 Apache Commons Lang 622 24.3% Apache Commons Collections 620 24.2% dom4j: flexible XML framework for Java 563 22.0% Simple Logging Facade for Java (SLF4J) 510 19.9% Javax Inject 472 18.5% 17 2、开源 软件 漏洞风险分析 ( 1)近 9 成 软件项目 存在已知 开源软件 漏洞 分析 发现,在 2557 个 国内企业 软件项目中,存在 已知 开源 软件 漏洞的项目有 2280 个,占比 高达 89.2%; 存在已知高危开源软件漏 洞的项目有 2062 个,占比为 80.6%; 存在 已知 超危 开源软件 漏洞的 项目有 1802个,占比为 70.5%。 ( 2) 平均每个 软件项目 存在 66 个 已知开源软件漏洞 在 2557 个 国内企业 软件项目中,共检出 168604 个已知开源软件 漏洞(涉及到 4166个唯一 CVE 漏洞编号), 平均每个 软件 项目存在 66 个 已知 开源 软件 漏洞 , 最多的软件项目 存在 1200 个 已知 开源 软件 漏 洞。 存在已知 开源 软件 漏洞数量排名前 5 的项目情况如下表所示。 项目 存在 开源 软件 漏洞数量 项目 1 1200 项目 2 1013 项目 3 649 项目 4 517 项目 5 426 ( 3) 影响最广的 开源 软件 漏洞 存在于 44.3%的软件项目 中 从漏洞的影响 度 来 分析 ,影响 范围 最大的开源 软件 漏洞 为 CVE- 2020-5421,影响了 44.3%的软件项目。 影响 度 排名 前 5 的开源 软件 漏洞情况如下表所示。 18 漏洞名称 CVE 编号 影响项目数量 影响度 Spring Framework 安全漏洞 CVE-2020-5421 1132 44.3% Google Guava访问控制错误漏洞 CVE-2020-8908 1021 39.9% Apache Log4j信任管理问题漏洞 CVE-2020-9488 1020 39.9% FasterXML Jackson-databind代码问题漏洞 CVE-2020-8840 905 35.4% FasterXML Jackson-databind代码问题漏洞 CVE-2020-25649 866 33.9% ( 4) 15 年前的开源软件 漏洞 仍然存在于多个 软件 项目中 分析发现 , 部分软件 项目中存在十几年前公开的 古老 开源软件漏 洞 , 最古老的漏洞 是 2005 年 11 月公开的 CVE-2005-3510,仍 然 存在 于 31个项目中 。 部分 古老 开源 软件 漏洞 的影响情况 如下表所示。 漏洞名称 CVE 编号 发布日期 影响项目数 量 Apache Tomcat目录列表拒绝服务漏洞 CVE-2005-3510 2005.11.06 31 Jetty URL编码的反斜杠源代码泄露漏洞 CVE-2005-3747 2005.11.22 41 Apache Tomcat跨站脚本攻击漏洞 CVE-2005-4838 2005.12.31 32 Apache Struts ActionForm拒绝服务漏洞 CVE-2006-1547 2006.3.30 32 Apache Struts 特定 参数安全绕过漏洞 CVE-2006-1546 2006.3.30 32 3、 开源 软件运维风险分析 开源软件运维风险 复杂 多样,本报告主要从老旧开源软件 的使用 和开源软件多版本 的使用 角度 进行 分析 。 ( 1) 18 年前的老旧 开源软件版本 仍在 被 使用 分析发现 , 许多 软件 项目中使用了十几年前发布的开源软件版本 , 存在很大的运维风险。被使用的 老旧 开源软件 版本 中, 最 老 旧的 一个 19 是 2003 年 3 月 3 日 发布的 Apache Xalan 2.5.D1, 已经有 18 年之 久,但 仍然被 7 个软件项目 所 使用。 按老旧程度排名前 5 的 开源软件 如下表所示。 开源软件名称 版本号 版本发布日期 使用它的项目数量 Apache Xalan 2.5.D1 2003.03.03 7 XML Pull Parsing API 1.1.3.1 2003.06.17 273 JDOM 1.0-FCS 2004.09.03 25 SSLExt 1.2-0 2004.10.04 17 Jboss J2se 200504122039 2005.04.26 14 ( 2)开源 软件 各版本使用 非常 混乱 分析发现 , 各个项目中 开源软件使用的版本非常混乱,并非使用 的都是最新版本。 Spring Data是 被使用版本最多的开源 软件, 有 162 个版本 在被使用 。 按照 被使用版本 的数量排序, 排名前 5 的开源 软件 情况如下表所示。 开源 软件 名称 被 使用的 版本 数量 Spring Data 162 Jackson-databind 141 Apache Tomcat 132 Jetty 126 Hibernate ORM 121 20 五 、典型 软件 供应链 安全 风险 实例 分析 1、国 内 某 主流 OA 系统 供应链安全分析 本实例中分析的 OA 系统是一款国产 OA 系统,覆盖了流程审批、 会议管理、考勤管理、假期管理等在内的各种日常办公场景,能够有 效地提升组织管理与协同的效率。该系统在国内应用 非常 广泛,覆盖 了政府、金融、医疗、建筑等数十个行业的数万个客户。 经 分析发现 ,该 OA 系统中使用了 Spring Framework、 Apache Commons FileUpload、 Apache Commons Codec、 Apache Log4j 等在 内的 超过 20款开 源软 件,并因此引入了 500余个 已知开源软件 漏洞, 其中 包括 超危漏洞 3 个、高危漏洞 8 个 。 例如, 该 OA 系统中 使用的 Spring Framework 3.2.0.RELEASE中,存在超危漏洞 CVE-2018-1270, 可导致远程代码执行。 该 OA 系统中使用的 部分开源 软件及 漏洞情况 如下表所示 。 序号 开源软件名称 开源软件版本 漏洞情况 1 Spring Framework 3.2.0.RELEASE 超危 :1, 高危 :2, 中危 :14 2 Apache Log4j 1.2.14 超危 :1, 低危 :1 3 Apache Commons FileUpload 1.2.2 超危 :1, 高危 :3, 低危 :1 4 MySQL 5.0.20 高危 :2, 中危 :14, 低危 :454 5 Apache Standard Taglib Implementation 1.1.2 高危 :1 6 jQuery 1.8.3 中危 :6, 低危 :1 7 Select2 3.5.1 中危 :1 8 bootstrap-select 1.4.3 中危 :1 9 Ueditor 1.3.5 中危 :1 10 Apache Commons Codec 1.7 低危 :1 21 OA 系统是每个现代企业必不可少的重要信息系统之一,其自身 的安全性对于整个企业的信息安全至关重要, OA 系统中 由于开源软 件漏洞而导致的软件 供应链 安全风险 应该 被企业客户了解和关注 。 2、 国内 某流行 Windows 桌面软件 供应链安全分析 本 实例中分析的是 国内 流行的某跨平台 即时通讯 软件 , 该软件 具 备 发送语音短信、视频、图片和文字 等功能, 国内 用户数量巨大。 经 分析发现 , 该 即时通讯软件 的 Windows 桌面版本,使用了 Google V8 JavaScript Engine、 zlib、 OpenSSL、 libjpeg、 FFmpeg、 SQLite、 libpng 等在内的 80 余款 开源软件 , 存在 已知开源软件 漏洞 上百个, 其中超危漏洞 10 个,高危漏洞 26个。例如, zlib 的超危漏 洞 CVE-2016-9841, Google V8 JavaScript Engine 的超危漏洞 CVE- 2016-2843。 该软件中使用的部分开源软件及漏洞情况如下表所示。 序号 开源软件名称 开源软件版本 漏洞情况 1 Google V8 JavaScript Engine 3.29.88.17 超危 :4, 高危 :8, 中危 :4 2 zlib 1.2.8 超危 :2, 低危 :2 3 SQLite 3.10.2 超危 :4, 高危 :6, 低危 :9 4 SQLite 3.26.0 超危 :3, 高危 :3, 低危 :8 5 libpng 1.5.1 高危 :3,中 危 :11, 低危 :5 6 OpenSSL 1.1.1d 高危 :3,中 危 :3 7 curl 7.60.0 高危 :2,中 危 :6, 低危 :14 8 OpenSSL 1.1.1c 高危 :2,中 危 :5, 低危 :2 9 FFmpeg 3.2 高危 :1,中 危 :6, 低危 :9 10 libpng 1.6.37 中 危 :1 22 即时通信软件已经成为我们日常生活中不可缺少的沟通工具,其 软件供应链安全风险 可能会 影响到我们每个人,应该引起足够的重视。 3、 某 国产 网络设备固件 供应链安全分析 本实例中分析的是 某国产无线路由器 设备 , 该设备 支持远程脱机 下载 、 远程文件