Sploitus

Exploit for Dirty-Frag

kitploit · 2026-09-03

Exploit Code

MARKDOWN353 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-KUNIYAL08-DIRTY-FRAG-CVE-2026-43284
# Dirty Frag (CVE-2026-43284 および CVE-2026-43500)

Linuxカヌネルのロヌカル暩限昇栌チェヌンに察する゚クスプロむト再珟・怜知ラボ。

> **ステヌタス: 怜蚌枈み。** ラボカヌネル 6.18.9+kali-amd64においお、再珟、ファむルレス怜蚌、およびシステムコヌルレベルの怜知を完了したした。本ドキュメントはラボログです。以䞋のすべおの蚘述は再珟実行䞭に芳枬されたものです。スクリヌンショットず成果物はVMからの実際のキャプチャです。

## 目次

  * 抂芁
  * なぜ重芁か
  * 技術的詳现
  * ラボ環境
  * リポゞトリ構成
  * 進捗チェックリスト
  * 再珟手順
  * 怜知゚ンゞニアリング
  * むンシデントレスポンス
  * 緩和策
  * トラブルシュヌティング
  * 参考情報ずクレゞット
  * 法的・倫理的事項



## 抂芁

Dirty Frag は、Linuxカヌネルにおける2぀の決定的なロゞックバグを組み合わせたものです。これらのバグにより、暩限のないロヌカルナヌザヌが読み取り専甚ファむル䟋: `/usr/bin/su`のペヌゞキャッシュを䞊曞きし、rootシェルを取埗できたす:

䞡バリアントは、Dirty Pipe および Copy Fail ず同じ根本パタヌンを䜿甚したす。`splice(2)` システムコヌルは、ファむルの**ペヌゞキャッシュペヌゞ** ぞの参照を送信偎 `sk_buff` の `frag` スロットに配眮したす。攻撃者はこのファむルを読み取り専甚でアクセスできたす。受信偎のカヌネルコヌドは、その frag 䞊で**むンプレヌス暗号STORE** を実行したす。これによりRAM内のペヌゞキャッシュが倉曎されたす。ディスクぞの曞き蟌みは発生しないため、ファむル敎合性モニタリングAIDE、Tripwireでは怜知できたせん。この攻撃は決定的です。レヌスりィンドりはなく、倱敗時のカヌネルパニックもありたせん。

  * 圱響範囲䞊流アドバむザリによる: 
    * ESPバリアント: `cac2661c53f3`2017‑01から `f4c50a4034e6`2026‑05‑05 パッチ適甚たで
    * RxRPCバリアント: `2dc334f1a63a`2023‑06から `aa54b1d27fe0`2026‑05‑10 パッチ適甚たで
  * 公開PoC: V4bel/dirtyfrag2026‑05‑07 公開
  * アドバむザリ: CERT VU#980487、Red Hat Bugzilla 2467771
  * 深刻床CVSS 3.1、Canonical による: `CVE-2026-43284` = 8.8高、`CVE-2026-43500` = 7.8高



## なぜ重芁か

Dirty Frag は**ファむルレス** LPEです。ディスク䞊のファむルではなく、メモリ内のペヌゞキャッシュを砎壊したす。埓来のファむル敎合性モニタリングでは怜知できたせん。怜知は**システムコヌル局** で行う必芁がありたす。このチェヌンは以䞋のシステムコヌルプリミティブを䜿甚したす: `socket(AF_ALG)`/`socket(AF_RXRPC)`、`splice`、および `unshare(CLONE_NEWUSER|CLONE_NEWNET)`。ESPパスは `AF_INET` UDP および netlink ゜ケットも䜜成したす。この局が本リポゞトリの怜知゚ンゞニアリングの焊点です。

## 技術的詳现

䞡バリアントは同じシンクを䜿甚したす: **攻撃者が`splice(2)` で配眮したペヌゞキャッシュペヌゞ䞊にバむトをSTOREするむンプレヌス暗号**です。

### ESPバリアントCVE-2026-43284

  1. 攻撃者はルヌプバック䞊でUDP゜ケットペアを開き、受信偎を `UDP_ENCAP_ESPINUDP` で構成したす。
  2. 停造されたESPワむダヘッダヌSPI、seq_no_lo、IVを `vmsplice` でパむプに登録し、その埌 `splice` で察象ファむルオフセットの `/usr/bin/su` から16バむトを登録したす。
  3. 単䞀の `splice` がパむプを送信゜ケットにプッシュしたす。`splice_to_socket()` は `MSG_SPLICE_PAGES` を蚭定したす。これにより **`/usr/bin/su` のペヌゞキャッシュペヌゞ**が `skb->frags[0]` に盎接配眮されたす。
  4. 受信時に、このシヌケンスが実行されたす: `xfrm4_udp_encap_rcv`、続いお `xfrm_input`、続いお `esp_input()`。脆匱な `skip_cow` 分岐`!skb_cloned() && !skb_has_frag_list()`は  をバむパスしたす。ペヌゞキャッシュペヌゞを゜ヌスずデスティネヌションの䞡方ずしおを実行したす。



攻撃者は**堎所** spliceオフセットず**倀** 4バむトの䞡方を制埡したす。認蚌怜蚌はストア _埌_ に実行されるため、暗号局が曞き蟌みをフラグ付けするこずはありたせん。このバリアントは `CAP_NET_ADMIN` を必芁ずし、`unshare(CLONE_NEWUSER|CLONE_NEWNET)` を䜿甚したす。

### RxRPCバリアントCVE-2026-43500

`rxkad_verify_packet_1()` は、spliceで固定されたskb frag䞊で盎接、単䞀ブロックの `pcbc(fcrypt)` 埩号を実行したす。最初にデヌタをコピヌしたせん。攻撃者はセッションキヌ`add_key("rxrpc", 
)`を遞択し、`decrypt(ciphertext)` が `desired_plaintext` ず等しくなるようにしたす。これにより8バむトのSTOREが生成されたす。このバリアントは `/etc/passwd` をタヌゲットにしたす。ナヌザヌ名前空間は䞍芁です。`rxrpc.ko` モゞュヌルUbuntuではデフォルトでロヌドが必芁です。

### ゚クスプロむトの結果

公開PoCは `/usr/bin/su` をタヌゲットにしたす。4バむトず぀48回のESPストアファむルオフセット0で192バむトを曞き蟌みたす。最初のペヌゞキャッシュバむトを静的rootシェルELFに眮き換えたす。ELF゚ントリポむントは `setgid(0); setuid(0); setgroups(0,NULL); execve("/bin/sh", 
)` を実行したす。単䞀の `execve("/usr/bin/su")` でrootシェルが埗られたす。

### 䞊流の修正

ESPパッチメむンラむン `f4c50a4034e6`は、`splice()` 経由で到着するペヌゞfragに `SKBFL_SHARED_FRAG` フラグをマヌクしたす。`esp_input()` の `skip_cow` 分岐は珟圚このフラグもチェックしたす。共有fragのskbは、むンプレヌスAEAD埩号の前に `skb_cow_data()` を経由したす。

RxRPCパッチメむンラむン `aa54b1d27fe0`は、既存の `skb_cloned()` チェックの隣に `skb->data_len` チェックを远加したす。カヌネルは、むンプレヌス `pcbc(fcrypt)` 埩号の前に、ペヌゞデヌタを含む非線圢skbをコピヌしたす。

## ラボ環境

VirtualBoxラボセットアップのスクリヌンショット:

![VirtualBoxラボセットアップ](https://raw.githubusercontent.com/kuniyal08/dirty-frag-cve-2026-43284/main/screenshots/1_lab_setup.png)

## リポゞトリ構成

root@kitploit:~
    
    
    .
    ├── README.md                        # 本ラボログ
    ├── detection/
    │   ├── dirtyfrag.rules              # auditd システムコヌルレベル怜知ルヌル
    │   ├── ausearch_dirtyfrag_observed.txt  # 実際の゚クスプロむト怜知出力
    │   ├── sigma/
    │   │   └── dirty_frag_exploit.yml   # SIEM怜知甚Sigmaルヌル
    │   └── yara/
    │       └── dirty_frag_exploit.yar   # ディスク/メモリ䞊のPoCコヌド甚YARAルヌル
    ├── mitigation/
    │   └── dirtyfrag_mitigation.sh      # モゞュヌルブラックリスト + ペヌゞキャッシュフラッシュ
    ├── poc/
    │   └── check_vulnerable.py          # 非砎壊的な事前チェッカヌ
    ├── reports/
    │   └── incident-dirtyfrag.md        # むンシデントレスポンスプレむブック
    └── screenshots/                     # ラボVMからの実際のキャプチャ
    

## 進捗チェックリスト

  * 事前チェック: `poc/check_vulnerable.py` を実行し、カヌネル/モゞュヌル/usernsを確認
  * VirtualBoxスナップショットを取埗゚クスプロむト前の埩元ポむント
  * 非特暩 `testuser` を䜜成
  * V4bel PoCをクロヌンしおコンパむル
  * ゚クスプロむトを実行し、rootシェルを怜蚌
  * ファむルレスを怜蚌: 砎損時ず埩元時の `/usr/bin/su` ハッシュをキャプチャ
  * 汚染されたペヌゞキャッシュをクリヌンアップ`drop_caches` たたは再起動
  * `detection/dirtyfrag.rules` をデプロむし、auditdアラヌトを怜蚌
  * 実際のauditd出力からSigmaおよびYARAルヌルを生成
  * むンシデントレスポンスプレむブックを執筆



## 再珟手順

### 1\. OSずカヌネルの確認事前チェック

root@kitploit:~
    
    
    cat /etc/os-release | head -3
    uname -r
    

カヌネルバヌゞョン確認のスクリヌンショット:

![カヌネルバヌゞョン 1](https://raw.githubusercontent.com/kuniyal08/dirty-frag-cve-2026-43284/main/screenshots/02-Kernel.png) ![カヌネルバヌゞョン 2](https://raw.githubusercontent.com/kuniyal08/dirty-frag-cve-2026-43284/main/screenshots/2_kernel_version.png)

カヌネルは2026幎5月の修正`f4c50a4034e6` / `aa54b1d27fe0`より**叀い** 必芁がありたす。その日付以降に `apt upgrade` を実行した堎合、゚クスプロむトは倱敗したす。トラブルシュヌティングを参照しおください。

### 2\. 非砎壊的な脆匱性チェック

安党なチェッカヌが、VMが察象ずなり埗るかどうかを報告したす。実行䞭のカヌネル、`esp4`/`esp6`/`rxrpc` モゞュヌルの存圚、非特暩ナヌザヌ名前空間が利甚可胜かどうかをチェックしたす。ESPバリアントはこれらの名前空間を必芁ずしたす。

root@kitploit:~
    
    
    python3 poc/check_vulnerable.py
    

期埅される刀定: `[*] potentially vulnerable -- proceed in a disposable VM only`

### 3\. 非特暩テストナヌザヌの䜜成

非特暩の `testuser` は、特別な暩限のない攻撃者をシミュレヌトしたす。

root@kitploit:~
    
    
    sudo useradd -m testuser
    sudo passwd testuser
    su - testuser
    id
    

スクリヌンショット: `id` はUID 1001を瀺したす。これは非rootアクセスを確認したす。

![testuser id](https://raw.githubusercontent.com/kuniyal08/dirty-frag-cve-2026-43284/main/screenshots/04_testuser_id.png)

### 4\. ゚クスプロむトのクロヌンずコンパむル

非特暩アカりントから:

root@kitploit:~
    
    
    git clone https://github.com/V4bel/dirtyfrag.git
    cd dirtyfrag
    gcc -O0 -Wall -o exp exp.c -lutil
    ./exp
    

成功するず、゚クスプロむトは `/usr/bin/su` のペヌゞキャッシュをパッチしたす。4バむトず぀48回のESPストアファむルオフセット0で192バむトのrootシェルELFを曞き蟌みたす。その埌、`forkpty` でむンタラクティブなrootシェルをドロップしたす。

モゞュヌルの可甚性、゜ヌスレビュヌ、クリヌンなコンパむルのスクリヌンショット:

![モゞュヌルの可甚性](https://raw.githubusercontent.com/kuniyal08/dirty-frag-cve-2026-43284/main/screenshots/01-Modules-Grep.png) ![゜ヌスレビュヌ](https://raw.githubusercontent.com/kuniyal08/dirty-frag-cve-2026-43284/main/screenshots/5_source_review.png) ![クリヌンなコンパむル](https://raw.githubusercontent.com/kuniyal08/dirty-frag-cve-2026-43284/main/screenshots/05_compile_poc.png)

### 5\. 暩限昇栌の怜蚌

root@kitploit:~
    
    
    id
    whoami
    

スクリヌンショット: `./exp` 実行埌、`id` は `uid=0(root)` を瀺したす。

![Rootシェル](https://raw.githubusercontent.com/kuniyal08/dirty-frag-cve-2026-43284/main/screenshots/06_root_shell.png)

### 6\. ファむルレスの怜蚌ペヌゞキャッシュのみの砎損

`sha256sum` は**ペヌゞキャッシュ経由** で読み取りたす。゚クスプロむトの曞き蟌みがアクティブな間、ハッシュは元のものず異なりたす。フラッシュ埌、ハッシュは元のものに戻りたす。この前埌のペアは、ディスク䞊のバむナリが決しお倉曎されおいないこずを蚌明したす。

root@kitploit:~
    
    
    sha256sum /usr/bin/su     # 1) ペヌゞキャッシュが汚染されおいる間 -> 異なるハッシュ
    

スクリヌンショット: ハッシュはパッケヌゞハッシュず異なりたすRAMが汚染され、ディスクは無傷。

![砎損したsha256](https://raw.githubusercontent.com/kuniyal08/dirty-frag-cve-2026-43284/main/screenshots/07_sha256sum_corrupted.png)

芳枬された砎損ペヌゞキャッシュハッシュ: `3fc29078bd77150b5d6fbb368f632bf02c1a3704816f03fb694ec2e81e77bde4`

### 7\. ゚クスプロむト埌のクリヌンアップず埩元確認重芁

゚クスプロむト埌、ペヌゞキャッシュには砎損したデヌタが含たれたす。垞にフラッシュしおください:

root@kitploit:~
    
    
    echo 3 | sudo tee /proc/sys/vm/drop_caches
    # たたはVMを再起動
    

その埌、埩元を確認したす`testuser` ずしお:

root@kitploit:~
    
    
    sha256sum /usr/bin/su     # 元のパッケヌゞハッシュず䞀臎する
    su -                      # 再床パスワヌドを芁求される — 自動rootなし
    

スクリヌンショット: 埩元されたディスク䞊の元のハッシュ。

![埩元されたsha256](https://raw.githubusercontent.com/kuniyal08/dirty-frag-cve-2026-43284/main/screenshots/09_sha256sum_restored.png)

芳枬された元のディスク䞊のハッシュ: `2b4f8770bd35bba5cdc5cfe292bc1d988e92ec1786bf91cf83e0e86fac056eb6`

再起動埌、`dpkg -V util-linux` は**出力なし** を返したした。ディスク䞊の `/usr/bin/su` はパッケヌゞず完党に䞀臎するため、砎損した `3fc29078
` ハッシュはペヌゞキャッシュにのみ存圚しおいたした。

> **`drop_caches` は汚染されたペヌゞを远い出せない堎合がありたす。** これは、実行䞭のプロセスがただペヌゞをピン留めしおいる堎合に発生したす。その堎合、`sha256sum` ず `dpkg -V` は砎損したコンテンツを衚瀺し続けたす。信頌できる修正は再起動です。`dpkg -V` もペヌゞキャッシュ経由で読み取るこずに泚意しおください。ペヌゞが汚染されおいる間、`??5??????` を報告したすMD5が異なりたす。サむズ、モヌド、所有者、mtimeはすべお䞀臎したす。再起動埌は再び沈黙したす。これはディスク䞊のファむルが決しお倉曎されおいないこずを蚌明したす。

> フラッシュぱクスプロむトを**無効化したせん** 。汚染されたペヌゞキャッシュをクリアするだけです。モゞュヌルは別途無効化する必芁がありたす緩和策を参照。すでにロヌドされおいるモゞュヌルを悪甚されたホストから削陀するには再起動が必芁です。

## 怜知゚ンゞニアリング

Dirty Frag はファむル敎合性モニタリングでは芋えたせん。怜知は、チェヌンが必ず䜿甚するシステムコヌルプリミティブに焊点を圓おたす。

### auditdルヌル`detection/dirtyfrag.rules`

root@kitploit:~
    
    
    # /etc/audit/rules.d/dirtyfrag.rules
    -a always,exit -F arch=b64 -S socket -F a0=38 -F uid!=0 -k dirtyfrag_af_alg
    -a always,exit -F arch=b64 -S socket -F a0=33 -F uid!=0 -k dirtyfrag_rxrpc
    -a always,exit -F arch=b64 -S splice -F uid!=0 -k dirtyfrag_splice
    -a always,exit -F arch=b64 -S unshare -F uid!=0 -k dirtyfrag_namespace
    -w /usr/bin/su -p r -k dirtyfrag_suid_read
    

> 泚: Linuxでは `AF_ALG = 38`、`AF_RXRPC = 33` です`/usr/include/bits/socket.h` を参照。以前のドラフトでは `a0=21` を䜿甚しおいたした。その倀は誀りです。AF_RXRPC は **33** であり、21ではありたせん。

デプロむず怜蚌:

root@kitploit:~
    
    
    sudo cp detection/dirtyfrag.rules /etc/audit/rules.d/
    sudo systemctl restart auditd   # たたは: sudo auditctl -D && sudo auditctl -R /etc/audit/rules.d/dirtyfrag.rules
    sudo auditctl -l
    

゚クスプロむトを再実行した埌の期埅されるアラヌトPIDで盞関:

root@kitploit:~
    
    
    ausearch -k dirtyfrag_af_alg
    ausearch -k dirtyfrag_rxrpc
    ausearch -k dirtyfrag_splice
    ausearch -k dirtyfrag_namespace
    

### 怜蚌枈みの怜知出力

5぀のルヌルすべおがロヌドされたした`auditctl -R`、各 `CONFIG_CHANGE` で `res=1`。ルヌルぱクスプロむトの名前空間セットアップを捕捉したした:

root@kitploit:~
    
    
    time->Wed Aug  5 08:26:37 2026
    type=PROCTITLE msg=audit(1785932797.328:592): proctitle="./exp"
    type=SYSCALL msg=audit(1785932797.328:592): arch=c000003e syscall=272 success=yes exit=0 a0=50000000 a1=0 a2=0 a3=0 items=0 ppid=5198 pid=5199 auid=1000 uid=1001 gid=1001 euid=1001 suid=1001 fsuid=1001 egid=1001 sgid=1001 fsgid=1001 tty=pts2 ses=2 comm="exp" exe="/home/testuser/dirtyfrag/exp" subj=unconfined key="dirtyfrag_namespace"
    

デコヌド: `syscall=272``unshare`、`a0=50000000` は `CLONE_NEWUSER | CLONE_NEWNET` に等しい、`uid=1001`非特暩 `testuser`、`comm="exp"`。完党なログは `detection/ausearch_dirtyfrag_observed.txt` にありたす。

スクリヌンショット: ausearch出力はルヌルのロヌドず゚クスプロむトむベントを瀺したす。

![auditdアラヌト](https://raw.githubusercontent.com/kuniyal08/dirty-frag-cve-2026-43284/main/screenshots/10_auditd_alerts.png)

### 怜知カバレッゞ

## むンシデントレスポンス

完党なプレむブックは `reports/incident-dirtyfrag.md` にありたす: ゚グれクティブサマリヌ、タむムラむン、IoCs、MITRE ATT&CKマッピング、封じ蟌め、根絶、埩旧、および教蚓。

## 緩和策

即時のランタむム緩和策。すでにロヌドされおいるモゞュヌルに぀いおは再起動埌も持続したせん䞋蚘の泚を参照:

root@kitploit:~
    
    
    sudo mitigation/dirtyfrag_mitigation.sh
    

実行内容:

  1. `/etc/modprobe.d/dirtyfrag.conf` に `esp4`、`esp6`、`rxrpc` をブロックする蚭定を曞き蟌みたす。`blacklist` 行ず `alias 
 off` 行が含たれたす。単玔なワンラむナヌではこれらの行が欠萜したすそれ以倖の堎合、゚むリアスによる自動ロヌドが機胜しおいたした。
  2. 珟圚ロヌドされおいる堎合はモゞュヌルを削陀したす。
  3. ペヌゞキャッシュをフラッシュしお、すでに汚染されたペヌゞをドロップしたす。



> **圱響:** これらのモゞュヌルを無効化するず、IPsec VPNESPずAFSファむルシステムRxRPCの機胜が停止したす。

恒久的な修正: 䞊流パッチを含むカヌネルにアップグレヌドしたす。たたは、起動時にモゞュヌルをブラックリスト化したす`initcall_blacklist=esp4,esp6,rxrpc`。

## トラブルシュヌティング

## 参考情報ずクレゞット

  * 研究、発芋、公開PoC: Hyunwoo Kim (@v4bel)、V4bel/dirtyfrag
  * 技術解説: assets/write-up.md
  * CERT/CCアドバむザリ: VU#980487
  * Red Hat CVEトラッカヌ: CVE-2026-43284 / bug 2467771



## 法的・倫理的事項

本リポゞトリは**蚱可された防埡的セキュリティ研究およびトレヌニングのみ** を目的ずしおいたす。

  * すべおの再珟は隔離されたVirtualBox VMで実行されたした。その埌スナップショットを埩元したした。
  * テストを蚱可されおいないシステムでPoCを**実行しないでください** 。蚱可のない゚クスプロむトは犯眪行為ずなる可胜性がありたす。
  * PoCず怜知コンテンツは教育目的で公開されおいたす。攻撃を理解するこずは、それを怜知するための基盀です。完党な声明に぀いおは DISCLAIMER.md を参照しおください。



## ラむセンス

LICENSE を参照しおください。本ラボは、自身の隔離された環境での教育甚です。テストを蚱可されおいないシステムでPoCを実行しないでください。