在Linux (net/packet/af_packet.c)被发现条件竞争漏洞,此漏洞可用于从未授权进程中执行内核代码。攻击者只需要本地低权限,就能利用该漏洞致拒绝服务(系统崩溃)或者以管理员权限执行任意代码。
这个BUG最早出现于2011年4月19号的代码中,详细参考
https://github.com/torvalds/linux/commit/f6fb8f100b807378fda19e83e5ac6828b638603a
在低权限命名空间可用的系统中(Ubuntu、Fedora等),可以通过未授权进程获取CAP_NET_RAW进而创建AF-PACKET套接字,如果套接字版本为TPCKET_V3,调用init_prb_bdqc()的时候,packet_set_ring()就会对timer_list对象进行初始化。在套接字关闭前,可修改套接字版本为TPACKET_V1,这样packet_set_ring()就不会删除timer。随后timer对象之上就形成了use after free漏洞,可被各种针对SLAB分配器的攻击利用。最终timer过期后,就可导致内核跳转至构建的函数指针。
各Linux发行版需要升级至最新版Linux内核修复此漏洞。针对Ubuntu 16.04 LTS的安全更新已经发布。
以下链接讲解了在不重启服务器的情况下,就对Ubuntu Linux内核打上补丁的方案:
https://www.cyberciti.biz/faq/howto-live-patch-ubuntu-linux-server-kernel-without-rebooting/
PoC地址:https://www.exploit-db.com/exploits/40871/
Freebuf报告地址:http://www.freebuf.com/vuls/122152.html