CVE-2022-0185:Linux kernel bug可实现Kubernetes容器逃逸
2022-2-8 11:50:0 Author: www.4hou.com(查看原文) 阅读量:40 收藏

kubernetes

Linux kernel bug可实现Kubernetes容器逃逸。

漏洞概述

近年来,容器已成为网络安全领域新的攻击目标。研究人员近日在Linux kernel中发现一个新的安全漏洞——CVE-2022-0185。该漏洞是Linux kernel "File System Context"(文件系统环境)组件中的一个堆缓存溢出漏洞,攻击者利用该漏洞可以实现越界写、权限提升、DoS和任意代码执行。

要利用该漏洞,攻击者必须有一个特殊的Linux 功能——CAP_SYS_ADMIN。攻击者需要使用非特权的命名空间或使用unshare 来进入含有CAP_SYS_ADMIN 权限的命名空间。该功能并不是Docker环境的默认设置,在启动容器时使用"–privileged"并不常见。而且Docker的"seccomp"过滤会默认拦截unshare命令,所以运行该命令一般是不允许的。

image.png

在Kubernetes集群中使用docker时,seccomp过滤默认是禁用的。在Kubernetes中运行容器的区别:

kubectl run -it ubutest2 --image=ubuntu:20.04 /bin/bash

容器运行后,就可以安装和使用pscap工具来检查有哪些能力:

image.png

目前相关的能力是没有的。但是如果使用unshare命令,就可以并不会被拦截,新shell具有所有的能力,使得系统也受到该漏洞的影响:

unshare command running as normal in Kubernetes

Kubernetes中正常运行unshare命令

攻击者可以运行该命令并获取具有完全能力的shell,包括在被入侵的系统中以root权限运行代码。触发该漏洞后,攻击者可以修改kernel内存中的值,并访问节点上运行的任意进程。

PoC参见:https://twitter.com/clubby789/status/1484482788313255939?s=20

漏洞影响

该漏洞影响5.1-rc1以来的所有Linux kernel版本,包括最新的5.4.173、5.10.93、5.15.1。也影响Ubuntu 20/21、Debian 11和部分Red Hat包。

修复方法

用户可以升级Linux kernel到5.16.2版本来修复该漏洞。但是该修复版本并不适用于所有Linux发行版,包括那些使用Linux kernel开发的系统。对于这些暂时没有可用补丁的系统,建议用户禁用非特权用户命名空间。

在Ubuntu系统中,可以使用以下命令来禁用非特权命名空间:

sysctl -w kernel.unprivileged_userns_clone=0

Red Hat 用户可以使用以下命令来禁用用户命名空间:

# echo "user.max_user_namespaces=0" > /etc/sysctl.d/userns.conf
# sysctl -p /etc/sysctl.d/userns.conf

如果用户需要非特权容器,需要确保seccomp过滤器拦截了unshare调用。

完整技术细节参见:https://blog.aquasec.com/cve-2022-0185-linux-kernel-container-escape-in-kubernetes

本文翻译自:https://www.bleepingcomputer.com/news/security/linux-kernel-bug-can-let-hackers-escape-kubernetes-containers/如若转载,请注明原文地址


文章来源: https://www.4hou.com/posts/GWkK
如有侵权请联系:admin#unsafe.sh