近期,Linux内核网桥子系统的一个释放后使用(Use-After-Free)漏洞的PoC代码已被公开。
更令人担忧的是,内核里的一个定时器(Timer)出错了。
在Linux内核的网桥(bridge) 模块中,有一个用于防止网络环路的生成树协议(STP)。STP依赖定时器来管理端口状态。正常情况下,删除网桥设备前,内核会取消所有定时器。
然而,在直接删除网桥的路径中,内核忘了“打扫干净”:定时器没有取消,但存放定时器的内存已被释放。当内核的软中断(softirq)再次触发这个“幽灵定时器”时,就会去访问已被释放的内存,触发Use-After-Free。
这意味着:你删除了网桥,但它的“幽灵定时器”还在内核里滴答作响。
一个条件,就能引爆
要触发这个漏洞,需要同时满足几个特定条件:
网桥的STP功能处于启用状态。
网桥处于管理性关闭(administratively down) 状态。
网桥的某个端口切换到了LEARNING(学习) 状态。
当这三个条件满足时,内核会在不检查接口是否真正激活(IFF_UP标志)的情况下,直接启动STP定时器。随后,通过“问题路径”删除网桥,定时器残留,内存释放,漏洞被触发。
PoC已公开,影响有多大?
目前,公开的PoC代码已经发布。
最直接的后果是内核崩溃(Kernel Panic),导致服务器宕机。但在特定条件下,攻击者可能通过控制内存的重新分配,在已释放的内存位置“预埋”恶意数据。当内核定时器去访问时,就可能执行攻击者的代码,实现控制流劫持。
这会直接导致服务器被完全控制。
如何修复?
Linux内核社区已合并修复补丁,提交ID为 2a00517db8de4be7df3d483b215c5544fb30a191。在该补丁之前的所有内核版本都应视为受影响。
作为临时缓解措施,在无法立即升级内核的情况下,建议:
限制非特权用户创建、修改或删除网桥接口的权限。
审查使用了内核STP的工作负载,如非必要,考虑禁用STP。