让我们从Angular和React核心项目中发现的不同漏洞开始这篇报告。然后我们将审查每个漏洞的严重故障,并比较两框架间之间针对漏洞的不同表现。最后,我们将审查一个漏洞从被发现到被修复的时间间隔,以及被修复到最终发布更新版本的时间间隔。
Angular核心项目:安全漏洞概况
当我们研究Angular核心项目时,我们专门调查了Angular v1.x分支的安全漏洞情况。Angular v1.x是被广泛使用但目前看来已经过时且Angular官方不再维护的版本,所以其安全状况值得调查。
我们统计了Angular和Angular/core的npm包每月下载数量,这两者分别代表了Angular v1.x和Angular v2.0及更高版本。根据我们统计的数据,我们发现Angular v1.x在整个Angular市场中仍然占有相当大的份额,占所有Angular版本下载量的28%。虽然有更新的版本在持续发布,但Angular v1.x仍然在每月拥有数百万的下载量。
以下是2018年6月至2019年7月Angular各版本的下载量
上图展示了Angular v1.x版本相较于其他Angular版本的受欢迎程度,其中Angular v2.0及更高版本用黄线表示在一起。我们可以看到Angular v1.x单独代表了所有版本下载量的三分之一(准确的说是28%)。
我们可以由此推测,Angular v1.x的继续使用很有可能是由中大型企业仍然维护的遗留应用程序。对于这些组织来说,技术更改和迁移是非常昂贵的,但相关技术应用到的程序仍需要定期的维护与发布。
以上这一推测,更加强调了跟踪开源组件中的安全漏洞是至关重要的。目的是为了快速解决应用程序在生产部署中发现的任何漏洞,并确保这些漏洞不会随着时间推移而升级和恶化公司的安全状况。
考虑到这些问题,我们在Angular v1.x的6个不同的发布分支中总共发现了19个安全漏洞,下面的图表具体列出了各个小版本对应的漏洞数量。
Angular 和 React:良好的利用漏洞数据库是发现安全问题的关键
尽管Synk已经跟踪了23个Angular v1.x的漏洞,但没有任何一个漏洞拥有CVE参考。这是因为Angular没有通过任何官方认可的CVE项目公开。当然这不一定是Angular方面的失败,因为这种情况是一种常见的做法,CVE的设计考虑到了商业供应商,意味着需要大量的时间以及知识来进行专业的归档,但对于开源项目来说,这样的CVE并不是十分适合扩展。
在没有CVE的情况下,漏洞只能由专门的分析人员进行跟踪,这些分析人员使用自己定制化的方式跟踪和管理。目前这种方式只出现在极少的解决方案当中。
一些漏洞跟踪工具比如npm aduit会对漏洞进行跟踪,但也会漏掉许多缺少CVE的漏洞。比如利用npm aduit进行跟踪时,不幸漏掉了Angular v1.x的23个漏洞以及全部的React漏洞,因此利用npm aduit做漏洞跟踪的开发者可能需要格外注意这一点。下图为利用npm aduit对Angular v1.2.32版本的漏洞跟踪,结果为0个漏洞
以下这张表是Synk的漏洞数据库针对Angular v1.x各版本之间的对比,例如版本1.2.32实际上是具有11个安全漏洞存在的。
版本 |
发布日期 |
开源许可 |
直接漏洞 |
(pre-release) |
21 Nov, 2016 |
MIT |
3 medium |
(pre-release) |
27 Oct, 2016 |
MIT |
3 medium |
11 Oct, 2016 |
MIT |
6 medium |
|
11 Oct, 2016 |
MIT |
3 high 7 medium 1 low |
让我们来继续看一下Synk针对Angular v1.2.32项目的扫描结果:
以上这些漏洞是通过Synk UI 和 Synk CLI工具报告生成的。除此之外Synk UI还能根据Github等系统的集成,自动为开发者创建fix-PRs来升级易受到攻击的包。
React的情况类似,npm aduit遗漏了所有三个React相关的漏洞。在三个公开已知的漏洞中(两个影响react核心库,一个影响react dom核心库),只有后者分配了一个CVE,并在国家漏洞数据库进行跟踪(nvd.nist.gov)。
React核心项目:概况
我们认为react,react-dom以及prop-types库构成了React的核心模块,同时它们也是应用了React框架的项目的基础。这是也是我们为什么要针对React出具一份报告。
对于这些核心模块,我们总共发现了三个漏洞:两个在react中,一个在react dom中。
这三个都是跨站点脚本(XSS)漏洞。React npm包中的两个XSS漏洞相当古老,包括2013年发布的0.5.x版本和2015年发布的0.14之前的版本。
另一方面,react dom v16.x发布分支中的XSS漏洞是最近才出现的,一年多前,也就是2018年8月才被披露。然而,这种漏洞只在其他前提条件存在时才会发生,例如在服务器端渲染上下文中使用React-DOM库。尽管如此,我们始终建议保持最新的安全修复,并尽早升级开放源代码组件,以避免任何不必要的安全风险。
Preact (react的轻量级实现)
除了这三个核心React项目漏洞之外,我们还跟踪了Preact中不可信数据安全漏洞的中的反序列化。由于许多开发人员更喜欢Preact而不是React,因为它轻量级且速度更快,我们认为值得仔细研究一下。其中中等严重性的Preact漏洞影响2019年3月和4月的10.0.0预发行分支版本。
我们强烈建议您下载完整版的报告,同时我们提供了以下内容:
- Angular和React:2019安全状况比较(本文)