
pfSense CE 2.9.0-DEVELOPMENT - 高 - リモート - RCE - Unbound sock-queue-timeout CRLF
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · pfsense-unbound-sock-timeout
Class: RCE Reach: Remote
pfSense CE 2.9.0-DEVELOPMENT (9363ac5) - pfsense.org
sock_queue_timeout は生のまま保存される。unbound.inc はこのページで test_unbound_config を実行せずに sock-queue-timeout: {$sock_queue_timeout} を出力する。CRLF により include: / logfile: / python-script: が追加される。#16637 は General Settings の checkconf のみである。
| ID | CVE 未割当 |
| Class | RCE |
| Reach | Remote (注記がない限り認証済み 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 |
| Product | pfSense CE |
| Affected | 2.9.0-DEVELOPMENT (9363ac5b8651a1c7a333180425ce7719070f95f9) |
| Auth | page-services-dnsresolver-advanced を持つ WebGUI セッション |
| License | GNU Affero GPL v3.0 |
| Lab | 127.0.0.1 のみ |
公開 master 9363ac5 を固定した。ラボは固定したシンクの PHP ガジェットで、127.0.0.1:19050 のループバック HTTP である。
シリーズ解説: https://abraxaslabs.tech/research/pfsense-ce-leftovers
| Method | Sink | Privilege |
|---|---|---|
| POST services_unbound_advanced.php sock_queue_timeout | unbound.inc sock-queue-timeout: {$sock_queue_timeout} | Integrity: ラボ実証済み: 生成された conf に追加の include: が入る。スタブ unbound が include をたどり、仕込まれた証拠をダンプした。 |
| 同じ残存箇所 | 同じシンク | Recon: ラボ実証済み: Unbound のパースが include された host ファイルを読み取る。 |
| 同じ残存箇所 | 同じシンク | Availability: 推測: 汚染された conf によりリゾルバの起動が失敗しうる。 |
必要権限: page-services-dnsresolver-advanced。注記がない限り POST には CSRF-magic が適用される。WebGUI PHP-FPM は root で動作する。
必要権限: page-services-dnsresolver-advanced。注記がない限り POST には CSRF-magic が適用される。WebGUI PHP-FPM は root で動作する。注記がない限り POST には CSRF-magic が適用される。WebGUI PHP-FPM は root で動作する。
文書化されている custom_options テキストエリアは別の残存箇所である。General Settings の checkconf はこのフィールドを対象としない。
そのページも許可されていない限り Diagnostics: Command はない。
cd lab
./run.sh
ループバック 127.0.0.1:19050。Compose プロジェクト pfsense-unbound-sock-timeout。証拠 PFSENSE-UNBOUND-SOCK-TIMEOUT-WITNESS。ループバックのみ: 127.0.0.1:19050。Compose プロジェクト pfsense-unbound-sock-timeout。証拠 PFSENSE-UNBOUND-SOCK-TIMEOUT-WITNESS。固定した行の PHP ガジェット。実行後にスタックは破棄される。
最終行:
SUCCESS PFSENSE-UNBOUND-SOCK-TIMEOUT control-one-timeout=yes control-checkconf-pass=yes trigger-include=yes trigger-dump-witness=yes advanced-no-checkconf=yes PFSENSE-UNBOUND-SOCK-TIMEOUT-WITNESS
sock_queue_timeout に is_numericint を適用する。Advanced 保存時に test_unbound_config を実行する。
9363ac5b8651a1c7a333180425ce7719070f95f9