
PoC для CVE-2021-4034 (PwnKit) в учебных целях.
Этот репозиторий содержит доказательство концепции для CVE-2021-4034, также известного как PwnKit. Он разработан только для личного обучения и образовательных целей. Используйте только в средах, которыми вы владеете или на тестирование которых у вас есть явное разрешение.
Для сборки эксплойта необходимы:
pkexec — это утилита из состава Polkit, которая позволяет авторизованному пользователю выполнять программы от имени другого пользователя, обычно с административными привилегиями, аналогично sudo. CVE-2021-4034 — это уязвимость повреждения памяти, затрагивающая этот бинарный файл. Проблема возникает из-за неправильной обработки аргументов, когда argc == 0. Это приводит к записи за пределами границ, позволяя атакующему управлять первым указателем переменной окружения в памяти. При определенных условиях это позволяет непривилегированному локальному пользователю повысить привилегии до root. Подробнее: https://www.qualys.com/2022/01/25/cve-2021-4034/pwnkit.txt
Финальный эксплойт полностью самодостаточен и не требует внешних библиотек или дополнительных бинарных файлов.
Дистрибутив: Ubuntu 20.04 LTS
Версия ядра: 5.4.0-42-generic
Версия Polkit: 0.105-26ubuntu1 (без исправлений)
Включенная оболочка (shell.asm) написана на ассемблере x86_64 для Linux. Она компилируется в разделяемый объект (.so) и встраивается в эксплойт.
При желании оболочку можно реализовать на C для большей переносимости между дистрибутивами, но версия на ASM сохранена для обучения и практики низкоуровневого программирования на ассемблере.
Примечание: Этот эксплойт и оболочка совместимы только со средами Linux на архитектуре x86_64. Использование другой архитектуры (например, ARM или i386) не будет работать.
Сборка:
make
Запуск:
./exploit
Очистка:
make clean
Эта уязвимость была исправлена в январе 2022 года.
Если у вас установлена неисправленная версия policykit-1, ваша система может быть уязвима. В качестве временной меры защиты вы можете удалить SUID-бит с pkexec:
chmod -s /bin/pkexec