
pfSense CE 2.9.0-DEVELOPMENT - 高 - リモート - RCE - CARP VHID の残存
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · pfsense-carp-vhid
クラス: RCE 到達範囲: リモート
pfSense CE 2.9.0-DEVELOPMENT (9363ac5) - pfsense.org
Virtual IP の編集は、POST から CARP VHID を 1-255 のチェックなしで保存する。Form_Select のオプションは HTML のみ。CARP 適用は VHID を escapeshellarg する。スタックされた IP Alias の適用は vhid {$carpvip['vhid']} を escapeshellarg の外側で補間する。CARP ステータスは同じ保存済み VHID をダブルクォートされた grep パイプラインに補間する。セミコロンはクォートされたままであるが、コマンド置換は /bin/sh -c の下で依然として実行される。必要な権限は VIP 編集 + 適用であり、Diagnostics: Command ではない。
| ID | CVE 未割当 |
| クラス | RCE |
| 到達範囲 | リモート (認証済み WebGUI) |
| CWE | CWE-78 |
| CVSS | High: 8.8 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| 製品 | pfSense CE |
| 影響 | 2.9.0-DEVELOPMENT (9363ac5b8651a1c7a333180425ce7719070f95f9) CARP VHID |
| 認証 | VIP 編集 + 適用が可能な WebGUI セッション (ステータス/ウィジェットは後段のトリガー) |
| ライセンス | GNU Affero GPL v3.0 |
| ラボ | 127.0.0.1 のみ |
公開 master 9363ac5 を固定した。ラボは、固定された interface_carp_configure、スタックされた ipalias の mwexec、およびステータスの exec を組み合わせた PHP ガジェットである。ループバック 127.0.0.1:18830。
| 手法 | シンク | 権限 |
|---|---|---|
非整数の VHID で carp VIP を POST し、その _vip{uniqid} 親に対してスタックされた IP Alias を適用する | mwexec ifconfig ... alias {$gateway} {$vhid} (interfaces.inc:3238) | 完全性 (ラボ実証済み): root シェル。ラボ: ipalias-unescaped が証跡を書き込んだ。同じ VHID の CARP 適用は何も書き込まなかった (carp-escaped=yes)。 |
同じ保存済み VHID で、status_carp.php に GET するか carp_status.widget.php をレンダリングする | exec grep パイプライン (pfsense-utils.inc:794) | 完全性 (ラボ実証済み): ダブルクォート内のコマンド置換が実行され、証跡を書き込んだ (status-sink=yes, status-subst=yes)。セミコロンはクォートされたままだった。ウィジェットのトリガーは別の GUI セッションでも可能。 |
| 同じ root シェル | ホストファイルシステム | 偵察 (推定): config.xml、鍵。 |
root シェルまたは壊れた ifconfig | CARP / エイリアスデバイス | 可用性 (推定): インターフェース / CARP / フィルターの混乱。 |
ラボ実証済み vs 推定: carp-escaped、ipalias-unescaped の証跡、およびステータスのコマンド置換の証跡はラボ実証済みである。ファイルシステム偵察とフィルター混乱は root PHP-FPM から推定される。
必要条件: page-firewall-virtualipaddress-edit (保存) および page-firewall-virtualipaddresses (適用)。ステータスシンク: page-status-carp または CARP ウィジェットを含む任意のダッシュボード。POST に対する CSRF。
| 攻撃面 | ラボ |
|---|---|
| CARP 適用自体 | VHID に対する escapeshellarg、carp-escaped=yes |
| CARP パスワード / advbase / advskew / サブネット | is_ipaddr / エスケープ済み |
| 未認証 | 閉じている |
| HA 認証情報なしでの同じオブジェクトの xmlrpc 適用 | SA-26_22 スキップリスト |
| Diagnostics: Command | 別途付与されない限り閉じたまま |
cd lab
./run.sh
ループバック 127.0.0.1:18830。Compose プロジェクト pfsense-carp-vhid。イメージタグ pfsense-carp-vhid:2.9.0-dev。証跡 PFSENSE-CARP-VHID-WITNESS。最終行:
SUCCESS PFSENSE-CARP-VHID carp-escaped=yes ipalias-unescaped=yes status-sink=yes PFSENSE-CARP-VHID-WITNESS
保存時に VHID を 1-255 の整数範囲に制限する。スタックされた IP Alias の適用時およびステータス grep 時に、CARP 適用がすでに行っているのと同じ方法で VHID を escapeshellarg する。
9363ac5b8651a1c7a333180425ce7719070f95f9firewall_virtual_ip.inc saveVIPinterfaces.inc スタックされた ipalias mwexecpfsense-utils.inc CARP ステータス grep