DirtyPipe (CVE-2022-0847) -新的DirtyCoW?

几天前,安全研究员马克斯·凯勒曼发布了一个名为DirtyPipe的漏洞编号为CVE-2022-0847。此漏洞会影响Linux内核,如果被利用,可以允许本地攻击者获得根权限。该漏洞获得了广泛的媒体跟踪,因为它影响所有基于linux的5.8或更高版本内核的系统,而不需要任何特定的利用先决条件。
在这篇博客文章中,我们提供了DirtyPipe漏洞的概述和如何补救的指导,以及我们在对该漏洞的研究中发现的缓解选项。
什么是DirtyPipe漏洞(CVE-2022-0847)?
DirtyPipe是Linux内核中的一个本地特权升级漏洞,允许本地攻击者绕过任何文件权限,并在特定条件下向任何文件写入任意数据。该漏洞从5.8版本开始影响Linux内核,并在最新的内核版本(即5.16.11、5.15.25和5.10.102)中得到修复。
此漏洞类似于DirtyCoW2016年发现的漏洞,允许向只读资源写入数据。2022世界杯阿根廷预选赛赛程然而,主要的区别是DirtyPipe允许攻击者写入只读文件,而DirtyCoW允许写入只读内存映射。
CVE-2022-0847技术概述
CVE-2022-0847是在使用接头()系统调用。基本上,这个系统调用在文件描述符和管道之间移动数据,而不需要数据跨越用户模式/内核模式地址空间边界,这有助于计算性能。通常,在发送文件时,内存页(大小通常为4KB)被复制到内存管理的空间中页面缓存.数据从那里被复制到用户空间,并保留在缓存中,以避免不必要的硬盘I/O。
将文件读入管道时(通过接头()系统调用),同时任意数据被写入管道,由错误引起的错误状态导致数据最终位于文件使用的同一页缓存中,因此写入管道的数据最终位于文件中,即使文件是以只读模式打开的(O_RDONLY).我们强烈推荐技术文章欲知详情。
该漏洞允许本地攻击者在以下情况下将任意数据写入任何文件,而不考虑权限:
- 文件必须能被攻击者读取
- 被覆盖的偏移量不能在页边界上(页大小通常为4096)
- 写操作不能跨越页边界
- 文件无法调整大小
- 文件必须由页面缓存支持(例如普通文件)
谁会受到CVE-2022-0847的影响?
CVE-2022-0847影响从5.8到5.16.11、5.15.25和5.10.102之前的任何版本的Linux内核。由于这个问题涉及到Linux内核中常用的代码,它会影响所有主要的Linux发行版,包括默认配置下的Ubuntu和Debian。
云提供商是否受到CVE-2022-0847的影响?
目前,所有主要的云提供商仍然受到影响,该漏洞可以在AKS、EKS和GCP提供的实例上被利用。
JFrog产品易受攻hth华体会最新官方网站击吗?
JFrog的安全团队已经针对这个问题进行了内部研究,得出的结论是JFrog产品不容易受到这个问题的影响。hth华体会最新官方网站
CVE-2022-0847的影响是什么?
本地攻击者很容易利用该漏洞获得根权限,例如重写敏感文件,如“/ etc / passwd”或者劫持setuid root二进制用恶意代码覆盖ELF。
CVE-2022-0847可以用来逃离集装箱吗?
在正常情况下,该漏洞不允许攻击者逃脱容器,因为通常情况下,容器中挂载的文件不会被主机保存。但是,在容器中以只读方式挂载敏感主机文件的情况下,该漏洞将允许容器中的攻击者修改它们,并可能跳出容器(取决于这些文件的使用上下文)。
请注意,CVE-2022-0847只能覆盖页缓存支持的文件,因此攻击者不能使用CVE-2022-0847写入特殊文件,如设备文件和/或伪文件系统,这将促进容器转义(例如通过并且release_agent)
如何补救CVE-2022-0847?
我们建议将Linux内核升级到以下5.16.11、5.15.25、5.10.102或更高版本之一。如果这是不可能的,我们强烈建议修补Linux内核使用这补丁。
| 发行版 | 脆弱的版本 | 固定的版本 |
| Ubuntu | 20.04.2及以上版本 | 还没有补丁 |
| Debian | 牛眼灯5.10.84-1 | 牛眼灯5.10.92-2 书虫和sid 5.16.11-1 |
| 红色的帽子 | 不影响* | 还没有补丁 |
注意RHEL8(使用Linux内核4.18)被红帽标记为受影响由于CVE-2022-0847的潜在问题(缺少初始化)已经存在于内核中从4.9版开始.然而-目前唯一已知的利用矢量(使用PIPE_BUF_FLAG_CAN_MERGE)在5.8版中引入。因此,在未来,介于4.9到5.7之间的Linux内核版本可能会通过不同的途径被利用,但目前的漏洞都无法在这些版本上发挥作用。
CVE-2022-0847有哪些缓解方案?
如果无法升级或修补内核,则可以部署一个seccomp配置文件,该配置文件禁止拼接系统调用。虽然这可能会在某些软件包中导致问题,但阻塞系统调用通常不会对合法应用程序产生影响,因为使用此系统调用的情况相对较少。
具体来说,为了保护Docker容器,可以修改Docker的容器默认的seccomp配置文件并从允许的系统调用列表中删除splice:

创建自定义seccomp配置文件后,可以运行以下命令将其应用到新的Docker容器:
Docker运行——security-opt seccomp=/path/to/seccomp/profile。json……
与JFrog安全研究保持最新
在我们的JFrog安全研究团队中跟踪最新的发现和技术更新安全研究博客文章并在推特上@JFrogSecurity.
找到易受攻击的版本与JFrog x射线
除了曝光新安全漏洞和威胁,JFrog提供开发人员和安全团队轻松访问最新的相关信息,为他们的软件与自动安全扫描JFrog x射线SCA工具.
