
システムがcve-2026-23111に対して脆弱かどうかを確認するスクリプト
CVE-2026-23111 は、ユーザ名前空間と nftables が利用可能なシステムにおいて、特権のないユーザがローカル権限昇格に悪用できる Linux カーネルの nf_tables の脆弱性です。[1][2] 公開されたベンダーおよび政府の勧告は、これを Linux ディストリビューションに影響を与えるローカルの問題として説明し、パッチ適用を主な修正手段としています。[3][4]
このリポジトリには、防御的検証スクリプトが含まれています。これは、権限昇格のエクスプロイトを提供せずに、ホストがこの CVE に関連する技術的条件を露出しているかどうかを評価するのに役立ちます。これは、関連するカーネルおよび実行時条件をチェックし、必要に応じて nf_tables モジュールをロードして完全な機能テストを実行し、unshare と nft を使用した制御された非特権検証パスを試行し、ローカルの診断トレースを収集し、ホストを「安全と思われる」「ローカルポリシーでブロック」「露出パスあり」などの運用上の判定に分類します。[1][5]
NVD によると、CVE-2026-23111 は Linux カーネルの nf_tables の脆弱性であり、netfilter におけるロジックバグ修正として解決され、影響を受ける構成では、特権のないユーザがユーザ名前空間と nftables を通じてローカル権限昇格を悪用できます。[1] Ubuntu のセキュリティ通知は、同じ高レベルの悪用パスを説明し、リリースごとの影響を受けるパッケージおよび修正済みパッケージの状態を追跡しています。[2]
Red Hat は、ローカルの低権限ユーザがこの問題を悪用してサービス拒否を引き起こしたり、権限昇格を達成する可能性があると述べており、運用上許容される場合に nf_tables モジュールのロードを防ぐことに基づく緩和策を文書化しています。[3] カナダサイバーセキュリティセンターからの国家レベルのガイダンスも、影響を受ける組織にベンダーの更新を指摘し、モジュールブロックの緩和策を使用する場合の initramfs の再生成に言及しています。[4]
このスクリプトは、防御的な露出評価のためのものであり、悪用のためのものではありません。次のように設計されています。
CONFIG_USER_NS と CONFIG_NF_TABLES が存在するかどうかを確認する。[1]kernel.unprivileged_userns_clone と user.max_user_namespaces を検査して、特権のないユーザ名前空間が利用可能かどうかを推定する。nf_tables モジュールに対して、ハードな modprobe 拒否 (install nf_tables /bin/false) または弱いブラックリストが設定されているかを検出する。/proc/kallsyms から脆弱なシンボル (nft_map_catchall_activate) と修正後のシンボル (nft_catchall_set_activate) を指紋採取する。--allow-load-module が指定された場合、オプションで modprobe 経由で nf_tables をロードし(下記参照)、終了時に自動的にアンロードする。スクリプトはスクリプトディレクトリの子ディレクトリにログを保存し、--keep-logs が使用されない限りデフォルトで削除します。
デフォルトでは、スクリプトは 決して nf_tables をロードしません。スクリプトの開始時にモジュールがまだロードされていない場合、すべての機能的な nft テストはスキップされ、判定はカーネルバージョン、kallsyms の指紋、modprobe 設定、RPM 変更ログ、sysctl/LSM ポリシーの証拠のみから導き出されます。
この控えめなデフォルトは、本番ホストで攻撃面を意図せず拡大することを回避します。制御されたまたは計装されたシステムで完全な機能テストを有効にするには、root として --allow-load-module を使用します(下記参照)。
# デフォルト — モジュールロードなし、ポリシー証拠のみの判定
./check_cve_2026_23111.sh
./check_cve_2026_23111.sh --color
./check_cve_2026_23111.sh --keep-logs
./check_cve_2026_23111.sh --color --keep-logs
# 完全な機能テスト — nf_tables のロード(およびアンロード)、root が必要
sudo ./check_cve_2026_23111.sh --allow-load-module
sudo ./check_cve_2026_23111.sh --allow-load-module --color --keep-logs
--allow-load-module を使用するタイミング--allow-load-module は、隔離された非本番環境、または専用のテスト VM で最も確度の高い判定が必要な場合に使用します。典型的なシナリオ:
nf_tables が意図的にブロックされている本番ホスト、またはロードすると強化ポリシーに違反するホストでは、--allow-load-module を使用しないでください。
--allow-load-module の安全ゲートモジュールをロードしようとする前に、スクリプトは以下のチェックを実行し、いずれかが失敗するとエラーで終了します。
/etc/modprobe.d/ にハードな modprobe 拒否 (install nf_tables /bin/false) が存在しないこと。modprobe が利用可能であること。root (uid 0) として実行されていること。スクリプトによってモジュールが正常にロードされると、cleanup() トラップを介して終了時に modprobe -r nf_tables が呼び出されます(成功、エラー、CTRL+C のいずれの終了でも)。
スクリプトは、エクスプロイトの結果ではなく、運用上の判定を使用します。
これらの判定は、パッチの優先順位付けと防御的なトリアージを支援することを目的としており、ベンダーのパッケージステータス検証を置き換えるものではありません。
スクリプトは、実行中のカーネルを文書化されたアップストリームの修正ポイントにマッピングします。
主な推奨アクションは、ベンダー修正済みのカーネルアップデートをインストールし、修正されたカーネルで再起動することです。[2][3][4] 悪用はローカルカーネルの攻撃面に依存するため、パッチのスケジューリングまたは検証中に追加の強化により露出を減らすことができます。[5][6]
nf_tables のロードを無効化またはブロックする システムが nftables 機能を必要とせず、運用影響が検証されている場合。[3][4]CAP_NET_ADMIN を含むアクセスパスなど、ファイアウォール状態を操作できるアカウント数を減らす。[5]特権のないユーザ名前空間を制限:
echo 'kernel.unprivileged_userns_clone=0' > /etc/sysctl.d/99-cve-2026-23111.conf
echo 'user.max_user_namespaces=0' >> /etc/sysctl.d/99-cve-2026-23111.conf
sysctl --load /etc/sysctl.d/99-cve-2026-23111.conf
運用上安全な場合に nf_tables モジュールのロードをブロック:
echo 'install nf_tables /bin/false' > /etc/modprobe.d/disable-nf_tables.conf
rmmod nf_tables 2>/dev/null || true
モジュールロードの緩和策を使用する場合、一部のガイダンスでは、ブロックされたモジュールが早期ブート中にロードされないように initramfs を再生成することを推奨しています。[4]
Ubuntu は、特権のないユーザ名前空間に対する AppArmor ベースの制限を、カーネル修正の完全な代替ではなく、攻撃面を減らす方法として文書化しています。[6] ランタイムテストでは、攻撃パスがローカルでブロックされているため、ホストの露出が少なく見える場合がありますが、長期的な修復には依然としてベンダー修正済みのカーネルパッケージのインストールが必要です。[2][6] スクリプトは、実際の unshare --user 呼び出しを試行し、ユーザ+ネット名前空間内で CAP_NET_ADMIN が機能しているかどうかを確認することで、AppArmor 制限の有効性を検証します。
Red Hat は、環境に適切な場合、CVE-2026-23111 の緩和策として nf_tables モジュールのロードを防ぐことを明示的に挙げています。[3] スクリプトは、check_modprobe_deny() を使用してこの設定を検出し、ハードな拒否 (install nf_tables /bin/false、オンデマンドロードをブロック) と弱いブラックリスト (ブロックしない) を区別します。RHEL 系システムでは、スクリプトは実行中のカーネルの RPM 変更ログで CVE-2026-23111 のバックポートエントリも検査し、アップストリームバージョン番号に依存しないベンダー確認済みの判定を可能にします。
この README と付属のスクリプトは、防御的な検証、棚卸し、および緩和計画を目的としています。これらは、ベンダーのガイダンス、パッケージレベルの検証、または標準的なパッチ管理プロセスに代わるものではなく、リンクされた勧告に記載されている公式修正を適用するための代替として使用すべきではありません。[2][3][4]
管理された環境でサイバーセキュリティの概念を学習、テスト、研究するためのリポジトリ。
このリポジトリは教育目的および許可されたセキュリティ研究のみを目的としています。
ユーザーが以下について学習できるように設計されています。
このリポジトリは、許可を得ている環境でのみ使用してください。例えば:
許可されていない、または違法な使用は固く禁止されています。
著者および貢献者は、このプロジェクトによって引き起こされたいかなる損害、誤用、法的問題、または損失についても責任を負いません。
このリポジトリを使用することで、以下に同意したものとみなされます。
このプロジェクトは以下を意図しています。
責任ある開示の慣行に従い、すべての該当する法律を遵守してください。
責任ある開示やコラボレーションについては、GitHub 経由でリポジトリメンテナーにお問い合わせください。
unshare -U -n --map-root-usernftunshare --user が実際に名前空間を作成し、内部で CAP_NET_ADMIN が機能していることを確認し、AppArmor または SELinux の制限が実際に効果的かどうかを確認する。| オプション | 説明 |
|---|
--allow-load-module | モジュールがまだロードされていない場合、modprobe 経由で nf_tables をロードすることをスクリプトに許可します。完全な nft catchall パスエクササイザーと CAP_NET_ADMIN 有効性テストを有効にします。モジュールは終了時に自動的にアンロードされます。root が必要です。 ハードな modprobe 拒否が既に設定されている場合は拒否されます。非本番環境または計装されたシステムでのみ使用してください。 |
--color | 端末がサポートしている場合、色付きの stdout 出力を有効にします。 |
--keep-logs | 終了時にログとトレースを削除せず、スクリプトディレクトリに保持します。 |
--help | 使用法情報を表示して終了します。 |
| 判定 | 意味 |
|---|
not-affected | カーネルバージョンが 5.13 未満。catchall 要素機能はまだ導入されておらず、脆弱なコードパスは存在しません。 |
likely-patched-vendor-confirmed | ベンダーカーネルの RPM 変更ログで CVE-2026-23111 が見つかり、アップストリームバージョンに関係なくバックポート修正が確認されました。 |
likely-patched-upstream-confirmed | カーネルバージョンが修正済みのアップストリーム範囲内かつ機能的な nft テストがゼロ以外の終了コードを返し、カーネルシグナルがない — 安全な状態に対する最も強力な静的 + 動的証拠。 |
likely-patched-upstream | カーネルバージョンが修正済みのアップストリーム範囲内であるが、機能テストは実行されなかった(モジュール不在、または決定的でない)。ベンダーの勧告ステータスは依然として確認すべき。 |
likely-safe-or-patched | スクリプトによって悪用可能なパスは確認されなかった。原因は、修正済みカーネル、脆弱なコードの不在、または暗黙のローカルブロックの間で曖昧。 |
blocked-by-local-policy | テストパスが AppArmor、SELinux、ユーザ名前空間の制限、または modprobe 拒否によってブロックされているように見える。[6] ポリシーブロックはベンダーの修正の代わりにはならない。 |
exposed-path-available | ホストが、文書化された悪用前提条件と互換性のある userns + nftables パスを公開している。[1][5] |
strong-signal-lab-confirmation | nf_tables 関連のメモリ破壊と一致するカーネルログシグナルが観測された。使い捨ての計装されたラボでのみ確認すること。 |
prerequisites-missing | 必要な診断ツール (unshare、nft) が不足している。意味のある実行時検証は完了しなかった。 |
| ブランチ | 修正バージョン | アップストリームコミット |
|---|
| 6.13.x+ | ≥ 6.13.1 | f41c5d1 |
| 6.12.x | ≥ 6.12.12 | 8c760ba |
| 6.6.x | ≥ 6.6.75 | b9b6573 |
| 6.1.x | ≥ 6.1.128 | 8b68a45 |
| 6.2–6.5, 6.7–6.11 | アップストリーム EOL | ディストリビューションのバックポートのみ |
| 5.15.x | ディストリビューション依存 | Amazon Linux: ALAS2KERNEL-5.15-2026-098 |
| 5.10.x | ディストリビューション依存 | Amazon Linux 2: 2026年3月時点で保留中 |
| 5.4.x | ディストリビューション依存 | Amazon Linux 2: 2026年3月時点で保留中 |
| 5.13–5.14 | アップストリーム EOL | ディストリビューションのバックポートのみ |
| < 5.13 | 影響なし | catchall 機能は存在しない |