一个新披露的 Linux 本地权限升级(LPE)漏洞,名为“CIFSwitch”,使低权限用户通过利用 Linux 内核 CIFS 客户端与用户空间 cifs-utils 包之间的逻辑漏洞,获得 root 权限。

该漏洞由安全研究员Asim Manizada发现,他发布了详细的技术报告和PoC,帮助防御方评估暴露情况并验证补丁。
问题源于CIFs.Spnego密钥类型中密钥描述的验证不当,导致无权限用户冒充可信内核请求并触发特权操作。
该漏洞是通过一种人工智能辅助的多跳推理方法发现的,该方法构建并走动安全相关对象和流程的语义图,使得将细微的逻辑缺陷串联成实用利用。
该公告是在与Linux发行版协调的禁令后发布的,且上游内核补丁已经可用。
CIFS/SMB 是 Linux 上广泛使用的 Windows 风格网络文件系统协议。在该架构中,内核CIFS客户端负责核心文件系统操作。
同时,Kerberos/SPNEGO 认证委托给一个具有根权限的用户空间辅助工具 cifs——即 cifs-utils 提供的上调。
交互使用Linux密钥环:内核调用request_key()表示CIFS。spnego 密钥,传递一个可信的描述字符串,该字符串编码了服务器、UID、凭证 UID、PID 和命名空间目标等参数。
/sbin/request-key 策略随后启动 cifs——上调为根来处理该请求。
Manizada的研究显示,内核并未验证CIFS是否......SPnego 密钥描述实际上起源于 CIFS 子系统,后来才被视为可信。
这一省略允许任何非特权进程直接调用 request_key(“cifs.spnego”, <crafted_description> 等)。
由于密钥类型是 cifs,spnego,默认的请求密钥规则仍然会生成 cifs。即使描述完全由攻击者控制,也将上调作为根。
漏洞链依赖于伪造描述中的两个要素:PID和upcall_target。
通过设置upcall_target=应用并提供恶意PID,攻击者会引发CIFS。上调用于切换到攻击者控制进程的命名空间,然后进行基于NSS的账户查询,最终放弃权限。
在这个攻击者控制的挂载命名空间内,可以植入一个流氓的nsswitch.conf和恶意libnss_.so.2,使得拥有根权限的NSS查找加载并执行任意代码。
在 Manizada 的 PoC 中,恶意的 NSS 模块会在 /etc/sudoers.d 中写入条目,从而赋予攻击者有效的根权限。
内核的底层漏洞可以追溯到2007年。然而,成功的利用需要以下几个条件:
一个易受攻击的内核,一个兼容的 cif 工具版本(尤其是带有回移植改动的 6.14+ 或更早版本),以及无权限的用户命名空间创建。
Linux 安全模块(LSM)策略,如 SELinux 或 AppArmor,这些策略并不能阻挡攻击路径。
测试显示,许多主流发行版在使用 cifs-utils 时开箱即用。相比之下,其他方案只有在安装 cifs-utils 或放宽默认 LSM 策略后才可被利用。
上游内核修复增加了CIF的vet_description钩子。SPNEGO 密钥类型,确保只有在请求在 CIFS 客户端内部spnego_cred下发出时才接受描述,有效阻止非特权用户空间冒充内核。
建议在CIFS-utils中进一步硬化,以使CIFS更为高效。Upcall 不会毫无疑问地信任密钥描述来自内核。
Asim Manizada 已在 GitHub 上发布了完整的技术报告(“CIFSwitch”)和 PoC 漏洞,以支持防御者、维护者和事件响应者验证缓解措施和补丁覆盖范围。
管理员应紧急部署回溯内核补丁,并考虑采取深入防御措施,如禁用未使用的CIFS、移除cifs-utils,以及收紧CIFS的请求密钥规则。spnego,以及限制无权限用户命名空间。
安情视界——洞见未来,智掌先机,持续追踪全球安全动态,精准解读政策与事件,深度预测研判趋势,护航企业全球化征程。