
Umgehung des Linux Executable Space Protection unter Verwendung von über 20 Jahre alten Tools (CVE-2022-25265).
Dieser POC demonstriert die Ausführung von Bytes, die sich in einer angeblich nicht ausführbaren Region einer Binärdatei befinden, und umgeht damit vollständig den Schutz ausführbarer Speicherbereiche.
Die Ursache hierfür findet sich hier: https://github.com/torvalds/linux/blob/master/arch/x86/include/asm/elf.h#L280
Wie sich herausstellt, werden Binärdateien, die auf Systemen ohne NX oder auf IA32-Systemen mit NX erstellt wurden und die keinen PT_GNU_STACK-Header enthalten, mit exec-all gekennzeichnet.
Dies ermöglicht vollständige RWX-Berechtigungen überall in der Binärdatei.
Um dies zu erreichen, verwenden wir "historische" Build-Werkzeuge.
In diesem Fall gcc 3.2.2 unter x86 Slackware9 mit Linux 2.4.20
Das Ergebnis ist eine Binärdatei, die auf modernen Linux-Systemen ausgeführt werden kann, in diesem Fall Linux 5.16.1
Der gleiche Effekt KÖNNTE mit bestimmten Linker-Argumenten/-Skripten erzielt werden, allerdings habe ich dies NICHT überprüft.
Der folgende Code kopiert die assemblierten Bytes der Funktion dummy() in das Zeichen-Array harmless_str_buf und führt das Ziel-Array als Funktion aus.
Diese Demonstration dient ausschließlich Bildungszwecken. Der Autor dieses Codes kann unter keinen Umständen für direkte oder indirekte Schäden verantwortlich gemacht werden, die durch Missbrauch jeglicher bereitgestellter Codes und/oder Informationen entstehen.
Siehe LIZENZ für weitere Details