跳到主要内容
博客安全问题Linode安全摘要 2022年3月7日至14日

2022年3月7日至14日Linode安全摘要

Linode安全摘要

本周,我们将讨论Linux内核中的高严重性漏洞。

肮脏的管道--Linux本地权限升级

CVE-2022-0847允许无特权的Linux用户覆盖任何任意的只读文件。用户可以通过向根进程注入代码来利用这一漏洞,并将其权限升级为根用户。 

与无处不在的 "Dirty Cow"漏洞类似,攻击者可以运行Dirty Pipe漏洞并向文件写入文本。使得Dirty Pipe成为一个更容易被利用的漏洞的原因是,用户可以向任何任意文件写入文本,在某些情况下,他们可以通过SUID二进制文件轻松升级权限。 

根源 - Dirty Pipe 漏洞是由未初始化的pipe_buffer.flags变量引起的。管道是用于进程间通信的工具,一端向其推送数据,而另一端可以拉动这些数据。一个提交使未初始化的管道缓冲区成为一个高严重性的漏洞。当把PIPE_BUF_FLAG_CAN_MERGE注入页面缓存引用时,有可能覆盖页面缓存中的数据,只需把新数据写入以特殊方式准备的管道中即可。

这个漏洞有一些注意事项: 

  • 攻击者必须有文件的读取权限
  • 偏移量必须不在页面边界上 
  • 写入不能跨越页面边界 
  • 该文件不能被调整大小 

目前,这个漏洞还没有现成的缓解措施。如果你使用的是大于5.8的Linux内核版本,厂商建议打补丁到以下版本:5.16.11、5.15.25和5.10.102。

2022年3月14日更新:最新的Linode内核已经推出,它修复了Dirty Pipe。

通过cgroups的容器逃生

控制组,或称cgroups,是Linux内核的一项功能,为进程分配和分配计算机资源的使用。在某些情况下,这些进程会被组织到分层的组中,资源分配是根据组来分配的。

C组通常在Linux容器中使用,因为在一个容器中运行的多个进程需要被分组。 

CVE-2022-0492是一个容器逃逸漏洞,用户可以逃逸容器并透支到主机。这只影响到cgroup架构v1。 

根源- 该漏洞涉及release_agent文件,这是cgroups v1的一个功能。release_agent文件允许管理员配置一个 "release agent",当cgroup中的一个进程结束时,该文件会运行。release_agent仅在根cgroup目录中可见,并影响其所有子cgroup。每当一个进程死亡时,内核会检查其notifiy_on_release是否启用,如果启用了,那么它就会生成配置好的release_agent二进制。容器逃逸的发生是因为Linux没有检查设置release_agent文件的进程是否有管理权限(例如CAP_SYS_ADMIN能力)。 

这个漏洞可以通过以下措施来缓解:

  • 启用AppArmor、SELinux或Seccomp安全配置文件 
  • 如果没有必要,禁用非特权用户命名空间
  • 以非特权用户身份运行容器

Palo Alto的安全研究人员创建了一个测试,以确定你的容器环境是否有CVE-2022-0492的漏洞:

这个漏洞背后有一些注意事项。为了成功利用这个漏洞,你需要满足以下条件才能成功利用: 

  • 容器需要以特权用户(root或具有no_new_privs 标志的用户)身份运行。
  • 需要禁用AppArmor、SELinux或Seccomp
  • 主机需要启用非特权用户名称空间
  • 容器将需要在根目录下的v1 cgroup中 

通过堆越界写入的Netfilter本地权限升级

Netfilter是Linux内核的一个框架,允许发生各种与网络有关的操作。它可以实现数据包过滤、网络地址(和端口)转换、数据包记录和用户空间数据包排队。你也可以在无状态和有状态包过滤的基础上建立互联网防火墙。 

CVE-2022-25636,是一个漏洞,本地用户可以在函数nft_fwd_dup_netdev_offload)中执行堆越界写入。nf_dup_netdev.c) 并获得权限。该漏洞目前影响到5.4-rc1至5.6.10的内核版本。 

根源- 在nft_fwd_dup_netdev_offload函数中,当在启用了硬件卸载的链上设置dup或fwd流量规则时,ctx->num_actions++被用来偏移到flow->rule->action. entries数组(nf_dup_netdev.c:67)。错位发生在调用增量的数量和分配的条目数量之间。分配的数组大小基于具有expr.offload_flags&NFT_OFFLOAD_F_ACTION(nf_tables_offload.c:97)的nftables表达式的数量,但只有即时表达式类型有此功能(不是dup或fwd)。这种差异允许某人创建一个带有dup/fwd表达式的规则,而没有相应/前置的即时表达式,导致条目数组大小不足,以及任意数量的界外数组写入。有人可以写一个脚本并执行一个OOB写,可以变成一个内核ROP/本地权限升级。

建议将你的内核打成最新版本。 


注释

留下回复

您的电子邮件地址将不会被公布。 必须填写的字段被标记为*