CVE-2021-26708 利用四字节释放特定地址,修改内存

vsock_poc:调查CVE-2021-26708背后的错误 vsock_poc 调查CVE-2021-26708背后的错误 此存储库包含有关CVE-2021-26708的小文章,以及如何将该错误转变为“免费使用后写入”原语。 这里的PoC并不是一个完整的漏洞利用工具,只是我尝试调查此错误时使用的工具。 释放后,它可以成功使用kmalloc-64高速缓存中的条目,但是没有任何代码可以修饰内存并将感兴趣的东西放入插槽。 这是报告的一个有趣的错误。 它之所以引起我的注意,是因为补丁是如此简单,只是阻止了在5个不同位置的锁之外获取对vsk->transport的引用。 下面是从补丁程序到可以用于开发的无用后使用原语的过程的简短演练。 本演练对希望探索此错误的其他人应有所帮助。 环境设定 我下载了Linux内核5.10.13,并手动撤消了上面显示的补丁。 有关构建和运行内核的更多信息,下面是一个很好的参考。 我还修改了引导参数以启用使用kgdb的内 立即下载

看个漏洞吧,挖洞工具还没掌握到精髓。
原文链接

漏洞原因

vsock_stream_etssockopt()  {
struct sock *sk;
    struct vsock_sock *vsk;
    const struct vsock_transport *transport;

    /* ... */

    sk = sock->sk;
    vsk = vsock_sk(sk);
    transport = vsk->transport;
    lock_sock(sk);      //  内核sock锁

}

vsk 存在本地变量,当sock被条件竞争释放后,这个本地保存的变量将会实现一个四字节的地址写漏洞。
在这里插入图片描述

这里,vvs是指向内核内存的指针,它已经在virtio_transport_destruct()中被释放。struct virtio_vsock_sock的大小为64字节,位于kmalloc-64块缓存中。buf_alloc字段类型为u32,位于偏移量40。VIRTIO_VSOCK_MAX_BUF_SIZE是0xFFFFFFFFUL。*val的值由攻击者控制,它的四个最不重要的字节被写入释放的内存中。
类似这样,setsockopt触发vsock_stream_etssockopt. 但被第二个进程connect竞争等待,这里vsock_stream_connect有一定的几率先于vsock_stream_setsockopt操作释放vsock_sock, 但vsock_stream_setsockopt保存了备份,所以出现了uaf。

利用方式

在这里插入图片描述
为了在释放后执行virtio_transport_notify_buffer_size, 需要对setsockopt 参数size进行随机变化,绕过参数检查

 if (val != vsk->buffer_size &&
      transport && transport->notify_buffer_size)
        transport->notify_buffer_size(vsk, &val);

利用msg_msg机制堆喷占位,实现kmalloc-64内存占用。这时vsock_sock->buf_alloc的位置,也就是msg_msg->security的位置前四字节将会被修改。

地址泄露

为了泄露地址,这里利用内核报警 virto_transport_send_pkt_info()。作者gdb分析了崩溃地址的的寄存器地址,分析得出了RCX, RBX 分别包含了virto_vsock_sock 和 vsock_sock。这个方式还是有点怪,不过应该也可以算可行。

目前我们可以提前释放这两个指针。
在这里插入图片描述
再往后的操作有点杀脑细胞了。

/* one msg_msg structure for each message */
struct msg_msg {
    struct list_head m_list;
    long m_type;
    size_t m_ts;        /* message text size */
    struct msg_msgseg *next;
    void *security;    //无SELinux,这里为NULL
    /* the actual message follows immediately */
};

m2的地址是知道的,利用msg_msg占用,二次强制释放。那么这个时候m2可以有两个指针操作,vsock_sock, msg_msg两个数据结构,再往后 setxattr() & userfaultfd() 精确堆喷占位m2, 伪造m2出的msg->next指针为 vsock_sock地址, 就可以读到m2没有被破坏的数据。

void (*sk_write_space)(struct sock *)函数指针在vsock_sock.sk偏移量688处,被设置为sock_def_write_space()内核函数的地址。它可以用来计算KASLR偏移量。通过这个可以绕过kaslr.

制造sk_buff的uaf

作者制造了sk_buff的uaf.
这里首先

struct sk_buff{
unsigned char		*head, 	*data;
}

head包含了skb_shared_info和destructor_arg内存块中。而且用户分配2800的内存块户造成skb_kmalloc-4k的内存中。
而vsock_sock中的meme_cgroup也存在于 kmalloc-4k的内存块中。(这里为什么用户分配网络2800会在4k里面我先不分析了,应该作者在exploit for CVE-2017-2636的说明中有解释,先按他说的来)。


> 
1.使用socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)创建一个客户端套接字和32个服务器套接字

2.在用户空间中准备一个2800字节的缓冲区,并用0x42对其memset()

3.用sendto()将这个缓冲区从客户端套接字发送到每个服务器套接字,用于在kmalloc-4k中创建sk_buff对象。在每个可用的CPU上使用`sched_setaffinity()

4.对vsock_sock执行任意读取过程

5.计算可能的sk_buff内核地址为sk_memcg加4096(kmalloc-4k的下一个元素)

6.对这个可能的sk_buff地址执行任意读

7.如果在网络数据的位置找到0x42424242424242lu,则找到真正的sk_buff,进入步骤8。否则,在可能的sk_buff地址上加4096,转到步骤6

8.sk_buff上执行32个pthreads的setxattr()&userfaultfd()堆喷射,并把它们挂在pthread_barrier上

9.对sk_buff内核地址进行任意释放

10.调用pthread_barrier_wait(),执行32个setxattr()覆盖skb_shared_info的堆喷pthreads

11.使用recv()接收服务器套接字的网络消息。

这个sk_memcg就是meme_cgroup,存在于vsock_sock.sk中。

也就是说在4k内存块中以4k为步长遍历下,找到存在0x4242数据的块,就是sk_buff的地址。

提权结束

/*
* A single ROP gadget for arbitrary write:
* mov rdx, qword ptr [rdi + 8] ; mov qword ptr [rdx + rcx*8], rsi ; ret
* Here rdi stores uinfo_p address, rcx is 0, rsi is 1
/
uinfo_p->callback = ARBITRARY_WRITE_GADGET + kaslr_offset;
uinfo_p->desc = owner_cred + CRED_EUID_EGID_OFFSET; /
value for “qword ptr [rdi + 8]” /
uinfo_p->desc = uinfo_p->desc - 1; /
rsi value 1 should not get into euid */

callback函数指针存储一个ROP gadget 地址,RDI存储callback函数的第一个参数,也就是ubuf_info本身的地址,RDI + 8指向ubuf_info.desc。gadget 将ubuf_info.desc移动到RDX。现在RDX包含有效用户ID和组ID的地址减一个字节。这个字节很重要:当gadget从 RSI向 RDX指向的内存中写入消息1时,有效的 uid和 gid将被零覆盖。重复同样的过程,直到权限升级到root。

一些想法

前天看可以利用 shmat 直接泄露内核中init_ipc_ns的地址。利用这个地址可以实现遍历task_struct 找到当前进程的cred地址。如果过找到了这个地址,我们利用上面的任意写方式同样可以实现提权,相对可以简单一点感觉。
https://bbs.pediy.com/thread-269311.htm

这个漏洞利用最关键的地方就是内核报警泄露的地址,换句话说就是我们要知道一个核心数据的地址。然后利用这个数据多次释放占用,实现msg_msg 伪造数据,读取任意地址的能力。但其实一般找到四字节任意写,这个核心数据泄露的地方并不见的好找。

小结

释放后写入数据
竞争获取锁,释放内存
这里的transport保存的局部变量指向了一个修改vvs内存的函数,所以当未获取锁时保存在局部变量中时,竞争线程就可以提前释放vvs。虽然vsock_deassign_transport清空了vsk->tranport。但是stream_setsockopt任然可以利用局部变量tansport实现vvs内存的改写,从而导致漏洞产生。

pa_poc_v4 林业Jekyll演示 Jekyll演示站点。 导入林业 该项目已预先配置为与Forestry一起使用,只需导入您的存储库 :sparkles: 。 您所做的任何更改都将被提交回存储库,并在您使用Netlify时进行部署。 Forestry为编辑者提供了一个可用的界面来编辑Markdown,YAML和JSON文件: 文献资料 部署方式 部署此Jekyll v4演示的最简单方法是通过进行构建和部署,只需单击下面的按钮并按照说明进行操作即可。 在本地运行 要求 Ruby> 2.4 捆绑器> 2.0 杰基尔> 4.0 克隆存储库后: # Install project dependencies bundle install # Run a local server to preview your work bundle exec jekyll serve 立即下载

相关推荐

ROS Noetic + Realsense ROS 2.3.2 在鲁班猫4上的完整工作空间搭建与相机启动调试

本文详细介绍了在鲁班猫4(RK3588S)开发板上搭建ROS Noetic与Realsense ROS 2.3.2开发环境的完整流程,包括Realsense SDK安装、工作空间配置、D435i深度相机驱动调试等关键步骤,为机器人视觉系统开发提供实用指南。

weixin_33217202的博客 237

Distcc后门--漏洞CVE-2004-2678、OSVDB-13378

设置宿主机IP,进行攻击,用id和uname -a查看对方系统信息。distcc是谷歌开源的一个编译器,将编译任务分解成多个子任务。需要使用低版本的kali,本次使用2020版的。

arissa666的博客 480

离线安装ambari 更换spark版本 集成carbondate文档

1、Linux系统环境配置 1.1 配置IP地址 vim /etc/sysconfig/network-script/ifcfg-eth0 “DEVICE”:网卡对应的设备别名,如ifcfg-eth0第一块网卡; “HWADDR”:网卡物理地址; “BOOTPROTO”:网卡获得ip地址的方式,Static(静态 ip地址)dhcp(通过dhcp协议获取ip)bootip通过boot...

weixin_44742962的博客 3036

【Exploit trick】利用CVE-2021-26708 绕过LKRG缓解机制

LKRG source code 绕过LKRG总结:构造ROP链给两个函数打patch,p_check_integrity()(负责检查内核完整性)和p_cmp_creds()(负责检查进程凭证)。补丁程序为0x48 0x31 0xc0 0xc3,也就是xor rax, rax ; ret或return 0,打完补丁后提权即可。打补丁函数采用void *text_poke(void *addr, const void *opcode, size_t len),kprobes中也用到了该函数。 1. 回顾CV

panhewu9919的博客 1088

set_output_delay的本质

set_output_delay的本质

qq_33300585的博客 3389

12-RK平台U-Boot启动流程

先看概述,把这一章要回答的问题摆出来,带着问题听。RK 特有的 BootROM -> MiniLoader -> SPL -> U-Boot -> Kernel。这是因为 RK 平台使用闭源的 DDR 初始化固件,需要通过 MiniLoader 来加载和运行。为什么多一层?这是 RK 平台的特殊性决定的。RK 平台使用闭源的 DDR 初始化固件,这段代码 Rockchip 不开源,只能以二进制形式提供,它需要一个载体来加载和运行,这个载体就是 MiniLoader。

内核笔记 1147

[CVE-2021-26708]使用sshd触发Linux内核AF_VSOCK套接字条件竞争漏洞

一、漏洞背景 Alexander Popov发表了一篇文章Four Bytes of Power: Exploiting CVE-2021-26708 in the Linux kernel,它使用四字节覆盖漏洞进行权限提升。根据披露细节,该漏洞是由于错误加锁导致,可以在低权限下触发并自动加载易受攻击驱动模块创建AF_VSOCK套接字,进而导致本地权限提升。 二、漏洞分析 该漏洞利用分为以下几个步骤: 在可预测的地址分配一个good msg:在 vsock 上进行条件竞争;读取从 /dev/km

whoami 650

【经验&技巧】IBIS AMI模型眼图仿真问题探讨

在ADS的仿真环境中,不论发送和接收的AMI模型是否为true或者false,都可以将通道仿真设置为统计模式,但是,如果有一方的Init函数为false,在统计模式下,处于false状态的模型将不能执行其自带的后处理功能,如下图所示,左边的统计模式和右边的逐比特模式眼图存在明显的差异,原因在于,接收端的init函数为false导致在统计模式中不能对眼图进行DFE处理,换言之,此时统计模式下的眼图就是未经任何处理的“生图”。

一只豌豆象的博客 1767

Distcc后门漏洞(CVE-2004-2678)

摘要:CVE-2004-2678是Distcc分布式编译工具的高危漏洞,允许攻击者通过3632端口发送恶意编译指令实现远程代码执行。该漏洞源于默认配置不严格(未限制客户端IP)且服务以高权限运行,影响Distcc 2.x系列及Xcode 1.5版本。利用过程包括端口扫描、Metasploit模块加载和权限获取,可导致服务器完全沦陷。防御建议升级至Distcc 3.0、限制访问IP、降权运行服务并关闭非必要端口。

m0_62908421的博客 889

【OpenClaw从入门到精通】第11篇:OpenClaw 2026多模态实战全攻略:OCR/语音/图像自动化(附完整代码+双部署方案)

本文聚焦OpenClaw 2026版核心升级的多模态能力,从底层架构原理到实操落地全流程拆解。先解析“统一指令解析+多工具适配器”的核心设计逻辑,再提供阿里云规模化部署(适合批量任务)与本地汉化版部署(适合隐私数据调试)的详细步骤,含依赖安装、配置验证完整操作;随后落地三大高频实战场景——OCR合同信息结构化提取、会议录音自动转写纪要、电商商品图片智能打标,每个场景均提供可直接运行的完整代码、执行结果演示及流程说明;最后补充多模态任务避坑指南、性能优化技巧与成本控制方案。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2611

31、车载通信中的可见光通信(VLC)技术解析

本文详细解析了车载通信中可见光通信(VLC)技术的应用背景、优势及发展前景。对比传统RF通信技术(如DSRC),VLC利用LED照明设备实现高效、安全的车辆与车辆、车辆与基础设施之间的通信,具有频谱资源丰富、安全性高、无电磁干扰等优势。文章还探讨了VLC在交叉口交通控制、高速公路通信、自动驾驶等场景的应用潜力,展望了其在未来智能交通系统中的重要作用。

hill8的博客 318

让你的IIS无懈可击

如果你的电脑新安装了NT4/Win2000以后,并不是说就可以直接用来作Internet服务器了。尽管微软的补丁打了一大堆,但还是有些漏洞。现在我们就简单的谈一下如何使用IIS建立一个高安全性能的服务器。一、 以Windows NT的安全机制为基础1、NT打SP6补丁、2K打SP4补丁。把磁盘的文件系统转换成NTFS(安装系统的分区可以在安装系统的时候转换,也可以安装完系统以后,用工具转换

cunzhangxp的专栏 1862

【机器学习】推理时计算优化——思维链(Chain-of-Thought)与慢思考范式 第一章:基础理论与认知框架 第二章:计算优化技术与前沿方法

过程监督在数学推理中展现出显著优势,因其能够定位错误发生的具体步骤,而非仅在最终答案处提供稀疏反馈。然而,高质量过程标注的获取成本高昂,这催生了基于自动验证器的近似方法。

VectorShift的博客 72

利用Linux内核CVE-2021-26708漏洞攻破LKRG防护机制的技术研究

在本研究中,我继续深入分析Linux内核中的CVE-2021-26708漏洞。通过改进漏洞利用原型,我从攻击者角度研究了Linux内核运行时防护机制(LKRG)。本文将详细介绍如何发现新的LKRG绕过方法,以及如何进行负责任的漏洞披露。

分享技术点滴 980

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

linux kernel ping_init_sock poc,Linux 内核 AF_VSOCK 套接字条件竞争漏洞(CVE-2021-26708)分析...

一、漏洞背景近期,国外安全研究人员在oss-security上披露了一个AF_VSOCK套接字条件竞争高危漏洞CVE-2021-26708(CNVD-2021-10822、CNNVD-202102-529)。根据披露细节,该漏洞是由于错误加锁导致,可以在低权限下触发并自动加载易受攻击驱动模块创建AF_VSOCK套接字,进而导致本地权限提升。该漏洞补丁已经合并到Linux内核主线中。二、VSOCK介...

weixin_39852647的博客 487

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

linux内核竞争条件漏洞,Linux内核AF_VSOCK套接字条件竞争漏洞(CVE-2021-26708)分析...

漏洞背景近期,国外安全研究人员在oss-security上披露了一个AF_VSOCK套接字条件竞争高危漏洞CVE-2021-26708(CNVD-2021-10822、CNNVD-202102-529)。根据披露细节,该漏洞是由于错误加锁导致,可以在低权限下触发并自动加载易受攻击驱动模块创建AF_VSOCK套接字,进而导致本地权限提升。该漏洞补丁已经合并到Linux内核主线中。VSOCK介绍和架构...

weixin_30599521的博客 724

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

网络安全-IIS8.0-10.0漏洞复现和修复

【代码】网络安全-IIS8.0-10.0漏洞复现和修复。

weixin_65409651的博客 9260

心脏滴血漏洞(CVE-2014-0160)复现

准备工作 使用shodan搜索相关站点 关键词:openssl/1.0.1a 访问地址 https://possible.lv/tools/hb/ 进行在线测试搜索到的站点,查看是否存在漏洞 方法一:利用Metasploit进行渗透 开启Metasploit,查找心脏滴血漏洞并利用 msfconsole search openssl_heartbleed use auxili...

baidu_38844729的博客 1224

心脏滴血漏洞复现(CVE-2014-0160)

心脏滴血漏洞复现(CVE-2014-0160) 漏洞简介 OpenSSL是OpenSSL团队开发的一个开源的能够实现安全套接层(SSL v2/v3)和安全传输层(TLS v1)协议的通用加密库,它支持多种加密算法,包括对称密码、哈希算法、安全散列算法等。 OpenSSL的TLS和DTLS实现过程中的d1_both.c和t1_lib.c文件中存在安全漏洞,该漏洞源于当处理Heartbeat Extension数据包时,缺少边界检查。远程攻击者可借助特制的数据包利用该漏洞读取服务器内存中的敏感信息(...

qq_39470792的博客 1113

CVE-2020-1472漏洞实战 深度剖析

本文作者:Faith(Ms08067实验室 内网安全攻防知识星球)0x00漏洞说明CVE-2020-1472是继MS17010之后一个比较好用的内网提权漏洞,影响Windows Serv...

Ms08067安全实验室 9657

CVE-2020-16898: Windows TCP/IP远程执行代码漏洞通告

原创 360CERT [三六零CERT](javascript:void(0)???? 今天 报告编号:B6-2020-101402 报告来源:360CERT 报告作者:360CERT 更新日期:2020-10-14 0x01 漏洞简述 2020年10月14日,360CERT监测发现 Microsoft 发布了 TCP/IP远程代码执行漏洞 的风险通告,该漏洞编号为CVE-2020-16875,漏洞等级:严重,漏洞评分:9.8。 远程攻击者通过构造特制的ICMPv6 Router Advertisemen

爱国小白帽 6994

Linux 内核修复5个高危漏洞

聚焦源代码安全,网罗国内外最新资讯!作者:Steven J. Vaughan-Nichols编译:奇安信代码卫士团队Positive Technologies 公司的Linux 安全开...

smellycat000的专栏 1456

CVE-2020-14386: Linux内核权限提升漏洞通告

360CERT [三六零CERT](javascript:void(0)???? 今天 报告编号:B6-2020-092301 报告来源:360CERT 报告作者:360CERT 更新日期:2020-09-23 0x01 漏洞简述 2020年09月23日,360CERT监测发现 openwall邮件组 发布了 linux-kernel 权限提升漏洞 的风险通告,该漏洞编号为 CVE-2020-14386 ,漏洞等级:高危,漏洞评分:7.8。 本地攻击者通过向受影响的主机发送特制的请求内容,可以造成权限提升

爱国小白帽 2641

Microsoft Windows远程桌面协议中间人攻击漏洞(CVE-2005-1794)解决方案

Microsoft Windows远程桌面协议中间人攻击漏洞(CVE-2005-1794)解决方案1.系统版本:windows server 2003 2.漏洞:CVE-2005-1794 3.修复方案: 漏洞介绍: Microsoft Windows远程桌面协议用于连接Windows终端服务。 Windows远程桌面协议客户端没有验证会话的服务器公共密钥,远程攻击者可以利用这个漏洞通过Man

安全小白的博客 4万+

CVE-2021-21972 vCenter 远程命令执行漏洞分析

报告编号:B6-2021-022501 报告来源:360NoahLab 报告作者:Ricter 更新日期:2021-02-25 0x01漏洞简介 vSphere 是 VMware 推出的虚拟化平台套件,包含 ESXi、vCenter Server 等一系列的软件。其中 vCenter Server 为 ESXi 的控制中心,可从单一控制点统一管理数据中心的所有 vSphere 主机和虚拟机,使得 IT 管理员能够提高控制能力,简化入场任务,并降低 IT 环境的管理复杂性与成本。 vSphere Clien.

爱国小白帽 7280
上一篇: linux内核泄露地址的方式
下一篇: USB设备管理过程
inquisiter
博客等级 码龄10年 374粉丝 228原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值