
Questo repository contiene l'exploit per la vulnerabilità che ho recentemente scoperto nel sottosistema nftables, a cui è stato assegnato CVE-2023-0179, che affligge tutte le versioni di Linux dalla 5.5 alla 6.2-rc3, sebbene l'exploit sia stato testato sulla 6.1.6.
I dettagli della vulnerabilità e il writeup sono disponibili su oss-security
È sufficiente eseguire il comando make needle per generare l'eseguibile corrispondente.
Per la riuscita della compilazione sono richiesti libmnl e libnftnl:
sudo apt-get install libmnl-dev libnftnl-dev
L'exploit entrerà in uno user namespace e in un network namespace non privilegiati e aggiungerà un'espressione nft_payload tramite la funzione rule_add_payload che, quando valutata, innescherà lo stack buffer overflow e sovrascriverà i registri.
Il contenuto viene quindi recuperato con il seguente comando nft:
nft list map netdev mytable myset12
L'output farà trapelare diversi indirizzi rimescolati relativi a strutture dati del kernel, tra i quali troviamo un indirizzo di istruzione del kernel e il puntatore a regs.
L'exploit crea un nuovo account utente needle:needle con UID 0 abusando della variabile modprobe_path.
Goditi i privilegi di root.
libnftnl di David Bouman e il dettagliato blog post