
pfSense CE 2.9.0-DEVELOPMENT - 高 - リモート - RCE - 無線クローン ifconfig
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · pfsense-wireless-clone
Class: RCE Reach: Remote
pfSense CE 2.9.0-DEVELOPMENT (9363ac5) - pfsense.org
interfaces_wireless_edit.php は $_POST['if'] を許可リストなしで保存する。interface_wireless_clone は interface_get_wireless_base($wlcfg['if']) を exec("/sbin/ifconfig wlan create wlandev {$baseif} {$mode} bssid 2>&1") に補間する。_wlan サフィックスは除去されるが、その前にあるセミコロンは残る。Mode は定数。隠し cloneif は生成されるもので、POST から取得されるものではない。
| ID | CVE 未割当 |
| Class | RCE |
| Reach | Remote(特に断りのない限り認証済み 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 |
| Product | pfSense CE |
| Affected | 2.9.0-DEVELOPMENT (9363ac5b8651a1c7a333180425ce7719070f95f9) |
| Auth | page-interfaces-wireless-edit を持つ WebGUI セッション |
| License | GNU Affero GPL v3.0 |
| Lab | 127.0.0.1 のみ |
公開 master 9363ac5 を固定した。ラボは固定したシンクの PHP ガジェットで、127.0.0.1:18910 上のループバック HTTP である。
シリーズ解説: https://abraxaslabs.tech/research/pfsense-ce-leftovers
| Method | Sink | Privilege |
|---|---|---|
| POST interfaces_wireless_edit.php if | interfaces.inc interface_wireless_clone exec ifconfig wlan create wlandev {$baseif} | Integrity: ラボで実証済み: POST if=ath0;w が /bin/sh -c 経由で追加の w を実行し、witness を書き込んだ。wireless-edit のみからの root ホストコマンド。 |
| 同じ残存箇所 | 同じシンク | Recon: 推測: 同じ root シェルが config.xml と鍵を読める。このページは exec 出力を表示しない。 |
| 同じ残存箇所 | 同じシンク | Availability: 推測: ワイヤレスクローンに対する悪意ある ifconfig。 |
Requires: page-interfaces-wireless-edit。特に断りのない限り POST に CSRF-magic。WebGUI PHP-FPM は root。
Requires: page-interfaces-wireless-edit。特に断りのない限り POST に CSRF-magic。WebGUI PHP-FPM は root。特に断りのない限り POST に CSRF-magic。WebGUI PHP-FPM は root。
Mode はインジェクタではない。隠し cloneif は POST からコピーされない。未認証は該当なし。Diagnostics: Command は不要であり、付与もされない。
そのページも付与されていない限り Diagnostics: Command はない。
cd lab
./run.sh
ループバック 127.0.0.1:18910。Compose プロジェクト pfsense-wireless-clone。Witness PFSENSE-WIRELESS-CLONE-WITNESS。ループバックのみ: 127.0.0.1:18910。Compose プロジェクト pfsense-wireless-clone。Witness PFSENSE-WIRELESS-CLONE-WITNESS。固定した行の PHP ガジェット。スタックは実行後に破棄される。
最終行:
SUCCESS PFSENSE-WIRELESS-CLONE control-wlandev=yes trigger-exec=yes hidden-cloneif-copied=no PFSENSE-WIRELESS-CLONE-WITNESS
POST if を稼働中のワイヤレス親に対して許可リスト化する。ifconfig の前に $baseif を escapeshellarg する。
9363ac5b8651a1c7a333180425ce7719070f95f9