GHOST系统之家 - Windows系统光盘下载网站!
当前位置:GHOST系统之家>电脑问题 > CVE-2020-14386: Linux kernel权限提升漏洞

CVE-2020-14386: Linux kernel权限提升漏洞

来源:Ghost系统之家浏览:时间:2022-11-01 19:57:39

Unit42研究人员在Linuxkernel源代码中发现了一个内存破坏漏洞,漏洞CVE编号为CVE-2020-14386。攻击者利用该漏洞可以从特权用户提权到Linux系统的root用户。

技术细节

该漏洞来源于net/packet/af_packet.c文件的tpacket_rcv函数中,是由于算术问题引发的内存破坏。该漏洞是2008年7月引入的(commit8913336),从2016年2月开始触发内存破坏(commit58d19b19cd99),很多开发者都尝试修复该漏洞,但提出的补丁都不足以预防内存破坏。

为触发该漏洞需要创建一个含有TPACKET_V2 ring缓存和 PACKET_RESERVE为特定值的原始包(AF_PACKETdomain,SOCK_RAW type )。

CVE-2020-14386: Linuxkernel权限提升漏洞

headroom 是用户指定大小的缓存,会在ring 缓存接收每个包的真实数据之前分配。该值可以通过setsockopt系统调用在用户空间来设置:

CVE-2020-14386: Linuxkernel权限提升漏洞

图 1. Setsockopt设置 – PACKET_RESERVE

如图1所示,会检查该值是否小于INT_MAX。该值是在补丁(https://lore.kernel.org/patchwork/patch/784412/)中新加的以防packet_set_ring中最小帧大小计算溢出。然后回验证页面是否是为接收或者传输的ring缓存分配的。这么做的目的是预防tp_reserve域和ringbuffer之间的不连续。

在设置了tp_reserve 值后,就可以通过含有PACKET_RX_RING的setsockopt系统调用来触发ring缓存的分配:

CVE-2020-14386: Linuxkernel权限提升漏洞

图 2. From manual packet – PACKET_RX_RING option.

这是在packet_set_ring函数中实现的。在ring缓存分配之前,会有许多对从用户空间接收的 tpacket_req结构的检查:

CVE-2020-14386: Linuxkernel权限提升漏洞

图 3. packet_set_ring 函数中的安全检查

从图 3中可以看出,首先会计算最小的帧大小,然后与从用户空间接收到的值进行对比验证。检查确保了在 tpacket头结构的每个帧和tp_reserve字节数之间的有空间。

在做完所有检查之后,ring缓存本身就会通过 alloc_pg_vec调用来分配:

CVE-2020-14386: Linuxkernel权限提升漏洞

图 4. packet_set_ring 函数中调用ring缓存分配函数

如上图所示,blocksize(区块大小)是由用户空间控制的。alloc_pg_vec函数会分配pg_vec数组,然后通过alloc_one_pg_vec_page函数分配给每一个区块链:

CVE-2020-14386: Linuxkernel权限提升漏洞

图 5. alloc_pg_vec实现

alloc_one_pg_vec_page 函数会用 __get_free_pages 来分配区块页:

CVE-2020-14386: Linuxkernel权限提升漏洞

图 6. alloc_one_pg_vec_page 实现

区块分配后,pg_vec 数组就会保存在嵌入在 packet_sock结构中的packet_ring_buffer结构。

当接口接收到包后,与tpacket_rcv函数绑定的socket、包数据、TPACKET 元数据都会写入到ring缓存中。

漏洞

图7是 tpacket_rcv函数的实现。首先,会调用skb_network_offset来提取接收到的包的网络头的偏移值到maclen中。在本例中,大小为14字节,即以太网header的大小。之后,会根据TPACKETheader、 maclen和tp_reserve值来计算netoff。

但是计算的过程可能会溢出,因为 tp_reserve的类型是 unsigned int,netoff的类型是unsignedshort,而对tp_reserve 值的唯一限制是小于INT_MAX。

CVE-2020-14386: Linuxkernel权限提升漏洞

图 7. tpacket_rcv中的算术计算

如图 7所示,如果包中设置了PACKET_vnet_HDR ,就会加入sizeof(structvirtio_net_hdr)。最后,以太网header的偏移量会计算会保存到macoff中。

如图 8所示, virtio_net_hdr结构会用 virtio_net_hdr_from_skb函数下入ring缓存中。 h.raw指向ring缓存中当前空闲的帧。

CVE-2020-14386: Linuxkernel权限提升漏洞

图 8. 调用tpacket_rcv中的 virtio_net_hdr_from_skb函数

研究人员设想有可能利用该溢出将netoff变成一个更小的值,所以macoff 可以接收一个大于block size的值,并尝试写入缓存中。

但是存在以下检查,所以无法实现:

CVE-2020-14386: Linuxkernel权限提升漏洞

图 9. tpacket_rcv 函数中的另一个检查

但是该检查并不足以预防内存破坏,因为仍然可以通过溢出netoff将macoff变成一个小一点的值。比如,将macoff变成小于10字节的sizeof(struct virtio_net_hdr),然后用virtio_net_hdr_from_skb 写入缓存的边界。

原语

通过控制macoff的值,就可以在控制的偏移量中初始化 virtio_net_hdr 结构。virtio_net_hdr_from_skb函数会首先将整个struct 零化,然后根据skb结构初始化结构内的所有域。

CVE-2020-14386: Linuxkernel权限提升漏洞

图 10. virtio_net_hdr_from_skb 函数的实现

但可以设置skb 只让零写入结构中。因此,就可以在__get_free_pages分配中零化1-10个字节。无需任何堆操作技巧就可以立刻引发kernel奔溃。

POC

触发该漏洞的PoC代码参见:https://www.openwall.com/lists/oss-security/2020/09/03/3

漏洞利用

漏洞利用过程参见:https://unit42.paloaltonetworks.com/cve-2020-14386/

补丁

研究人员提出的补丁参见:

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=acf69c946233259ab4d64f8869d4037a198c7f06

CVE-2020-14386: Linuxkernel权限提升漏洞

图 11. 研究人员提出的补丁

补丁的思想是如果将netoff 的类型从unsigned short修改为unsignedint,就可以检查是否会超过USHRT_MAX,如果超过的化就丢弃该包,以防进一步利用。

总结

研究人员其实也很奇怪Linuxkernel中至今还会存在如此简单的算术安全问题,而且之前没有被发现过。同时,非特权的用户空间也暴露出了本地权限提升的巨大攻击面。

鸿蒙官方战略合作共建——HarmonyOS技术社区

推荐系统

  • windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载

    windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载

    语言:中文版系统大小:5.31GB系统类型:Win11

    windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载,微软win11发布快大半年了,其中做了很多次补丁和修复一些BUG,比之前的版本有一些功能上的调整,目前已经升级到最新版本的镜像系统,并且优化了自动激活,永久使用。windows11中文版镜像国内镜像下载地址微软windows11正式版镜像 介绍:1、对函数算法进行了一定程度的简化和优化

  • 微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载

    微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载

    语言:中文版系统大小:5.31GB系统类型:Win11

    微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载,微软2022年正式推出了win11系统,很多人迫不及待的要体验,本站提供了最新版的微软Windows11正式版系统下载,微软windows11正式版镜像 是一款功能超级强大的装机系统,是微软方面全新推出的装机系统,这款系统可以通过pe直接的完成安装,对此系统感兴趣,想要使用的用户们就快来下载

  • 微软windows11系统下载 微软原版 Ghost win11 X64 正式版ISO镜像文件

    微软windows11系统下载 微软原版 Ghost win11 X64 正式版ISO镜像文件

    语言:中文版系统大小:0MB系统类型:Win11

    微软Ghost win11 正式版镜像文件是一款由微软方面推出的优秀全新装机系统,这款系统的新功能非常多,用户们能够在这里体验到最富有人性化的设计等,且全新的柔软界面,看起来非常的舒服~微软Ghost win11 正式版镜像文件介绍:1、与各种硬件设备兼容。 更好地完成用户安装并有效地使用。2、稳定使用蓝屏,系统不再兼容,更能享受无缝的系统服务。3、为

  • 雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载

    雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载

    语言:中文版系统大小:4.75GB系统类型:

    雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载在系统方面技术积累雄厚深耕多年,打造了国内重装系统行业的雨林木风品牌,其系统口碑得到许多人认可,积累了广大的用户群体,雨林木风是一款稳定流畅的系统,一直以来都以用户为中心,是由雨林木风团队推出的Windows11国内镜像版,基于国内用户的习惯,做了系统性能的优化,采用了新的系统

  • 雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO

    雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO

    语言:中文版系统大小:5.91GB系统类型:Win7

    雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO在系统方面技术积累雄厚深耕多年,加固了系统安全策略,雨林木风win7旗舰版系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。win7 32位旗舰装机版 v2019 05能够帮助用户们进行系统的一键安装、快速装机等,系统中的内容全面,能够为广大用户

  • 番茄花园Ghost Win7 x64 SP1稳定装机版2022年7月(64位) 高速下载

    番茄花园Ghost Win7 x64 SP1稳定装机版2022年7月(64位) 高速下载

    语言:中文版系统大小:3.91GB系统类型:Win7

    欢迎使用 番茄花园 Ghost Win7 x64 SP1 2022.07 极速装机版 专业装机版具有更安全、更稳定、更人性化等特点。集成最常用的装机软件,集成最全面的硬件驱动,精心挑选的系统维护工具,加上独有人性化的设计。是电脑城、个人、公司快速装机之首选!拥有此系统

  • 番茄花园 Windows 10 极速企业版 版本1903 2022年7月(32位) ISO镜像快速下载

    番茄花园 Windows 10 极速企业版 版本1903 2022年7月(32位) ISO镜像快速下载

    语言:中文版系统大小:3.98GB系统类型:Win10

    番茄花园 Windows 10 32位极速企业版 v2022年7月 一、系统主要特点: 使用微软Win10正式发布的企业TLSB版制作; 安装过程全自动无人值守,无需输入序列号,全自动设置; 安装完成后使用Administrator账户直接登录系统,无需手动设置账号。 安装过程中自动激活

  • 新萝卜家园电脑城专用系统 Windows10 x86 企业版 版本1507 2022年7月(32位) ISO镜像高速下载

    新萝卜家园电脑城专用系统 Windows10 x86 企业版 版本1507 2022年7月(32位) ISO镜像高速下载

    语言:中文版系统大小:3.98GB系统类型:Win10

    新萝卜家园电脑城专用系统 Windows10 x86企业版 2022年7月 一、系统主要特点: 使用微软Win10正式发布的企业TLSB版制作; 安装过程全自动无人值守,无需输入序列号,全自动设置; 安装完成后使用Administrator账户直接登录系统,无需手动设置账号。 安装过程