Linux: netfilter: cttimeout: prevent UAF during module unload
What fixes it
- 73f353bec62509c776184e49a031c6145cec0d05LinuxCVE List
- 1f69c570a73f2dedf75ea5166d47622d5fa958c1LinuxCVE List
A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.
Description
In the Linux kernel, the following vulnerability has been resolved:
netfilter: cttimeout: prevent UAF during module unload
nf_ct_set_timeout() protects the timeout hook dereference and policy lookup with rcu_read_lock(). cttimeout_exit(), however, unregisters the per-net operations before it clears the hook.
This allows the following interleaving:
CPU 0 CPU 1 cttimeout_exit() nf_ct_set_timeout() unregister_pernet_subsys() rcu_read_lock() kfree(pernet) h = nf_ct_timeout_hook h->timeout_find_get() nfct_timeout_pernet()
The hook still points to ctnl_timeout_find_get() when CPU 1 looks up the already freed per-net timeout list. KASAN reported:
BUG: KASAN: slab-use-after-free in ctnl_timeout_find_get Read of size 8 by task poc/90 Call Trace: ctnl_timeout_find_get+0x271/0x2a0 [nfnetlink_cttimeout] nf_ct_set_timeout+0x7b/0x3c0 xt_ct_tg_check+0x724/0xb20 xt_check_target+0x234/0xa90 do_ipt_set_ctl+0x570/0x1270 Allocated by task 89: __kmalloc_noprof+0x16e/0x460 ops_init+0x6d/0x420 register_pernet_operations+0x2f6/0x670 Freed by task 91: kfree+0x131/0x390 ops_undo_list+0x3d4/0x730 unregister_pernet_operations+0x232/0x490 unregister_pernet_subsys+0x1c/0x30 cttimeout_exit+0x52/0x970 [nfnetlink_cttimeout]
Clear the hook and wait for existing readers before unregistering the per-net operations. This blocks new policy lookups and ensures readers that observed the hook finish before the per-net storage is freed.
Text from CVE List
Affected versions 12
- Linuxaffected: ebfbe67568a734a449203097b02c4ab884257535 before f664e06699829a31e95675a6864655a6c5f9904fCVE List
- Linuxaffected: ebfbe67568a734a449203097b02c4ab884257535 before 73f353bec62509c776184e49a031c6145cec0d05CVE List
- Linuxaffected: ebfbe67568a734a449203097b02c4ab884257535 before a7fdd86c386b7f7cc72a126389c2cdb55d035221CVE List
- Linuxaffected: ebfbe67568a734a449203097b02c4ab884257535 before 1f69c570a73f2dedf75ea5166d47622d5fa958c1CVE List
- Linuxaffected: ebfbe67568a734a449203097b02c4ab884257535 before fec9b1de0d02de8dafa3cc344bcb91cf28660643CVE List
- Linuxaffected: 5.13CVE List
- Linuxunaffected: all versions before 5.13CVE List
- Linuxunaffected: 6.6.160 through 6.6.*CVE List
- Linuxunaffected: 6.12.112 through 6.12.*CVE List
- Linuxunaffected: 6.18.53 through 6.18.*CVE List
- Linuxunaffected: 7.2.7 through 7.2.*CVE List
- Linuxunaffected: 7.3CVE List
References 5
- git.kernel.org/stable/c/f664e06699829a31e95675a6864655a6c5f9904fReferencevia CVE List
- git.kernel.org/stable/c/73f353bec62509c776184e49a031c6145cec0d05Referencevia CVE List
- git.kernel.org/stable/c/a7fdd86c386b7f7cc72a126389c2cdb55d035221Referencevia CVE List
- git.kernel.org/stable/c/1f69c570a73f2dedf75ea5166d47622d5fa958c1Referencevia CVE List
- git.kernel.org/stable/c/fec9b1de0d02de8dafa3cc344bcb91cf28660643Referencevia CVE List