当前位置:首页 > 单片机 > 程序喵大人
[导读]CVE-2021-22555:一个影响2006年(Linuxkernelv2.6.19-rc1发布)至今(Linuxkernelv5.12-rc8)的所有Linux内核版本的漏洞,可导致本地提权与容器逃逸;该漏洞是个内核级漏洞,跟Linux的发行版本没有关系,也就是说只要Linu...


CVE-2021-22555:一个影响2006年(Linux kernel v2.6.19-rc1 发布)至今(Linux kernel v5.12-rc8)的所有Linux内核版本的漏洞,可导致本地提权与容器逃逸;该漏洞是个内核级漏洞,跟Linux的发行版本没有关系,也就是说只要Linux 内核版本在v2.6.19-rc1 ~v5.12-rc8 之间的内核,都存在被黑客利用该漏洞攻击的可能。


该漏洞是由Andy Nguyen (theflow@)发现,于2021年07月16日发布。换句话说,该漏洞已经存在了15年之久,都没有被人发现。该漏洞将允许本地用户通过用户名空间获取权限提升,和容器逃逸。



1.漏洞概述


漏洞编号CVE-2021-22555
内核组件kernel-netfilter
漏洞类型Linux kernel堆溢出、特权提升
影响版本Linux Kernel : v2.6.19-rc1 ~ v5.12-rc8
简述: Linux 内核模块Netfilter中存在一处权限提升漏洞,在 64位系统 上为 32位进程 处理 setsockopt IPT_SO_SET_REPLACE(或 IP6T_SO_SET_REPLACE)时,如果内核选项CONFIG_USER_NS 、CONFIG_NET_NS被开启,则攻击者可以通过该漏洞实现权限提升,以及从docker、k8s容器中实施容器逃逸。



2.漏洞环境和样例



2.1.环境准备


Linux发行版:Ubuntu 20.04.2 LTS

Linux kernel 版本:5.8.0-48-generic


如图:




2.2.利用样例





3 漏洞原理


在Linux内核代码net/netfilter/x_tables.c中的 xt_compat_target_from_user 函数内的第1129行,在使用memset()时并未对传进来的参数进行校验,会导致在写0时,越过堆的大小,导致“堆溢出”,从而破坏堆与堆之间的边界。


而写超的0 的内核内存,刚好又在应用层程序(恶意程序)通过堆喷技术拿到感知控制。通过搜索,可以找到被写超的内核内存;恶意程序在应用层建立与这段内核内存的联系,把要执行代码commit_creds(prepare_kernel_cred(NULL))封装到回调函数内;利用内核机制在内核内存中建立与回调机制使用关系,再把刚才封装的函数地址更新到内核内存中。当主动释放这段内核内存,触发回调函数,从而调用到commit_creds()函数把权限升级到root权限。



4 前导技术知识点


4.1 UAF (Use-After-Free)


是一个与程序运行期间不正确使用动态内存相关的漏洞利用方式。


程序在释放内存位置后,系统不会马上回收内存。指针指向的那段内存依然存在,并且内容没有被清除,攻击者可以利用该错误来入侵该程序。(本次漏洞重点使用。通过UAF,可以达到同一块内存在不同的操作对象之间交换控制管理权)



4.2 SMAP

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭