
pfSense CE 2.9.0-DEVELOPMENT - 高 - リモート - RCE - assign Add if_add
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · pfsense-assign-if-add
クラス: RCE 到達範囲: リモート
pfSense CE 2.9.0-DEVELOPMENT (9363ac5) - pfsense.org
interfaces_assign.php の Add は、$portlist のメンバーシップを確認せずに $_POST['if_add'] を保存する。Submit は $portlist 内のポートのみを再マップする。wireless_regex は /^(ath|...)[0-9]+/ で $ がなく、ath0;w がマッチする。Clone と get_wireless_modes が ifconfig に補間する。
| 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) |
| 認証 | page-interfaces-assignnetworkports then GET interfaces.php?if=optN を伴う WebGUI セッション |
| ライセンス | GNU Affero GPL v3.0 |
| ラボ | 127.0.0.1 のみ |
公開 master 9363ac5 を固定した。ラボは固定したシンクの PHP ガジェットで、127.0.0.1:18920 上のループバック HTTP である。
シリーズ解説: https://abraxaslabs.tech/research/pfsense-ce-leftovers
| 手法 | シンク | 権限 |
|---|---|---|
| POST interfaces_assign.php if_add、その後 GET interfaces.php?if=optN | アンカーされていない wireless_regex、その後 interface_wireless_clone ifconfig | Integrity: ラボで実証済み: Add が ath0;w を opt1 として保存; GET interfaces.php?if=opt1 が clone ifconfig を実行; 余分な w が witness を書き込んだ。 |
| 同じ残存物 | 同じシンク | Recon: 推測: root シェルはホストのファイルを読み取れる。 |
| 同じ残存物 | 同じシンク | Availability: 推測: 割り当てられたポート上で悪意ある ifconfig。 |
必要条件: page-interfaces-assignnetworkports then GET interfaces.php?if=optN。注記がない限り POST に CSRF-magic。WebGUI PHP-FPM は root。
必要条件: page-interfaces-assignnetworkports then GET interfaces.php?if=optN。注記がない限り POST に CSRF-magic。WebGUI PHP-FPM は root。注記がない限り POST に CSRF-magic。WebGUI PHP-FPM は root。
$portlist にない if_add の Submit 再マップは exec しない。Diagnostics: Command は不要。
そのページも付与されていない限り Diagnostics: Command は不要。
cd lab
./run.sh
ループバック 127.0.0.1:18920。Compose プロジェクト pfsense-assign-if-add。Witness PFSENSE-ASSIGN-IF-ADD-WITNESS。ループバックのみ: 127.0.0.1:18920。Compose プロジェクト pfsense-assign-if-add。Witness PFSENSE-ASSIGN-IF-ADD-WITNESS。固定した行の PHP ガジェット。実行後にスタックは破棄される。
最終行:
SUCCESS PFSENSE-ASSIGN-IF-ADD control-no-exec=yes trigger-exec=yes PFSENSE-ASSIGN-IF-ADD-WITNESS
if_add が $portlist に含まれることを要求する。wireless_regex を $ でアンカーする。clone 名を escapeshellarg する。
9363ac5b8651a1c7a333180425ce7719070f95f9