FreeBSD 14.x で発見された深刻な権限昇格脆弱性(CVE-2026-45250)を徹底解説#
読了時間:約3〜4分
FreeBSD 14.xに、非特権ローカルユーザーがroot権限を取得できる深刻な脆弱性が発見されました。
原因は たった1つのsizeof型ミス です。
4バイトのはずが8バイトになる――この単純なタイポが、カーネルパニックからフルのroot奪取まで引き起こします。
📌 この記事でわかること#
- CVE-2026-45250の脆弱性の概要と影響範囲
- 技術的な根本原因(sizeof型エラー)の仕組み
- 自分のシステムが影響を受けるかどうかの確認方法
- 修正済みバージョンへの対処法
【結論】まず押さえるべき重要ポイント3選#
① 影響バージョン:FreeBSD 14.3-RELEASE / 14.4-RELEASE(未パッチ版) ② 脆弱性深刻度:非特権ユーザーによるroot権限奪取(LPE)が可能 ③ 対処法:各バージョンの修正済みパッチレベルへ即時アップデート
CVE-2026-45250とは?基本概念の解説#
CVE-2026-45250 は、FreeBSD 14.xのカーネルに存在する ローカル権限昇格(LPE: Local Privilege Escalation) 脆弱性です。
対応するセキュリティアドバイザリは FreeBSD-SA-26:18.setcred で、2026年5月21日に公開されました。
問題のシステムコール:setcred(2)#
この脆弱性の舞台は、setcred(2) というシステムコールです。
- 導入日: 2024年12月16日(コミット
ddb3eb4efe55) - 初出荷: FreeBSD 14.3-RELEASE
- バグ除去: 2025年11月24日(コミット
4cd93df95e69による副次的効果)- ※このコミットのメッセージにはスタックオーバーフローへの言及なし
重要:バグは「意図的な修正」ではなくリファクタリングの副産物として静かに除去されていました。
技術的な根本原因:sizeof型エラーの仕組み#
問題のファイルと関数#
- ファイル:
sys/kern/kern_prot.c - 関数:
kern_setcred_copyin_supp_groups() - 該当行: 528〜533行
4バイトが8バイトになる仕組み#
関数の引数 groups は gid_t ** 型(ダブルポインタ)として宣言されています。
そのため、sizeof(*groups) は以下のように評価されます:
| 意図した評価 | 実際の評価 |
|---|---|
sizeof(gid_t) = 4バイト | sizeof(gid_t *) = 8バイト(LP64環境) |
この式が メモリ確保 と コピー操作(copyin) の2箇所で使用されています。
スタックオーバーフローの発生条件#
スタックパス(sc_supp_groups_nb < 16 の場合)において:
- バッファ容量:
15 × 4 = 60バイト - 実際に書き込まれるバイト数:
15 × 8 = 120バイト - オーバーフロー量:60バイト
この60バイトの超過書き込みデータは、攻撃者がユーザー空間から完全に制御可能です。
特権チェック前に発生する点が致命的#
オーバーフローは kern_setcred_copyin_supp_groups() 内で発生します。
これは 特権チェック(priv_check_cred(PRIV_CRED_SETCRED))よりも前 に実行されます。
そのため、いかなる非特権ローカルユーザーでもオーバーフローをトリガー可能です。
影響範囲:あなたのシステムは対象か?#
影響あり(未パッチ版)#
| バージョン | 状況 |
|---|---|
| FreeBSD 14.3-RELEASE(p14未満) | LPE可能(SMAP/SMEP有効でも) |
| FreeBSD 14.4-RELEASE(p5未満) | LPE可能(SMAP/SMEP有効でも) |
| FreeBSD 15.0-RELEASE(p9未満) | カーネルパニックのみ(LPEは確認されず) |
影響なし#
- FreeBSD main: 2025年11月24日のコミット
4cd93dfで修正済み - FreeBSD 13.x以前:
setcred(2)自体が存在しないため対象外
攻撃の影響:2つのLPEシナリオ#
シナリオ①:SMAP/SMEP有効環境でのroot奪取#
最も深刻なケースです。
- SMAP・SMEPというモダンなカーネル保護機能が有効な環境でも動作
- カーネルの情報リーク(info-leak)プリミティブが不要
zfs.koがロードされていれば攻撃が成立- ※FreeBSDのZFSプールを持つすべての環境で該当
- 単一の
setcred(2)システムコールでroot権限を取得
シナリオ②:SMAP/SMEP無効環境でのroot奪取#
- 保護機能がないレガシーカーネルでも同様に動作
amd64_syscall+0x155チェーンプリミティブを2つのシナリオで共有
FreeBSD 15.0については、同じsizeof型エラーが存在するものの、周辺コードの違いにより 既知のチェーンプリミティブではLPEに至らず、カーネルパニックにとどまると報告されています。
対処法:すぐに実施すべきアップデート#
2026年5月20日にすべてのサポート対象ブランチへパッチが発行されています。
以下の修正済みバージョンへの更新を直ちに実施してください。
| 対象バージョン | 修正済みバージョン |
|---|---|
| FreeBSD 14.3-RELEASE | 14.3-RELEASE-p14 |
| FreeBSD 14.4-RELEASE | 14.4-RELEASE-p5 |
| FreeBSD 15.0-RELEASE | 15.0-RELEASE-p9 |
| FreeBSD stable/14 | ツリー内修正済み(2026-05-20) |
| FreeBSD stable/15 | ツリー内修正済み(2026-01-06) |
よくある質問(FAQ)#
Q. FreeBSD 13.xを使っています。影響を受けますか?
A. いいえ。setcred(2) システムコール自体がFreeBSD 13.x以前には存在しないため、影響はありません。
Q. ZFSを使っていない場合でも危険ですか?
A. ZFS未使用環境(zfs.ko 非ロード)では、SMAP/SMEP有効時のLPE攻撃チェーンが成立しない可能性があります。ただし、ZFSを使用していない環境でのSMAP/SMEP無効時の影響については、詳細は元記事を参照してください。いずれにせよ、パッチ適用を強く推奨します。
Q. PoC(概念実証コード)は公開されていますか?
A. はい。GitHubにProof of Conceptが公開されています。詳細は元記事を参照してください。
Q. FreeBSD 15.0は安全ですか?
A. パッチ適用前の15.0では、LPEは確認されていませんが、非特権ユーザーによるカーネルパニックのトリガーが可能な状態でした。15.0-RELEASE-p9以上へのアップデートが必要です。
まとめ:押さえておくべき重要ポイント#
- 原因:
sizeof(*groups)が4バイトではなく8バイトに評価されるタイポ1つ - 影響: 非特権ユーザーによるカーネルスタックバッファオーバーフロー → root権限奪取
- 特に深刻: SMAP/SMEP有効・ZFSプール使用環境でもLPE成立(14.3/14.4)
- 対処法: 各バージョンの修正済みパッチレベルへ即時アップデート
- CVE番号: CVE-2026-45250 / FreeBSD-SA-26:18.setcred
たった1文字のsizeof型エラーが、カーネル全体の制御を失わせる――セキュリティにおいて「些細なミス」は存在しないことを改めて示す事例です。
FreeBSDシステムの管理者は、直ちにパッチバージョンへのアップデートを実施してください。





