
pfSense CE 2.9.0-DEVELOPMENT - 高 - リモート - RCE - sshguard THRESHOLD CRLF
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · pfsense-sshguard-crlf
Class: RCE Reach: Remote
pfSense CE 2.9.0-DEVELOPMENT (9363ac5) - pfsense.org
sshguard_threshold / blocktime / detection_time は is_numericint ではない。system_sshguard_start は THRESHOLD= をそのまま書き込む。追加の BACKEND= が sshguard の実行する実行ファイルとなる。保存すると sshguard が再起動する。SA-26_06 の姉妹クラス、ファイルは異なる。
| 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-system-advanced-admin を持つ WebGUI セッション |
| License | GNU Affero GPL v3.0 |
| Lab | 127.0.0.1 のみ |
公開 master 9363ac5 を固定した。ラボは固定したシンクの PHP ガジェットで、127.0.0.1:18950 のループバック HTTP である。
シリーズ解説: https://abraxaslabs.tech/research/pfsense-ce-leftovers
| Method | Sink | Privilege |
|---|---|---|
| POST system_advanced_admin.php sshguard_threshold | syslog.inc system_sshguard_start THRESHOLD= の後 sshguard BACKEND exec | Integrity: ラボ実証済み: 追加の BACKEND= は後勝ち。スタブは sshguard.conf を source し、そのバックエンドを exec し、それが witness を書き込んだ。 |
| 同じ残存箇所 | 同じシンク | Recon: 推測: バックエンドは root として実行される。 |
| 同じ残存箇所 | 同じシンク | Availability: 推測: sshguard ファイアウォールバックエンドを置き換える。 |
Requires: page-system-advanced-admin。特記なき限り POST に CSRF-magic。WebGUI PHP-FPM は root。
Requires: page-system-advanced-admin。特記なき限り POST に CSRF-magic。WebGUI PHP-FPM は root。特記なき限り POST に CSRF-magic。WebGUI PHP-FPM は root。
ホワイトリストは is_subnet。SA-25_09 は別の sshguard バグである。
Diagnostics: Command はそのページも許可されていない限り不可。
cd lab
./run.sh
ループバック 127.0.0.1:18950。Compose プロジェクト pfsense-sshguard-crlf。Witness PFSENSE-SSHGUARD-CRLF-WITNESS。ループバックのみ: 127.0.0.1:18950。Compose プロジェクト pfsense-sshguard-crlf。Witness PFSENSE-SSHGUARD-CRLF-WITNESS。固定した行の PHP ガジェット。実行後にスタックは破棄される。
最終行:
SUCCESS PFSENSE-SSHGUARD-CRLF control-single-backend=yes trigger-backend-exec=yes PFSENSE-SSHGUARD-CRLF-WITNESS
3 つの sshguard フィールドを is_numericint する。CR/LF を拒否する。
9363ac5b8651a1c7a333180425ce7719070f95f9