
Burlar a Proteção de Espaço Executável do Linux usando ferramentas com mais de 20 anos (CVE-2022-25265).
Este POC demonstra a execução de bytes localizados em uma região supostamente não executável de um binário, contornando completamente a proteção de espaço executável.
A causa raiz disso pode ser encontrada aqui: https://github.com/torvalds/linux/blob/master/arch/x86/include/asm/elf.h#L280
Acontece que arquivos binários construídos em sistemas sem NX ou sistemas IA32 com NX, que NÃO contêm o cabeçalho PT_GNU_STACK serão marcados com exec-all.
Isso permite leitura, escrita e execução completas em todo o binário.
Para conseguir isso, usamos ferramentas de compilação "históricas".
Neste caso, gcc 3.2.2 rodando em x86 Slackware9 com Linux 2.4.20
Obteremos um arquivo binário que pode ser executado em sistemas Linux modernos, neste caso Linux 5.16.1
O MESMO efeito PODE ser alcançado com argumentos/scripts específicos do linker, embora eu NÃO tenha verificado isso.
O código a seguir copiará os bytes montados da função dummy() para o array de caracteres harmless_str_buf e executará o array de destino como uma função.
Esta demonstração serve exclusivamente para fins educacionais. Em nenhuma circunstância o autor deste código pode ser responsabilizado por qualquer dano direto ou indireto causado pelo uso indevido de qualquer código e/ou informação fornecida.
Consulte LICENSE para mais detalhes