
OPNsense 26.7.6 - 高 - リモート - 設定行インジェクション - tunables ローダー
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · opnsense-tunables-loader
分類: 設定行インジェクション 到達範囲: リモート
OPNsense コア 26.7.6 (a842fe48) - opnsense.org
System: Advanced: Tunables は依然として name/value を /boot/loader.conf に補間します。GHSA-fq94 の残存する兄弟です。Tunables.xml の tunable / value は素の TextField(改行許可)です。system_login_configure() は {$param}="{$value}" を書き込みます。Tunables の再設定は login も再起動します。ライブの sysctl(8) は shell_safe と OID フィルタを経由するため、そのホップはシェルインジェクションではありません。残存するのは次回起動時の追加ローダーディレクティブです。権限は page-system-advanced-sysctl であり、page-all ではありません。
この GitHub パックは協調開示まで非公開のままです。
| ID | CVE 未採番 |
| 分類 | 設定行インジェクション |
| 到達範囲 | リモート(認証済み WebGUI / API) |
| CWE | CWE-93 |
| CVSS | High: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| 製品 | OPNsense core |
| 影響 | 26.7.6 (a842fe48c21288d11a422cb944678e8eb308becf) System: Advanced: Tunables |
| 認証 | page-system-advanced-sysctl を持つ WebGUI セッションまたは API キー |
| ライセンス | GNU Affero GPL v3.0 |
| ラボ | compose exec gadget (hunt slot 18850) |
タグ 26.7.6 の peel a842fe48 を固定しました。ラボは固定された system_login_configure() 補間の PHP ガジェットです。Compose プロジェクト opnsense-tunables-loader。18800-18860 ガジェットファミリー内の hunt slot 18850。この compose ファイルは公開 HTTP バインドではなく docker compose exec php を使用します。
| 手法 | シンク | 権限 |
|---|---|---|
Tunables 値の CR/LF (hw.usb.no_boot_wait と "\n# witness) | /boot/loader.conf 内の system_login_configure() 追加行を固定 | 完全性(ラボ実証済み): 閉じた代入の後に独自行として追加の # OPNSENSE-TUNABLES-LOADER-WITNESS。ラボ: newline-extra-line=yes。 |
クリーンな値 1 | 同じライター | ネガティブ(ラボ実証済み): 単一代入行、witness なし。ラボ: clean-value-single-line=yes。 |
| 次回起動時に同じ追加ローダー行 | ローダー init_path / module_path / *_load / vfs.root.mountfrom / コンソール | 完全性(推測): 次回起動時のローダーが攻撃者のキーを尊重。このガジェットでは再起動していません。 |
不正なローダー行 / 誤った vfs.root.mountfrom | /boot/loader.conf | 可用性(推測): 起動失敗または誤ったルート。 |
POST /api/core/tunables/searchItem | tunables API | 偵察(推測): tunables の一覧表示(現在値/デフォルト/型を含む)。この ACL の想定範囲。 |
有効な OID のライブ sysctl -w | set_sysctl + OID フィルタ | 想定されたページの役割。追加ローダー行が残存物。 |
ラボ実証済み vs 推測: 改行による追加ローダー行とクリーン値の単一行はラボ SUCCESS。次回起動時のローダー適用は推測。ガジェットであり、完全な OPNsense FreeBSD VM ではありません。
必要条件: サインイン済みユーザー、またはそのユーザーの Local API キーが page-system-advanced-sysctl を持ち、page-all を持たないこと。POST /api/core/tunables/*。セッション POST では CSRF。再設定は login を再起動します。rc.reload_all と起動も system_login_configure を呼び出します。
| 面 | ラボ |
|---|---|
| ライブ sysctl シェルインジェクション | shell_safe と OID フィルタ |
| クリーンな値 | 単一代入行 |
| 未認証 | 401 |
page-system-advanced-sysctl を持たないユーザー | 403 |
user-config-readonly | save() が例外を投げる |
page-all の tunables 管理者が実際の OID を設定 | 想定内 |
| GHSA-fq94 でパッチされた GUI テキストフィールド | 異なるシンク。このフィールドは名指しされていなかった |
未認証なし。ライブ sysctl シェルなし。Diagnostics: Command なし。
cd lab
./run.sh
Compose プロジェクト opnsense-tunables-loader。Witness OPNSENSE-TUNABLES-LOADER-WITNESS。最終行:
SUCCESS opnsense-tunables-loader newline-extra-line=yes clean-value-single-line=yes OPNSENSE-TUNABLES-LOADER-WITNESS
ルートランチャー: python3 opnsense-tunables-loader-Abraxas-Labs.py。
tunables の name と value から CR/LF と " を除去。GHSA-fq94 と同じ分類。name は素の TextField ではなく OID マスクとして型付け。代入を閉じられないヘルパーでクォート。既知のローダーキーでない限り、tunable を /boot/loader.conf に書き込まない。
a842fe48c21288d11a422cb944678e8eb308becfsystem.inc system_login_configure loader.conf 補間Tunables.xml 素の TextField name/value