
Безопасная, контролируемая имитационная система, моделирующая CVE-2021-4034 (PwnKit), с чтением/записью за пределами границ, внедрением переменных окружения и обнаружением защитных механизмов ядра для учебной практики по эксплуатации уязвимостей.
Этот проект представляет собой имитационную систему, воспроизводящую ключевой принцип действия уязвимости CVE-2021-4034 (Out-of-Bounds Read/Write) в демоне pkexec для Linux. Без реального повышения привилегий SUID, в контролируемой среде безопасно моделируются механизмы вторжения в область памяти переменных окружения и инъекции (Injection) вредоносной полезной нагрузки.
Особенность данной имитационной системы заключается в том, что она обнаруживает защитный механизм execve современных ядер Linux (принудительную вставку пустой строки при передаче пустого массива, что приводит к argc=1) и корректирует смещение, тем самым успешно воссоздавая уязвимую среду памяти прошлых версий.
cve-2021-4034-mock/
├── README.md # Описание проекта и руководство по запуску
├── src/
│ ├── mock_pkexec.c # Исходный код целевого демона без проверки количества аргументов (argc)
│ └── exploit.c # Исходный код атакующего, передающего эксплойт-нагрузку через execve
└── bin/ # Каталог для скомпилированных исполняемых файлов (создаётся при сборке)
Перейдите в корневой каталог проекта в терминале и введите приведённые ниже команды по одной строке, чтобы скомпилировать исходный код.
# 1. Создание папки bin для хранения исполняемых файлов
mkdir -p bin
# 2. Компиляция целевой программы (имитационной системы)
gcc -Wall -Wextra -o bin/mock_pkexec src/mock_pkexec.c
# 3. Компиляция эксплойт-скрипта атакующего
gcc -Wall -Wextra -o bin/exploit src/exploit.c
При успешной компиляции в папке bin/ будут созданы исполняемые файлы mock_pkexec и exploit.
При запуске с корректной передачей аргументов доказывается, что из-за защитной логики проверка прав завершается неудачей либо программа безопасно завершает работу.
./bin/mock_pkexec test_argument
[OK].Запустите эксплойт-скрипт, чтобы принудительно передать полезную нагрузку argc=0 (NULL-массив) и тем самым спровоцировать уязвимость.
./bin/exploit
argc в 1, и динамически корректирует индекс обращения к памяти.argv с вторжением в соседнюю область envp.GCONV_PATH) успешно перезаписывается в системной памяти, и выводится предупреждение красным цветом [FATAL] ENVIRONMENT CORRUPTION DETECTED!.Чтобы удалить скомпилированные бинарные файлы после завершения тестирования, используйте следующую команду.
rm -rf bin/