FreeBSDのセキュリティ機構は、setcred(2)システムコールのアーキテクチャ内に存在する高深刻度の脆弱性CVE-2026-45250を解決することに成功しました。この根本的な欠陥はカーネルのコアロジック内に潜んでおり、認証されていないローカルの攻撃者が壊滅的なカーネルパニックを引き起こしたり、特定の運用設定下では実行権限を絶対的なrootレベルまで昇格させたりすることを可能にしていました。特に重大なのは、オペレーティングシステムが呼び出しプロセスの認可パラメータを検証する前にこの欠陥のあるルーチンを解析していた点であり、その結果、脆弱なコードパスを実行するために管理者権限が一切不要でした。
公式アドバイザリの開示と環境への修正適用
これを受け、FreeBSDセキュリティオフィサーは公式アドバイザリFreeBSD-SA-26:18.setcredを配布するとともに、サポート中の全デプロイメントトラック向けにバイナリパッチを提供しました。
| オペレーティングシステムのバージョン | 最低限必要なパッチレベル |
| FreeBSD 14.3 | 14.3-RELEASE-p14 |
| FreeBSD 14.4 | 14.4-RELEASE-p5 |
| FreeBSD 15.0 | 15.0-RELEASE-p9 |
エンジニアはまた、継続中の開発リリースを保護するため、これらの決定的な構造的修正を上流のstable/14およびstable/15ソースツリーにバックポートしました。
setcred(2)サブシステムの機能的な誕生
setcred(2)プリミティブは、FreeBSD 14.3-RELEASEの本番環境において初めて導入されました。高権限アプリケーション向けに設計されたこのシステムコールは、実行スレッドが単一のトランザクションで対象プロセスの包括的な資格情報プロファイルをアトミックに確立することを可能にします。具体的には、実UID・有効UID・保存UIDおよびグループ識別子を同期し、補助グループメンバーシップをまとめ、強制アクセス制御(MAC)セキュリティラベルを適用します。これにより、この統合的なメカニズムはsetuid(2)、setgid(2)、setgroups(2)といったレガシープリミティブの断片的な呼び出し列を事実上置き換えます。
サイズ不一致の欠陥に関するアーキテクチャ的解析
根本的なメモリ破損の異常は、補助グループ配列の構造的解析中に顕在化しました。内部ヘルパー関数kern_setcred_copyin_supp_groups()において、カーネルはユーザー空間からグループ識別子の配列をローカルのメモリコンテナに取り込むよう指示されていました。しかし、コピー先バッファのサイズ計算において、コンパイラはgid_t要素型の実際の構造を解析する代わりに、抽象的なメモリポインタの物理的なフットプリントを評価していました。64ビットアーキテクチャでは、この論理的誤りが深刻なスカラー不一致を引き起こしました。標準的なメモリポインタは8バイトの記憶領域を必要とするのに対し、ネイティブのgid_tトークンはわずか4バイトしか必要としません。この構造的な差異の結果、カーネルは割り当てられた領域に期待される量の最大2倍のデータを誤ってコピーしていました。
最も根本的な抽象化において、この脆弱性はsizeof(*groups)式の悪意ある解釈を中心に具現化しました。重要な実行分岐点において、このディレクティブはターゲットのグループ識別子構造の実際のサイズを完全に無視し、ポインタ変数のサイズのみを評価していました。カーネルがヒープからこのメモリプールを動的に確保するシナリオでは、余剰バイトの割り当ては単に無害なバッファパディングをもたらすに過ぎませんでした。一方、実行パスがカーネルスタック上にネイティブに配置された境界付きバッファを横断する場合、受信データがローカル配列の境界を超えて溢れ出し、隣接する重要なレジスタに侵食しました。
カーネルスタック破損の深刻な危険性
カーネル空間におけるスタックベースのバッファオーバーフローは、コアオペレーティングシステムを制御するメモリ構造を直接破壊するため、極めて致命的な危険をもたらします。良性のシナリオでは、このメモリ破損が実行スレッドを不安定にし、マシンがハードな物理的再起動を必要とする即時のカーネルパニックに陥ります。しかし、より巧妙な侵入チェーンでは、有能な攻撃者がこれらの破損したスタックフレームを操作してCPUの命令ポインタをリダイレクトすることができます。この操作によりカーネルの実行フローが乗っ取られ、非特権プロセスに絶対的なスーパーユーザー権限が付与されます。
非同期論理検証の戦略的影響
この脆弱性の決定的な危険性は、その論理的操作の非同期的な順序によってさらに増大します。カーネルは、呼び出し元プロセスが暗号化された資格情報を変更する管理者権限を持っているかどうかを検証する前に、ユーザー空間からのデータコピールーチンを開始していました。その結果、非特権のローカルアクターは誰でも自由に脆弱なパスを初期化することができました。この特定の露出パターンは、マルチテナントサーバー環境、仮想化されたjailエンクレーブ、コンテナ化されたマイクロサービスアーキテクチャ、または初期侵害によって攻撃者が低権限のシステムアクセスを得ているWebアプリケーションに対して、莫大なシステムリスクをもたらします。
FatGidの武器化:シリコンレベルの防御の回避
セキュリティ研究者たちはこのローカルなエクスプロイトベクターをFatGidと命名し、amd64アーキテクチャ上でネイティブに動作するFreeBSD 14.3および14.4を標的とした機能的なローカル権限昇格エクスプロイトを実証しました。彼らの調査データは、スーパーバイザーモードアクセス防止(SMAP)およびスーパーバイザーモード実行防止(SMEP)という現代のハードウェア強制保護機能が完全に有効な状態でも、攻撃者がrootシェルの奪取を達成できることを確認しています。これらのハードウェアゲートは、カーネルがユーザー空間のメモリマップから誤って読み取ったりコードを実行したりすることを防ぐことでカーネルを隔離するよう設計されています。こうしたシリコン障壁は通常、基本的なカーネルエクスプロイトチェーンを無力化しますが、FatGidエクスプロイトは高権限のカーネルメモリプール内にすでに常駐している既存の構造のみを操作することで、巧みにそれらを回避します。
修正の必須要件と戦略的緩和プロトコル
エクスプロイトチェーンの詳細な解析(明示的なメモリオフセット、カーネル構造のレイアウト、ロードされたモジュールを乗っ取るための偽オブジェクトのステージングなど)は防御上の観点から省略しますが、実際のリスクマトリクスは依然として厳然たるものです。パッチ未適用のFreeBSD 14.3および14.4インフラストラクチャでは、この単一の欠陥が制約された低権限の侵害をホストシステムへの完全かつ無制限の支配権へと転化させます。
ロード済みカーネルモジュールを利用した防御回避
エクスプロイトチェーンの特殊なバリエーションは、ネイティブのストレージドライバモジュールzfs.koを活用します。ZFSストレージプールを使用するFreeBSDエコシステムはこのモジュールを常にアクティブなメモリ状態で維持しているため、この依存条件は大多数の本番環境において極めて現実的なシナリオを示します。重要なのは、根本的な脆弱性がZFSコードベース自体には存在しておらず、ZFSは根本的に安全なままであるという点です。むしろエクスプロイトチェーンは、マシンで有効化されたハードウェア防御(SMAP/SMEP)を巧みに回避するための便利な戦術的橋渡しとして、ロードされたZFSバイナリを利用します。
上流ティア間の比較構造分析
FreeBSD 15.0も欠陥のあるソースコードが存在したためセキュリティパッチが必要でしたが、その隣接するカーネルレイアウトはFreeBSD 14.4のベースラインとは大幅に異なります。分析データは、14.xブランチ向けに最適化された特定のエクスプロイトチェーンが、これらの構造的な差異により15.0ティアでのroot昇格を達成できないことを示唆しています。それでも、非特権ユーザーはバグを呼び出してシステム全体の即時クラッシュを引き起こすことができるため、FreeBSD 15.0へのアップデート適用は絶対的なセキュリティ上の必要事項であることに変わりありません。
構造的パッチの異例なライフサイクル
このコード修正の時系列的な経緯は、極めて異例な軌跡をたどりました。問題のあるロジックは、setcred()アーキテクチャの包括的なリファクタリングの一環として、2025年11月の時点でFreeBSDのメインブランチからひっそりと削除されていました。しかし、対応するコミットメタデータにはスタックベースのバッファオーバーフローリスクについての明示的な記述が含まれていませんでした。公式のセキュリティアドバイザリと追跡トークンは大幅に遅れて登場し、安定版リリース向けに準備されたコンパイル済みバイナリパッチと同時にデビューしました。
エンタープライズ境界の堅牢化:実行すべきアップグレード
システム管理者は、稼働中のデプロイメントのパッチレベルを直ちに監査する必要があります。ターミナルのビルドイテレーションが14.3-RELEASE-p14、14.4-RELEASE-p5、または15.0-RELEASE-p9を下回る場合、カーネルを再コンパイルまたはアップグレードした上で、必須のシステム再起動を実施しなければなりません。正確な修正方法はインフラストラクチャの種類によって異なります。標準環境では自動化されたfreebsd-updateユーティリティを活用できますが、カスタムデプロイメントでは認証済みソースツリーからベースシステムのバイナリを直接コンパイルする必要があるかもしれません。
重要なのは、FreeBSD 13.xなどのレガシーブランチはこの脅威ベクターから完全に隔離されており、それらのコードベースにはsetcred(2)サブシステムが存在しないという点です。現代の本番サーバーに対する防御上の命令は絶対的です。セキュリティパッチを適用し、更新されたカーネルでクリーンな再起動シーケンスを実行し、マルチユーザーテナンシー、隔離されたjail環境、または制限されたネットワークサービスをホストするシステムを徹底的に監査してください。
翻訳元: https://meterpreter.org/freebsd-setcred-root-exploit-cve-2026-45250/