
Bypassare la protezione dello spazio eseguibile di Linux usando strumenti di oltre 20 anni fa (CVE-2022-25265).
Questa POC dimostra l'esecuzione di byte situati in una regione del binario presumibilmente non eseguibile, bypassando quindi completamente la protezione dello spazio eseguibile.
La causa principale di questo comportamento si trova qui: https://github.com/torvalds/linux/blob/master/arch/x86/include/asm/elf.h#L280
A quanto pare, i file binari compilati su sistemi privi di NX o su sistemi IA32 con NX, che NON contengono l'header PT_GNU_STACK, vengono contrassegnati con exec-all.
Ciò consente un RWX completo da/verso qualsiasi punto del binario.
Per ottenere questo risultato, utilizziamo strumenti di compilazione "storici".
In questo caso, gcc 3.2.2 su x86 Slackware9 con Linux 2.4.20
Il risultato sarà un file binario eseguibile su moderni sistemi Linux, in questo caso Linux 5.16.1
Lo stesso identico effetto POTREBBE essere ottenibile con specifici argomenti/script del linker, anche se non ho verificato questa possibilità.
Il codice seguente copia i byte assemblati della funzione dummy() nell'array di caratteri harmless_str_buf ed esegue l'array di destinazione come funzione.
Questa dimostrazione ha esclusivamente scopi educativi. In nessun caso l'autore di questo codice può essere ritenuto responsabile per qualsiasi danno diretto o indiretto causato da un uso improprio del codice e/o delle informazioni fornite.
Vedere LICENSE per ulteriori dettagli