【漏洞分析】CVE-2021-0920-Linux垃圾回收机制竞争UAF
【bsauce读论文】PSPRAY-基于时序侧信道的Linux内核堆利用技术
nf_table模块的 `net/netfilter/nf_dup_netdev.c`中的 `nft_fwd_dup_netdev_offload()`函数由于计算分配空间与实际初始化时判断条件不一致,存在**OOB write**,**溢出写入一个 `net_device` 对象的地址(位于kmalloc-4k)**,且漏洞对象的大小可以变化(由传入的含 `NFT_OFFLOAD_F_ACTION` 标记的rule个数决定,可以位于 `kmalloc-128` 或 `kmalloc-192` 等等),需要 `SYS_ADMIN` 权限。
openvswitch 内核模块中,reserve_sfa_size()函数存在整数溢出导致 **kmalloc-0x10000 堆溢出写**,需要利用页喷射构造 cross-cache 溢出。先创建pipe并splice到只读文件`/usr/bin/mount`,堆喷伪造 `pipe_buffer->flags = PIPE_BUF_FLAG_CAN_MERGE` ,这样就能往 `/usr/bin/mount` 文件写入 suid-shell 然后执行提权。
利用poll_list对象构造kmalloc-32任意释放
针对cred结构的cross-cache利用
在`nftables` 模块的 `NFT_MSG_NEWSET` 功能来添加 `nft_set` 时,处理 `lookup` 和 `dynset` expression 时,`nft_expr` 对象释放后仍位于`nft_set->binding` 链表中,新加入 `nft_expr` 时导致**UAF写**。
由于将 `route4_filter` 对象从链表中删除和释放时的检查条件不一致,导致该对象被释放后仍存于链表中,后面可以触发 **Double-Free**。需要 `User Namespaces` 才能触发。采用 DirtCred 方法进行提权。
【kernel exploit】CVE-2021-4154 错误释放任意file对象-DirtyCred利用
【bsauce读论文】 DirtyCred-内核凭证替换利用技术