
Обход защиты исполняемой области памяти Linux с помощью инструментов 20+ летней давности (CVE-2022-25265).
Этот POC демонстрирует выполнение байтов, расположенных в якобы неисполняемой области бинарного файла, полностью обходя защиту исполняемого пространства.
Первоисточник этой проблемы можно найти здесь: https://github.com/torvalds/linux/blob/master/arch/x86/include/asm/elf.h#L280
Как оказалось, бинарные файлы, собранные либо в системах без NX, либо в IA32-системах с NX, которые НЕ содержат заголовок PT_GNU_STACK, будут помечены как exec-all.
Это позволяет полный доступ RWX отовсюду и во всём бинарном файле.
Чтобы добиться этого, мы используем «исторические» инструменты сборки.
В данном случае это gcc 3.2.2, работающий на x86 Slackware9 с Linux 2.4.20.
В итоге мы получим бинарный файл, который может выполняться в современных системах Linux, в данном случае — Linux 5.16.1
Того же самого эффекта МОЖНО достичь с помощью специфических аргументов/скриптов линковщика, хотя я этого НЕ проверял.
Следующий код скопирует ассемблированные байты функции dummy() в символьный массив harmless_str_buf и выполнит массив назначения как функцию.
Эта демонстрация служит исключительно в образовательных целях. Ни при каких обстоятельствах автор данного кода не может быть привлечён к ответственности за любой прямой или косвенный ущерб, причинённый в результате неправомерного использования предоставленного кода и/или информации.
Подробнее см. LICENSE