
OPNsense 26.7.6 - 高 - リモート - 権限の残存 - カスタムファームウェアミラーがpkgフィンガープリントをsedでスキップ
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · opnsense-firmware-mirror-sed
クラス: 署名スキップ 到達範囲: リモート
OPNsense コア 26.7.6 (a842fe48) - opnsense.org
システム: ファームウェア set がカスタム mirror / flavour を POST する。コアの FILTER_SANITIZE_URL は \|#;" を保持する。opnsense-update -m / -n はその文字列を OPNsense.conf 上の sed に補間し、signature_type を "fingerprints" から "none" に反転させ得る。その後、攻撃者の URL から root として pkg install が実行される。設定ページは、依然として署名された OPNsense パッケージのカスタムミラーを提供する。「署名を無効化」するコントロールは存在しない。権限は page-system-firmware-manualupdate であり、page-all ではない。
Sed はピン外の opnsense-update に存在する。このピンにおけるコアは、サニタイズされていないフィールドと -m パスの組み合わせである。ラボはその s||| プログラムテキストを GNU sed で再実行する。
この GitHub パックは調整された開示までプライベートのままとする。
| ID | CVE 未割当 |
| クラス | 署名スキップ |
| 到達範囲 | リモート (認証済み WebGUI / API) |
| CWE | CWE-74 / CWE-347 |
| CVSS | High: 7.2 CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H |
| 製品 | OPNsense core |
| 影響を受けるバージョン | 26.7.6 (a842fe48c21288d11a422cb944678e8eb308becf) ファームウェア set カスタムミラー |
| 認証 | page-system-firmware-manualupdate を持つ WebGUI セッションまたは API キー |
| ライセンス | GNU Affero GPL v3.0 |
| ラボ | 127.0.0.1 のみ |
タグ 26.7.6 のピール a842fe48 をピン留めした。ラボは FILTER_SANITIZE_URL と opnsense-update の mod_mirrorurl sed を組み合わせた PHP ガジェットであり、127.0.0.1:18860 上のループバック HTTP である。PR:H としたのは、ファームウェアページが既に署名済みパッケージのインストールを許可されているためである。このページを PR:L として扱う場合、スコアは 8.8 となる。
| 手法 | シンク | 権限 |
|---|---|---|
| を含むカスタムミラーに対する FILTER_SANITIZE_URL、続いて opnsense-update 形式の sed | OPNsense.conf の書き換え | 完全性 (ラボ実証済み): signature_type が "none"。コントロールミラーは "fingerprints" のまま。ラボ: sanitize-keeps-pipe=yes signature_type=none fingerprints-control=yes。 |
| 同じ set、plugins フィールド | setAction が plugins を破棄 | ネガティブ (ラボ実証済み): plugins は保存前に破棄される。 |
その後 POST /api/core/firmware/install/<pkg> | 攻撃者の URL から root として pkg install -y | 完全性 (推測): 署名なしパッケージを root として。ファームウェアページは既に署名済みパッケージをインストールする。この残存が検証スキップである。ラボに署名なしペイロードはない。 |
その後 POST /api/core/firmware/update または /upgrade | root として opnsense-update -pt / -u | 完全性 (推測): 検証をスキップした base/kernel セット (DO_INSECURE)。 |
GET /api/core/firmware/info、/running、/upgradestatus | ファームウェア API | 偵察 (推測): パッケージリスト、更新ログ、ミラーオプション。この ACL に対して意図されたもの。 |
POST /api/core/firmware/reboot、/poweroff、/remove/<pkg> | configd ファームウェアアクション | 可用性 (推測): 再起動/停止/削除。この ACL に対して意図されたものであり、残存ではない。 |
ラボ実証済み vs 推測: サニタイズが | を保持すること、および signature_type が none であることはラボ SUCCESS である。署名なしパッケージのライブ pkg install は推測である。ガジェットであり、完全な OPNsense FreeBSD VM ではない。署名なしパッケージペイロードはない。
必要条件: サインイン済みユーザー、またはそのユーザーの Local API キーが page-system-firmware-manualupdate を持ち、page-all を持たないこと。セッション POST に対する CSRF。未認証ではない。ダッシュボードのみでもない。
| 面 | ラボ |
|---|---|
| 未認証ファームウェア | 401 |
| ダッシュボードのみ | 403 |
コントロールミラー https://pkg.opnsense.org | signature_type は "fingerprints" のまま |
| プラグイン名トラバーサル | filter_pkgname |
| 変更履歴の取得 | 依然として opnsense-verify |
save() 上の user-config-readonly | throwReadOnly() |
| 検証スキップのない標準 HTTP ミラー | トランスポート MITM。fingerprints は依然として必要。 |
| XMLRPC ファームウェア | バージョン文字列のみ |
未認証なし。ダッシュボードのみなし。変更履歴は依然として署名済み。
cd lab
./run.sh
ループバック 127.0.0.1:18860。Compose プロジェクト opnsense-firmware-mirror-sed。ウィットネス OPNSENSE-FIRMWARE-MIRROR-SED-WITNESS。最終行:
SUCCESS opnsense-firmware-mirror-sed sanitize-keeps-pipe=yes signature_type=none fingerprints-control=yes OPNSENSE-FIRMWARE-MIRROR-SED-WITNESS
ルートランチャー: python3 opnsense-firmware-mirror-sed-Abraxas-Labs.py。
ラボで使用された攻撃ミラーの形状 (ウィットネスのみ、署名なし pkg なし):
https://example.invalid/|;/signature_type/s/"fingerprints"/"none"/;#
URL でないカスタムミラーを拒否する。opnsense-update -m / -n の前に sed メタ文字 (|、;、#、") を除去するか、URL をファイルとして渡して sed がそれをプログラムテキストとして見ないようにする。別途監査されたコントロールが検証をオフにしない限り、signature_type: "fingerprints" を維持する。ファームウェア set に fingerprints を "none" へ書き換えさせない。
a842fe48c21288d11a422cb944678e8eb308becfFirmwareController.php setAction FILTER_SANITIZE_URLscripts/firmware/repos/OPNsense.php opnsense-update -sd -mOPNsense.conf.shadow.in 標準の signature_type: "fingerprints"opnsense-update mod_mirrorurl (url: 行に対する s\|\|)