nf_tables catchall abort-path UAF (CVE-2026-23111)¶
Catchall abort/activate path'indeki tek bir ters çevrilmiş koşul
chain->use'un geri yüklenmesini atlıyor; böylece her abort, hâlâ reference edilen bir chain free edilene kadar sayacı kalıcı olarak azaltıyor — root'a "tek karakter" uzaklıkta.
Alias
Bu canonical not'a, aynı CVE-2026-23111 bug'ını tarif eden
nf_tables one-character privesc alias
not'u (alias_of: nf-tables-catchall-abort-path-uaf) redirect eder.
Mechanism¶
Note
Abort path'inde nf_tables, değiştirmek üzere olduğu set element'lerini yeniden
activate etmeli ve o element'lerin işaret ettiği chain'lerdeki reference count'ları
geri yüklemelidir. Buradaki invariant: geri yüklenen her NFT_GOTO/NFT_JUMP verdict
element'i için nft_data_hold() hedef chain'in chain->use'unu artırmalıdır.
catchall element'inde ters çevrilmiş bir koşul, kodun tam olarak o element'leri
atlamasına neden olur.
Public reproduction'a göre nft_map_catchall_activate() ters çevrilmiş bir
nft_set_elem_active() testi içeriyor:
/* buggy */
if (!nft_set_elem_active(ext, genmask))
continue; /* wrongly skips the active catchall element */
Aktif catchall verdict element'i atlandığı için nft_setelem_data_activate() →
nft_data_hold() chain->use'u geri yüklemek üzere hiç çağrılmaz. Bu yüzden her abort
döngüsü chain->use'u kalıcı olarak azaltır (bir chain->use underflow); sıfıra
ulaştığında DELCHAIN chain'in artık reference edilmediğine inanır, başarılı olur ve
catchall element'leri onu hâlâ reference ederken chain free edilir — bir use-after-free.
Fix tek !'i kaldırarak koşulu catchall olmayan nft_mapelem_activate() path'iyle eşleştirir.
Walkthrough¶
Kavramsal reproduction (FuzzingLabs / Exodus; CONFIG_NF_TABLES ve unprivileged user
namespace'ler gerektirir):
- Verdict'i bir hedef chain'e
NFT_GOTOolan bir catchall element'e sahip bir map/verdict set kur. - Atlanan geri yükleme nedeniyle her döngünün
chain->use'tan bir reference sızdırdığı, abort eden transaction'ları tekrar tekrar gönder. chain->usesıfıra ulaştığında chain hâlâ reference edilirken free edilir — UAF.
Rapor edilen exploitation (FuzzingLabs):
- Free edilmiş
nft_chain'i yeniden allocate et,namefield'ına kontrollü veri yerleştir. - Bir
seq_operationsspray'i aracılığıyla kernel base'i, ardından bir heap adresini leak et. - Control flow'u
nft_chain_validate()üzerinden hijack et; bu fonksiyon her rule'un expression'larını dolaşır veexpr->ops->validate(bir function pointer) çağırır;msg_msg-2kslab belleğinde inşa edilen sahte yapıları kullanarak onu yeniden yönlendir, bir ROP zincirine stack-pivot yap ve root içinmodprobe_path'i overwrite et / SELinux'u devre dışı bırak.
Public sonuçlar bu UAF'ın güvenilirliğini boşta sistemlerde >%99, ağır yük altında ~%80 olarak bildiriyor (Debian Bookworm/Trixie ve Ubuntu 22.04/24.04 LTS genelinde).
Warning
Oliver Sieber (Exodus Intelligence) tarafından keşfedildi; FuzzingLabs tarafından bağımsız
reproduction yapıldı; 2026-02-05'te yamalandı. 8fdb05de0e2db89d8f56144c60ab784812e8c3b7
fix commit'i FuzzingLabs tarafından rapor ediliyor ve tek kaynaklı kabul ediliyor.
Detection¶
- Tekrarlanan transaction abort'larından sonra
nft_chain_validate()/ chain destroy içinde kök salan KASAN use-after-free. - Bir catchall-verdict map üzerinde abort transaction'larını döngüye sokan bir process anormaldir.
Mitigation¶
- Distro güncellemelerini uygulayın (Ubuntu 22.04/24.04/25.10, Debian Bullseye/Bookworm/Trixie, RHEL 10, Amazon Linux, SUSE hepsi advisory yayınladı).
CAP_NET_ADMIN-in-netns erişimini kaldırmak için unprivileged user namespace'leri devre dışı bırakın.