CVE-2026-80837 in Linux
Sumário
de VulDB • 04/09/2026
No kernel Linux, a seguinte vulnerabilidade foi resolvida:
netfilter: nf_tables: não enfileirar notificações do objeto de caminho de pacote
Todas as referências arquivo:linha abaixo são contra v7.2-rc4 (ac5b0e5651b1). O trace foi capturado em 7.2.0-rc6-kasan72rc6 (075b74841bd0), onde as mesmas linhas se aplicam.
nft_obj_notify() é exportada e alcançada a partir do caminho de pacote. Seu único chamador no tree é nft_quota_obj_eval() (net/netfilter/nft_quota.c:68), que notifica com GFP_ATOMIC ao avaliar uma regra para um pacote em trânsito, sem segurar nenhum mutex.
Desde o commit 67cc570edaa0 ("netfilter: nf_tables: coalesçar múltiplas notificações em um único skbuff"), essa notificação não é mais enviada imediatamente. __nft_obj_notify() a enfileira na nft_net->notify_list via nft_notify_enqueue() (net/netfilter/nf_tables_api.c:1211), que é uma list_add_tail() pura. notify_list não possui seu próprio lock; ela é serializada por commit_mutex: os outros seis locais de enqueue executam dentro de uma transação netlink, e o drain em nft_commit_notify() (net/netfilter/nf_tables_api.c:10746) executa list_del() + kfree_skb() a partir de nf_tables_commit() com commit_mutex segurado.
Enviar pacotes através de uma cadeia que referencia um objeto cota esgotado, portanto, causa uma race condition entre uma list_add_tail() sem lock e list_del() + kfree_skb() em outra CPU. O WRITE_ONCE(prev->next, new) em __list_add() então grava através de um sk_buff que já foi liberado:
BUG: KASAN: slab-use-after-free in __nft_obj_notify+0x2c5/0x2d0 Write of size 8 at addr ff110001047183c0 by task poc/76 CPU: 0 UID: 1000 PID: 76 Comm: poc Tainted: G W 7.2.0-rc6-kasan72rc6 #4 Call Trace: <IRQ> __nft_obj_notify (include/linux/list.h:164 include/linux/list.h:191 net/netfilter/nf_tables_api.c:1211 net/netfilter/nf_tables_api.c:8743) nft_quota_obj_eval (net/netfilter/nft_quota.c:68) nft_do_chain_inet nf_hook_slow __ip_local_out ip_push_pending_frames udp_send_skb udp_sendmsg __x64_sys_sendto
Allocated by task 77: __alloc_skb (net/core/skbuff.c:704) __nft_obj_notify (include/net/netlink.h:1055 net/netfilter/nf_tables_api.c:8731) nft_quota_obj_eval (net/netfilter/nft_quota.c:68) nft_do_chain
Freed by task 79: nf_tables_commit (include/linux/skbuff.h:1332 net/netfilter/nf_tables_api.c:10759 net/netfilter/nf_tables_api.c:11185) nfnetlink_rcv_batch (net/netfilter/nfnetlink.c:574) netlink_unicast netlink_sendmsg
O endereço com defeito pertence ao cache skbuff_head_cache de tamanho 232
Enfileirar a partir do caminho de pacote está errado, mesmo deixando a race condition de lado: notify_list é drenada apenas por nft_commit_notify() a partir de nf_tables_commit() (:11185), portanto, uma notificação enfileirada fora de uma transação não será enviada até que algum lote netlink posterior seja confirmado, se isso ocorrer.
O argumento gfp que nft_obj_notify() ainda aceita é um resquício do comportamento pré-67cc570edaa0, onde esse caminho chamava nfnetlink_send() diretamente. Restaure isso: divida a construção da mensagem em nft_obj_notify_alloc() e permita que cada chamador decida o que fazer com o skb. nft_obj_notify(), a exportada alcançada a partir do caminho de pacote, envia-a imediatamente; nf_tables_obj_notify(), que executa sob commit_mutex, continua enfileirando-a, para que as notificações de transação ainda sejam coalescidas.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.