
Evadiendo la Protección del Espacio Ejecutable de Linux usando herramientas de más de 20 años (CVE-2022-25265).
Este POC demuestra la ejecución de bytes ubicados en una región supuestamente no ejecutable del binario, por lo tanto, evitando completamente la protección de espacio ejecutable.
La causa raíz de esto se puede encontrar aquí: https://github.com/torvalds/linux/blob/master/arch/x86/include/asm/elf.h#L280
Resulta que los archivos binarios construidos en sistemas que carecen de NX o sistemas IA32 con NX, que NO contienen el encabezado PT_GNU_STACK, serán marcados con exec-all.
Esto permite RWX completo hacia/desde cualquier lugar del binario.
Para lograr esto, utilizamos herramientas de compilación "históricas".
En este caso, gcc 3.2.2 ejecutándose en x86 Slackware9 con Linux 2.4.20
Terminaremos con un archivo binario que puede ejecutarse en sistemas Linux modernos, en este caso Linux 5.16.1
El mismo efecto PODRÍA ser alcanzable con argumentos/scripts específicos del enlazador, aunque NO lo he verificado.
El siguiente código copiará los bytes ensamblados de la función dummy() al arreglo de caracteres harmless_str_buf y ejecutará el arreglo de destino como función.
Esta demostración sirve completamente con fines educativos. Bajo ninguna circunstancia se podrá responsabilizar al autor de este código por cualquier daño directo o indirecto causado por el mal uso de cualquier código y/o información proporcionada.
Consulte LICENCIA para más detalles