
pfSense CE 2.9.0-DEVELOPMENT - 높음 - 원격 - RCE - wireless clone 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']를 allowlist 없이 저장합니다. 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를 고정했습니다. 랩은 고정된 sink의 PHP gadget이며, 127.0.0.1:18910에서 loopback 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에서만 루트 호스트 명령이 가능합니다. |
| 동일한 잔여 취약점 | 동일한 sink | Recon: 추론됨: 동일한 루트 셸이 config.xml과 키를 읽을 수 있습니다. 이 페이지는 exec 출력을 표시하지 않습니다. |
| 동일한 잔여 취약점 | 동일한 sink | Availability: 추론됨: 무선 클론에 대한 악의적 ifconfig. |
Requires: page-interfaces-wireless-edit. 별도 언급이 없는 한 POST에 CSRF-magic 적용. WebGUI PHP-FPM은 루트입니다.
Requires: page-interfaces-wireless-edit. 별도 언급이 없는 한 POST에 CSRF-magic 적용. WebGUI PHP-FPM은 루트입니다. 별도 언급이 없는 한 POST에 CSRF-magic 적용. WebGUI PHP-FPM은 루트입니다.
Mode는 인젝터가 아닙니다. 숨겨진 cloneif는 POST에서 복사되지 않습니다. Unauth N/A. Diagnostics: Command는 필요하지 않으며 부여되지도 않습니다.
해당 페이지도 함께 부여되지 않는 한 Diagnostics: Command는 없습니다.
cd lab
./run.sh
Loopback 127.0.0.1:18910. Compose 프로젝트 pfsense-wireless-clone. Witness PFSENSE-WIRELESS-CLONE-WITNESS. Loopback 전용: 127.0.0.1:18910. Compose 프로젝트 pfsense-wireless-clone. Witness PFSENSE-WIRELESS-CLONE-WITNESS. 고정된 라인들의 PHP gadget. 실행 후 스택은 해체됩니다.
마지막 줄:
SUCCESS PFSENSE-WIRELESS-CLONE control-wlandev=yes trigger-exec=yes hidden-cloneif-copied=no PFSENSE-WIRELESS-CLONE-WITNESS
POST if를 실제 무선 부모 인터페이스에 대해 allowlist로 검증하십시오. ifconfig 전에 $baseif를 escapeshellarg로 처리하십시오.
9363ac5b8651a1c7a333180425ce7719070f95f9