
Un análisis y PoC de escalada de privilegios locales (LPE) de una vulnerabilidad de lectura y escritura fuera de límites (OOB) en el kernel de Linux.
Un write-up y una prueba de concepto de escalada local de privilegios de una vulnerabilidad de lectura y escritura OOB en el kernel de Linux.
Puedes encontrar el write-up de esta vulnerabilidad en mi blog y también puedes encontrar mi introducción a nf_tables aquí.
No se debe esperar que el exploit proporcionado en este repositorio se ejecute correctamente en versiones vulnerables del kernel sin modificaciones. Hay muchos offsets que diferirían entre compilaciones del kernel, así como, por supuesto, distintos gadgets de ROP.
A veces incluso la forma en que se explota la vulnerabilidad puede tener que cambiarse debido a las diferencias entre compilaciones del kernel. Un ejemplo es otro write-up de esta vulnerabilidad de David Bouman (@pqlqpql) que puedes encontrar aquí, donde explota la vulnerabilidad usando paquetes UDP - apuntando a la pila cuando se está manejando un paquete UDP - algo que no habría sido posible en mi compilación del kernel debido a diferencias significativas en la distribución de la pila. En su lugar, usé un método que apunta a la pila cuando se maneja un paquete TCP ACK.
Si deseas probarlo por tu cuenta, te recomiendo leer mi write-up y seguir el proceso de averiguar los offsets, qué hooks usar, etc.
La versión exacta del kernel a partir de la cual compilé el kernel que estaba atacando en el write-up fue 5.12.0, commit 9f4ad9e425a1d3b6a34617b8ea226d56a119a717.
Para compilar el exploit necesitas las librerías libmnl y libnftnl, así como la librería de hilos POSIX (pthread).
Entonces, compilarlo es tan simple como:
gcc -lmnl -lnftnl -lpthread exploit.c -o exploit
La vulnerabilidad surge de nft_validate_register_store, introducida en el commit 345023b0db315648ccc3c1a36aee88304a8b4d91 en la versión 5.12 y parcheada en el commit 6e1acfa387b9ff82cfc7db8cc3b6959221a95851 en la versión 5.17.
Esta prueba de concepto y el write-up de la vulnerabilidad son solo para fines educativos. No soy legalmente responsable de ningún uso que se le pueda dar a este código.