漏洞背景
安全研究人员BitsByWill近期对Linux内核中的两个高危漏洞CVE-2023-52440和CVE-2023-4130进行了深度分析,这两个漏洞均影响内核级SMB服务器ksmbd。研究表明,攻击者可将这两个漏洞串联利用,形成完整的攻击链。
CVE-2023-52440:可控SLUB溢出漏洞
由DEVCORE团队Pumpkin发现的第一个漏洞存在于ksmbd_decode_ntlmssp_auth_blob()函数中。BitsByWill解释道:"由于sess_key_len参数可由用户控制,在执行cifs_arc4_crypt时可能导致固定大小的sess_key缓冲区溢出。这个漏洞极易触发,能实现可控的SLUB溢出。"
攻击者只需修改Impacket工具包中ntlm.py的一行代码,即可构造恶意的NTLM认证消息,在SMB会话建立过程中引发未经认证的堆溢出。研究人员强调:"这实际上是个非常强大的攻击原语——无需认证即可远程控制堆溢出内容和大小。"
CVE-2023-4130:越界读取漏洞
同样由Pumpkin发现的第二个漏洞位于smb2_set_ea()函数中,源于对扩展属性(EA)缓冲区验证不当。具有SMB共享写入权限的攻击者可诱使ksmbd错误解析精心构造的数据结构。
分析指出:"通过设置恶意的NextEntryOffset值(只要不超过缓冲区边界),就能欺骗ksmbd认为存在额外的smb2_ea_info条目...这将导致后续的ksmbd_vfs_setxattr操作将相邻堆块的越界读取数据存入xattr,攻击者可通过SMB3.queryInfo获取这些数据。"该漏洞提供了内存泄露原语,可帮助攻击者绕过KASLR等防护机制。
漏洞组合利用:从溢出到代码执行
最引人关注的是这两个漏洞的串联利用方式。通过将溢出原语(CVE-2023-52440)与泄露原语(CVE-2023-4130)结合,攻击者可获得对内核内存的读写能力。
BitsByWill指出实际影响:"在Linux 6.1.45系统上(6.1.46版本已修复泄露漏洞),攻击者可通过具有共享写入权限的用户账户攻陷ksmbd。虽然需要用户凭证,但我确信至少存在某些系统管理员配置了允许匿名写入的共享。"最终的概念验证(PoC)利用程序成功在内核中执行ROP链,获取了反向shell。
这项研究表明,Linux系统中的SMB漏洞可能被升级为完整的内核入侵。虽然相关补丁已发布,但该事件再次提醒我们:不当配置和过时系统仍会给攻击者可乘之机。
参考来源:
PoC Published: Linux Kernel 0-Click RCE Vulnerability Found in ksmbd
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf
客服小蜜蜂(微信:freebee1024)