CWE4.8 -- 2022年危害最大的25种软件安全问题
1. CWE 4.8的变化
2022年过了一半了,继《CWE 4.7中的新视图 – 工业控制系统的安全漏洞类别》 发布还不到2个月, 6月底又出了一个版本 – CWE4.8。做为软件安全研究的重要标准,我们来看下这个版本有那些变化。
变化类型 | Version 4.7 | Version 4.8 |
---|---|---|
弱点 | 926 | 927 |
分类 | 351 | 352 |
视图 | 47 | 48 |
废弃 | 62 | 62 |
汇总 | 1386 | 1389 |
- 从汇总表可以看出:
下面我们来的看下具体弱点的变动。
1.1. CWE-1386:Windows 连接点/挂载点上的不安全操作
这是个新增的Windows的问题,具体位置如下图:
这个新弱点被划分在CWE-664(在生命周期中对资源的控制不恰当)下CWE-706(使用不正确的解析名称或索引), 以及CWE-59(在文件访问前对链接解析不恰当(链接跟随))下的一个子弱点。
在 Windows 中,NTFS5 允许文件系统可以对对象生成重解析点(reparse points)。
- 连接点: 应用程序可以创建从一个目录到另一个目录的硬链接,称为连接点。
- 挂载点: 创建从目录到驱动器号的映射,称为挂载点。
Windows文件或者目录可以包含一个重解析点,它是一个用户自定义数据的集合。储存它们的程序和解析处理这些数据文件的系统过滤器能识别这些数据的格式。 当一个应用程序设置了一个重解析点,它在保存数据时将添加一个唯一的重解析标签用于标示所存储的数据。当一个文件系统打开一个带重解析点的文件时,首先尝试寻找由重解析点所标识文件格式关联的文件系统过滤器,如果找到文件系统过滤器,过滤器处理重解析点数据所指示的文件。如果没有找到过滤器,那么打开文件的操作失败。
CWE-1386是由于windows打开一个文件或目录时,如果该文件或目录关联到一个目标控制范围之外的连接点或挂载点,则可能允许攻击者使软件读取、写入、删除或以其他方式对未经授权的文件进行操作。
如果一个文件被特权程序使用,它可以被一个敏感文件的硬链接替换(例如,AUTOEXEC.BAT),那么攻击者可以提升特权。当进程打开文件时,攻击者可以冒用该进程的特权,诱骗特权进程读取、修改或删除敏感文件,阻止程序准确处理数据,操作也可以指向注册表和信号量。
例如:CVE-2021-26426,特权服务允许攻击者使用目录连接删除未经授权的文件,从而导致以 SYSTEM 身份执行任意代码。
1.2. CWE-1388:物理访问问题
这是个硬件设计上新增的硬件分类,具体如下图。
老样子,硬件问题不是我的专长,不做过多的解读。
2. CWE-1387:CWE Top 25 (2022)
距离2021年的《CWE发布2021年最危险的25种软件缺陷》差不多刚好一年。岁月如梭,光阴似箭,好快!又是一年荷花盛。
- 今年的排行榜
排行 | CWE | 得分 | KEV Count (CVEs) | 变动 |
---|---|---|---|---|
1 | CWE-787:跨界内存写 | 64.2 | 62 | 0 |
2 | CWE-79:在Web页面生成时对输入的转义处理不恰当(跨站脚本) | 45.97 | 2 | 0 |
3 | CWE-89:SQL命令中使用的特殊元素转义处理不恰当(SQL注入) | 22.11 | 7 | +3 |
4 | CWE-20:输入验证不恰当 | 20.63 | 20 | 0 |
5 | CWE-125:跨界内存读 | 17.67 | 1 | -2 |
6 | CWE-78:OS命令中使用的特殊元素转义处理不恰当(OS命令注入) | 17.53 | 32 | -1 |
7 | CWE-416:释放后使用 | 15.5 | 28 | 0 |
8 | CWE-22:对路径名的限制不恰当(路径遍历) | 14.08 | 19 | 0 |
9 | CWE-352:跨站请求伪造(CSRF) | 11.53 | 1 | 0 |
10 | CWE-434:危险类型文件的不加限制上传 | 9.56 | 6 | 0 |
11 | CWE-476:空指针解引用 | 7.15 | 0 | +4 |
12 | CWE-502:不可信数据的反序列化 | 6.68 | 7 | +1 |
13 | CWE-190:整数溢出或超界折返 | 6.53 | 2 | -1 |
14 | CWE-287:认证机制不恰当 | 6.35 | 4 | 0 |
15 | CWE-798:使用硬编码的凭证 | 5.66 | 0 | +1 |
16 | CWE-862:授权机制缺失 | 5.53 | 1 | +2 |
17 | CWE-77:在命令中使用的特殊元素转义处理不恰当(命令注入) | 5.42 | 5 | +8 |
18 | CWE-306:关键功能的认证机制缺失 | 5.15 | 6 | -7 |
19 | CWE-119:内存缓冲区边界内操作的限制不恰当 | 4.85 | 6 | -2 |
20 | CWE-276:缺省权限不正确 | 4.84 | 0 | -1 |
21 | CWE-918:服务端请求伪造(SSRF) | 4.27 | 8 | +3 |
22 | CWE-362:使用共享资源的并发执行不恰当同步问题(竞争条件) | 3.57 | 6 | +11 |
23 | CWE-400:未加控制的资源消耗(资源耗尽) | 3.56 | 2 | +4 |
24 | CWE-611:XML外部实体引用的不恰当限制(XXE) | 3.38 | 0 | -1 |
25 | CWE-94:对生成代码的控制不恰当(代码注入) | 3.32 | 4 | +3 |
这个排名是CWE的团队,依据美国国家标准与技术研究院 (National Institute of Standards and Technology(NIST))的 国家漏洞库(National Vulnerability Database(NVD)) 记录的披露漏洞(Common Vulnerabilities and Exposures(CVE)), 以及网络安全和基础设施安全局 (Cybersecurity and Infrastructure Security Agency(CISA))的已知披露漏洞目录(Known Exploited Vulnerabilities (KEV)), 通过通用缺陷评分系统(Common Vulnerability Scoring System (CVSS))对每个缺陷进行评分。排名统计了2020 到2021年的37,899 个CVE,每个CVE根据问题的发生率和严重程度的一个公式计算得分,最终得到问题的排名。
- 具体算法可参考 《话说CWE 4.2的新视图》。
2.1. 排名变动情况
-
具体变动如下图:
-
上升最快的名单:
- CWE-362:使用共享资源的并发执行不恰当同步问题(竞争条件): 从 33 上升到 22;
- CWE-94:对生成代码的控制不恰当(代码注入): 从 28 上升到 25;
- CWE-400:未加控制的资源消耗(资源穷尽): 从 27 上升到 23;
- CWE-77:在命令中使用的特殊元素转义处理不恰当(命令注入)): 从25 上升到 17;
- CWE-476:空指针解引用: 从 15 上升到 11。
-
下降最快的名单:
- CWE-306:关键功能的认证机制缺失: 从 11 下降到 18;
- CWE-200:信息泄露: 从 20 下降到 33;
- CWE-522:不充分的凭证保护机制: 从 21 下降到 38;
- CWE-732:关键资源的不正确权限授予: 从 22 下降到 30。
-
新进前25的有:
- CWE-362:使用共享资源的并发执行不恰当同步问题(竞争条件): 从 33 上升到 22;
- CWE-94:对生成代码的控制不恰当(代码注入): 从 28 上升到 25;
- CWE-400:未加控制的资源消耗(资源穷尽): 从 27 上升到 23;
-
跌出前25的有:
- CWE-200:信息泄露: 从 20 下降到 33;
- CWE-522:不充分的凭证保护机制: 从 21 下降到 38;
- CWE-732:关键资源的不正确权限授予: 从 22 下降到 30。
2.2. TOP 25的记分明细
排名 | CWE | NVD计数 | Avg CVSS | 总分 |
---|---|---|---|---|
1 | CWE-787:跨界内存写 | 4123 | 7.93 | 64.2 |
2 | CWE-79:在Web页面生成时对输入的转义处理不恰当(跨站脚本) | 4740 | 5.73 | 45.97 |
3 | CWE-89:SQL命令中使用的特殊元素转义处理不恰当(SQL注入) | 1263 | 8.66 | 22.11 |
4 | CWE-20:输入验证不恰当 | 1520 | 7.19 | 20.63 |
5 | CWE-125:跨界内存读 | 1489 | 6.54 | 17.67 |
6 | CWE-78:OS命令中使用的特殊元素转义处理不恰当(OS命令注入) | 999 | 8.67 | 17.53 |
7 | CWE-416:释放后使用 | 1021 | 7.79 | 15.5 |
8 | CWE-22:对路径名的限制不恰当(路径遍历) | 1010 | 7.32 | 14.08 |
9 | CWE-352:跨站请求伪造(CSRF) | 847 | 7.2 | 11.53 |
10 | CWE-434:危险类型文件的不加限制上传 | 551 | 8.61 | 9.56 |
11 | CWE-476:空指针解引用 | 611 | 6.49 | 7.15 |
12 | CWE-502:不可信数据的反序列化 | 378 | 8.73 | 6.68 |
13 | CWE-190:整数溢出或超界折返 | 452 | 7.52 | 6.53 |
14 | CWE-287:认证机制不恰当 | 412 | 7.88 | 6.35 |
15 | CWE-798:使用硬编码的凭证 | 333 | 8.48 | 5.66 |
16 | CWE-862:授权机制缺失 | 468 | 6.53 | 5.53 |
17 | CWE-77:在命令中使用的特殊元素转义处理不恰当(命令注入) | 325 | 8.36 | 5.42 |
18 | CWE-306:关键功能的认证机制缺失 | 328 | 8 | 5.15 |
19 | CWE-119:内存缓冲区边界内操作的限制不恰当 | 323 | 7.73 | 4.85 |
20 | CWE-276:缺省权限不正确 | 368 | 7.04 | 4.84 |
21 | CWE-918:服务端请求伪造(SSRF) | 317 | 7.16 | 4.27 |
22 | CWE-362:使用共享资源的并发执行不恰当同步问题(竞争条件) | 301 | 6.56 | 3.57 |
23 | CWE-400:未加控制的资源消耗(资源耗尽) | 277 | 6.93 | 3.56 |
24 | CWE-611:XML外部实体引用的不恰当限制(XXE) | 232 | 7.58 | 3.38 |
25 | CWE-94:对生成代码的控制不恰当(代码注入) | 192 | 8.6 | 3.32 |
2.3. 排名统计的改进
为了更好的让人们明白每一个缺陷的特性,在缺陷的映射上,尽量映射到更细力度的缺陷枚举类型上,比如base、Variant、Compound,这样有利于从更细粒度上解决问题。所以TOP 25中的CWE的类型正逐步从支柱(pillar)、类(Class) 向更细力度的缺陷枚举类型base、Variant、Compound上过度。
比如:
- Class/Pillar 从2020年的36%,降到现在的28%;
- Class 从2019年的43%,降到现在的16%;
- Base/Var/Comp 从2019年的 57%上升到84%;
- 对应到base类型的问题,从2019年的 50% 提升到现在的 76%。
Year | 2019 | % | 2020 | % | 2021 | % | 2022 | % |
---|---|---|---|---|---|---|---|---|
Unique Class/Pillar CWEs | 7 | 28% | 9 | 36% | 8 | 32% | 7 | 28% |
Unique Base/Variant/Compound CWEs | 18 | 72% | 16 | 64% | 17 | 68% | 18 | 72% |
Mappings to Class | 9548 | 43% | 6450 | 30% | 3058 | 17% | 3626 | 16% |
Mappings to Base/Var/Comp | 12411 | 57% | 14772 | 70% | 14839 | 83% | 19254 | 84% |
Total Maps with Top 25 CWEs | 21959 | 0% | 21222 | 0% | 17897 | 0% | 22880 | 0% |
Maps to All CWEs | 26341 | 0% | 27168 | 0% | 24282 | 0% | 30681 | 0% |
Maps to Bases | 10919 | 50% | 12988 | 61% | 13291 | 74% | 17386 | 76% |
Maps to Variants | 799 | 4% | 918 | 4% | 807 | 5% | 1021 | 4% |
Maps to Compounds | 693 | 3% | 866 | 4% | 741 | 4% | 847 | 4% |
- 注:CWE的枚举类型详见:《话说CWE 4.2的新视图》。
3. 结论
- 前十位的缺陷变动不大,主要还是内存读写造成的缓冲区溢出,以及外部输入校验所带来的各种注入问题;
- 内存安全问题是C语言指针的灵活性给我们带来的后遗症,也一直是困扰我们的主要安全问题。现在安全性已经成为软件开发的重要需求。新兴的Rust语言是否能够给在内存管理方面带来较大的改善,还需要时间的证明;或者在内存安全和编程灵活性的平衡上,寻找一种更容易被广大开发者接受的新语言;
- 外部输入引发的各种注入类问题,在今后相当长的一段时间会长期伴随者我们。零信任、供应链安全框架的提出,虽然在安全概念和设计指导上达到了一个新的高度,但在软件应用落地时,还取决于广大的开发人员对安全意识的逐步提高,从而在代码中有效的执行各种对外部输入的有效的检测,以及各种凭证的有效验证。当然凭证的校验可以通过使用安全模块来进一步降低开发中的安全风险;
- 在TOP 25的数据统计上,CWE在尽量将各种软件问题归结到更细力度的问题分类上。通过这些年新版本的快速发布,已经增加了相当多的细分类型(Base/Variant/Compound)。 从2017年3.0的714个增加到了现在4.8版本的927个,增加了将近30%。这也说明我们对问题的认知程度在细化和加深,这更加有利于我们在安全防范中,采取更精细的检查和更具针对性的防范措施,从而降低安全防御的成本。
4. 参考
- 点赞
- 收藏
- 关注作者
评论(0)