
pfSense CE 2.9.0-DEVELOPMENT - 低 - リモート - CSRF - WOL GET wakeall
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · pfsense-wol-get-all
クラス: CSRF 到達範囲: リモート
pfSense CE 2.9.0-DEVELOPMENT (9363ac5) - pfsense.org
services_wol.php には依然として $_REQUEST['wakeall'] と href="services_wol.php?wakeall=true" が usepost なしで残っている。#16961 はこの公開ツリーではノートのみ。
| ID | CVE 未採番 |
| クラス | CSRF |
| 到達範囲 | リモート (特に断りのない限り認証済み WebGUI) |
| CWE | CWE-352 |
| CVSS | Medium: 4.3 CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:L/A:N |
| 製品 | pfSense CE |
| 影響を受けるバージョン | 2.9.0-DEVELOPMENT (9363ac5b8651a1c7a333180425ce7719070f95f9) |
| 認証 | page-services-wakeonlan (session; GET mutator) を持つ WebGUI セッション |
| ライセンス | GNU Affero GPL v3.0 |
| ラボ | 127.0.0.1 のみ |
公開 master 9363ac5 をピン留めした。ラボはピン留めしたシンクの PHP ガジェットで、127.0.0.1:19300 のループバック HTTP。
シリーズ解説: https://abraxaslabs.tech/research/pfsense-ce-leftovers
| 手法 | シンク | 権限 |
|---|---|---|
| GET services_wol.php?wakeall=true | 保存されたすべての MAC に対して send_wol() | 完全性: ラボで実証: GET ?wakeall=true は保存された両方の MAC に対して wol を送信した。wakeall なしの CONTROL GET は何も送信しなかった。 |
| 同じ残存箇所 | 同じシンク | 偵察: なし。 |
| 同じ残存箇所 | 同じシンク | 可用性: ラボで実証: 保存された WOL ターゲットを起動する。 |
必要条件: page-services-wakeonlan (session; GET mutator)。特に断りのない限り POST には CSRF-magic。WebGUI PHP-FPM は root。
必要条件: page-services-wakeonlan (session; GET mutator)。特に断りのない限り POST には CSRF-magic。WebGUI PHP-FPM は root。特に断りのない限り POST には CSRF-magic。WebGUI PHP-FPM は root。
セッション Cookie なしでは未認証。外部サイトからの CSRF には SameSite=Strict が依然として適用される。
そのページも許可されていない限り Diagnostics: Command はない。
cd lab
./run.sh
ループバック 127.0.0.1:19300。Compose プロジェクト pfsense-wol-get-all。ウィットネス PFSENSE-WOL-GET-ALL-WITNESS。ループバックのみ: 127.0.0.1:19300。Compose プロジェクト pfsense-wol-get-all。ウィットネス PFSENSE-WOL-GET-ALL-WITNESS。ピン留めした行の PHP ガジェット。スタックは実行後に破棄される。
最終行:
SUCCESS PFSENSE-WOL-GET-ALL control-no-packets=yes trigger-wake-all-get=yes PFSENSE-WOL-GET-ALL-WITNESS
wakeall を POST 専用にする。Wake All リンクに usepost を付ける。
9363ac5b8651a1c7a333180425ce7719070f95f9