
Contournement de la protection de l'espace exécutable Linux à l'aide d'outils vieux de plus de 20 ans (CVE-2022-25265).
Cette POC démontre l'exécution d'octets situés dans une région présumée non exécutable du binaire, contournant ainsi complètement la protection de l'espace exécutable.
La cause première de ceci se trouve ici : https://github.com/torvalds/linux/blob/master/arch/x86/include/asm/elf.h#L280
Il s'avère que les fichiers binaires construits sur des systèmes dépourvus de NX ou sur des systèmes IA32 avec NX, qui ne contiennent PAS l'en-tête PT_GNU_STACK, seront marqués avec exec-all.
Cela permet un accès RWX complet vers/depuis n'importe où dans le binaire.
Pour y parvenir, nous utilisons des outils de construction « historiques ». Dans ce cas, gcc 3.2.2 tournant sur x86 Slackware9 avec Linux 2.4.20 Nous obtiendrons un fichier binaire qui peut être exécuté sur des systèmes Linux modernes, dans ce cas Linux 5.16.1
Le même effet pourrait être réalisable avec des arguments/scripts d'éditeur de liens spécifiques, bien que je ne l'aie PAS vérifié.
Le code suivant copiera les octets assemblés de la fonction dummy() dans le tableau de caractères harmless_str_buf et exécutera le tableau de destination en tant que fonction.
Cette démonstration sert uniquement à des fins éducatives. En aucun cas l'auteur de ce code ne peut être tenu responsable des dommages directs ou indirects causés par une mauvaise utilisation du code et/ou des informations fournies.
Voir LICENSE pour plus de détails