
Un write-up e una PoC di LPE di una vulnerabilità di lettura e scrittura OOB nel kernel Linux.
Un'analisi e un Proof-of-Concept di escalation locale dei privilegi per una vulnerabilità di lettura e scrittura OOB nel kernel Linux.
Puoi trovare l'analisi di questa vulnerabilità sul mio blog e anche la mia introduzione a nf_tables qui.
Non ci si deve aspettare che l'exploit fornito in questo repository venga eseguito con successo su versioni vulnerabili del kernel senza modifiche. Ci sono molti offset che differiscono tra le build del kernel, oltre ovviamente ai diversi gadget ROP.
A volte anche il modo in cui la vulnerabilità viene sfruttata potrebbe dover essere modificato a causa delle differenze tra le build del kernel. Un esempio è un'altra analisi di questa vulnerabilità di David Bouman (@pqlqpql) che puoi trovare qui, in cui sfrutta la vulnerabilità usando pacchetti UDP - colpendo lo stack quando viene gestito un pacchetto UDP - cosa che non sarebbe stato possibile fare sulla mia build del kernel a causa di differenze significative nel layout dello stack. Ho invece utilizzato un metodo che colpisce lo stack quando viene gestito un pacchetto TCP ACK.
Se desideri provarlo per conto tuo, ti consiglio di leggere la mia analisi e di seguire il percorso per individuare gli offset, quali hook usare, ecc.
La versione esatta del kernel da cui ho compilato il kernel che avevo come obiettivo nell'analisi era 5.12.0, commit 9f4ad9e425a1d3b6a34617b8ea226d56a119a717.
Per compilare l'exploit servono le librerie libmnl e libnftnl oltre alla libreria POSIX thread (pthread).
La compilazione è quindi semplice come:
gcc -lmnl -lnftnl -lpthread exploit.c -o exploit
La vulnerabilità nasce da nft_validate_register_store introdotto nel commit 345023b0db315648ccc3c1a36aee88304a8b4d91 nella versione 5.12 ed è corretta nel commit 6e1acfa387b9ff82cfc7db8cc3b6959221a95851 nella versione 5.17.
Questo Proof-of-Concept e l'analisi della vulnerabilità sono solo a scopo didattico. Non sono legalmente responsabile per qualsiasi uso che possa essere fatto di questo codice.