pfSense CE 2.9.0-DEVELOPMENT - 高 - リモート - RCE - IPsec login_banner start-scripts
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · pfsense-ipsec-login-banner
クラス: RCE 到達範囲: リモート
pfSense CE 2.9.0-DEVELOPMENT (9363ac5) - pfsense.org
IPsec モバイルのログインバナーは長さチェックのみで保存され、その後 strongswan.conf に charon.plugins.attr.28672 としてクォートされずに出力されます。strongSwan はクォートされていない値を } で終了します。Form_Input で安全なバナー(改行なし)は attr / plugins を閉じ、charon.start-scripts を開くことができます。そのページでの適用は strongswanrc restart です。charon は起動時に start-scripts のパスを popen します。権限は page-vpn-ipsec-mobile であり、IPsec 詳細設定 / 診断: コマンドではありません。
| ID | CVE 未割当 |
| クラス | RCE |
| 到達範囲 | リモート(認証済み WebGUI) |
| CWE | CWE-74 |
| 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) IPsec login_banner |
| 認証 | page-vpn-ipsec-mobile を持つ WebGUI セッション |
| ライセンス | GNU Affero GPL v3.0 |
| ラボ | 127.0.0.1 のみ |
公開 master 9363ac5 を固定しました。ラボは ipsec_strongswan_confgen と実際の /usr/lib/ipsec/charon を固定しています。ループバック 127.0.0.1:18850。include プレフィックスは使用していません。
| 手法 | シンク | 権限 |
|---|---|---|
vpn_ipsec_mobile.php の保存に login_banner_enable と、attr/plugins を閉じて charon.start-scripts を開くバナーを付けて POST し、その後適用を POST | ipsec_strongswan_confgen のクォートされていない key = {$value} (ipsec.inc:1378-1384); charon による start-scripts の popen | 整合性(ラボ実証済み): 実際の charon が生成された conf を読み込み、start-scripts パスを popen しました(charon=yes)。対照バナー Welcome は attr 内に留まりました(control-no-scripts=yes)。 |
| 同じ popen | ホストファイルシステム | 偵察(推測): config.xml、鍵。 |
無効な strongswan.conf または IPsec 再起動 | charon | 可用性(推測): IPsec トンネルが切断されるか起動に失敗します。適用は既に IPsec を再起動します。 |
ラボ実証済み vs 推測: control-no-scripts、生成された conf 内の start-scripts、実際の charon popen はラボ実証済みです。ファイルシステム偵察はその popen からの推測です。注入ブロックの後のダミーセクションが confgen の 3 つの閉じ括弧を吸収するため、ファイルは有効な設定ツリーのままです。
必要条件: page-vpn-ipsec-mobile を持つ WebGUI セッション。CSRF トークン。同じページで保存してから適用。page-all、page-vpn-ipsec-editphase1、または IPsec 生設定テキストエリアは必要ありません。
| 攻撃面 | ラボ |
|---|---|
対照バナー Welcome | attr 内に留まり、start-scripts なし |
| 未認証 / トークンなしの CSRF | 閉じている |
OpenVPN config.ovpn | 別の残存物(G2) |
| P1 HTML XSS | SA-26_14 スキップリスト |
page-vpn-ipsec-editphase1 | 不要 |
| 診断: コマンド | 同時に付与されない限り閉じたまま |
このページの IPsec モバイル dns_domain は既に is_domain() を使用しています。
cd lab
./run.sh
ループバック 127.0.0.1:18850。Compose プロジェクト pfsense-ipsec-login-banner。イメージタグ pfsense-ipsec-login-banner:2.9.0-dev。ウィットネス PFSENSE-IPSEC-LOGIN-BANNER-WITNESS。最終行:
SUCCESS PFSENSE-IPSEC-LOGIN-BANNER control-no-scripts=yes start-scripts=yes charon=yes PFSENSE-IPSEC-LOGIN-BANNER-WITNESS
ipsec_strongswan_confgen 内で login_banner をクォート / エスケープします。保存時に } # および改行を拒否します(HTML ウィジェットは既に単一行の Form_Input です)。is_domain() は DNS ドメイン用にこのページに既に存在します。バナーにも同じクラスのチェックが必要です。
9363ac5b8651a1c7a333180425ce7719070f95f9vpn_ipsec_mobile.phpipsec.inc ipsec_strongswan_confgen / ipsec_setup_strongswancharon.start-scripts