
🚨 エクスプロイト PoC — セキュリティ研究、脆弱性分析、および防御目的のみ
🚨 エクスプロイト PoC — セキュリティ研究、脆弱性分析、および防御目的のみ
CVE-2025-60709 は、Windows の CLFS.sys(Common Log File System)ドライバーにおける**ローカル権限昇格(LPE)**の脆弱性です。ローカルでコード実行が可能な攻撃者が、CLFS コンテナのパース処理におけるバッファオーバーフローを利用して、標準ユーザーから NT AUTHORITY\SYSTEM へ権限を昇格させ、カーネルメモリへの任意書き込みプリミティブを取得できます。
このリポジトリには2つの実装が含まれています:
| 項目 | 詳細 |
|---|---|
| CVE ID | CVE-2025-60709 |
| タイプ | ローカル権限昇格(LPE) |
| コンポーネント | CLFS.sys(Common Log File System ドライバー) |
| 対象システム | Windows 11 24H2(ビルド 26100.3485+) |
| アーキテクチャ | x64 のみ |
| 攻撃ベクター | CLFS コンテナのパース処理におけるバッファオーバーフロー |
| 影響 | NT AUTHORITY\SYSTEM への権限昇格 |
| 前提条件 | ローカルでのコード実行(標準ユーザー) |
CVE-2025-60709/
├── CVE-2025-60709.c (5.3 KB, 157 líneas) — Exploit C original
├── CVE-2025-60709.go (9.2 KB, 285 líneas) — Port Go (demo educativa)
└── README.txt (4.2 KB, 132 líneas) — Documentación original
┌─────────────────────────────────────────────────────────────┐
│ CVE-2025-60709 LPE │
└─────────────────────────────────────────────────────────────┘
[1] EVASIÓN DE DEFENSAS
├─ KillETW() → Parchea EtwEventWrite en ntdll con RET (0xC3)
└─ KillAMSI() → Parchea AmsiScanBuffer en amsi.dll con RET (0xC3)
[2] HEAP GROOMING (preparación de memoria)
└─ GroomLookaside()
├─ Crea 4096 archivos: C:\Windows\Temp\groom_00000.blf
├─ Llama CreateLogFile() + AddLogContainer() por cada uno
└─ Agota lookaside lists → garantiza layout de heap predecible
[3] PRIMITIVA DE ESCRITURA ARBITRARIA — ClfsArbWrite(Address, Value)
├─ Construye buffer CLFS malformado (0x102010 bytes)
│ ├─ Firma válida CLFS en +0x00: 0x0201
│ ├─ Sector size shift en +0x14: 2
│ ├─ First client region en +0x28: 0x100
│ ├─ cbRecord OVERSIZED en +0x100: 0xFF00 (64 KB > datos reales)
│ ├─ Marcador shadow zone en +0x9A8: 0x13371337
│ └─ CClfsContainerContext falso en offset (0xFF00 + 0x100):
│ ├─ pContainer = TargetAddress - 0x10
│ └─ cbContainer = Value (dato a escribir)
├─ Calcula checksum CLFS correcto (driver lo valida)
├─ Escribe contenedor malformado → C:\Windows\Temp\evil.blf
├─ Crea log apuntando a evil.blf
├─ Llama ClfsReadRestartArea() → dispara parsing kernel
└─ Driver desborda buffer → escribe Value en Address ✓
[4] ROBO DE TOKEN SYSTEM
├─ Lee EPROCESS del proceso SYSTEM via PsInitialSystemProcess
└─ Extrae token en EPROCESS + EPROCESS_TOKEN (offset 0x4c0)
[5] ESCALACIÓN DE PRIVILEGIOS
└─ ClfsArbWrite(CurrentEprocess + 0x4c0, SystemToken)
└─ Sobreescribe token del proceso actual con token SYSTEM ✓
[6] EJECUCIÓN DE PAYLOAD C2
├─ VirtualAlloc(PAGE_EXECUTE_READWRITE)
├─ Copia shellcode beacon de 1789 bytes
├─ CreateThread() → ejecución como NT AUTHORITY\SYSTEM
└─ Beacon C2: IPv6 + DoH → fallback Gmail drafts
└─ sRDI + sleep obfuscation + ETW/AMSI ya parcheados
[7] PERSISTENCIA
└─ Sleep(INFINITE) → proceso mantiene token SYSTEM
| 項目 | オフセット | 説明 |
|---|---|---|
EPROCESS_TOKEN | 0x4C0 | プロセスのセキュリティトークン |
EPROCESS_PID | 0x440 | プロセス ID(PID) |
EPROCESS_LINKS | 0x448 | アクティブなプロセスのリンクリスト |
EPROCESS_NAME | 0x5A8 | プロセス名(ImageFileName) |
⚠️ これらのオフセットは Windows ビルドによって異なります。 他のバージョンでは更新が必要です。
Contenedor CLFS legítimo:
[Header 0x100 bytes][Record: cbRecord bytes de datos reales]
Contenedor malformado (evil.blf):
[Header válido][cbRecord=0xFF00 → kernel lee 65,280 bytes]
↓
Kernel overflow → llega a CClfsContainerContext falso
↓
pContainer = TargetKernelAddress - 0x10
cbContainer = ValueToWrite
↓
Driver usa estructura falsa → escribe ValueToWrite en TargetKernelAddress
CVE-2025-60709.c| 関数 | 目的 |
|---|---|
GetKernelBase() | ZwQuerySystemInformation(SystemModuleInformation) → ntoskrnl.exe のベースアドレス |
KillETW() | VirtualProtect + ntdll.dll の EtwEventWrite を 0xC3(RET)で上書き |
KillAMSI() | amsi.dll をロード + AmsiScanBuffer を 0xC3(RET)で上書き |
GroomLookaside() | 4096 個の CLFS ログを作成して lookaside リストを使い果たす → ヒープを決定的にする |
ClfsArbWrite() | エクスプロイトの核 — カーネルへの任意書き込みプリミティブ |
main() | 攻撃を統括:ETW→AMSI→グルーミング→トークン窃取→任意書き込み→ビーコン |
| 項目 | C 版 | Go 版 |
|---|---|---|
| 種別 | 機能するエクスプロイト(ドキュメントによる) | 教育用デモのみ |
| API | 直接アクセス(ntdll、clfsw32、advapi32) | syscall.NewLazyDLL() ラッパー |
| CLFS チェックサム | 完全なアルゴリズム | 簡略化されたプレースホルダー |
| カーネルアドレス | 実アドレス | ハードコードされたプレースホルダー(0x123456) |
| C2 ペイロード | 1789 バイトのシェルコード | テスト用 NOP バイト(0x90) |
| 期待される結果 | SYSTEM への権限昇格 | "Arb write failed (yeah)" というメッセージ |
C 版(Visual Studio Build Tools + Windows SDK が必要):
cl /O1 /MT /link ntdll.lib advapi32.lib clfsw32.lib CVE-2025-60709.c
Go 版(Windows x64 で Go 1.19+ が必要):
go build -ldflags="-s -w" -o CVE-2025-60709.exe CVE-2025-60709.go
| 緩和策 | 有効性 |
|---|---|
| HVCI(Hypervisor-protected Code Integrity) | 高 — カーネルメモリへの書き込みを防止 |
| kCFI(Kernel Control Flow Integrity) | 高 — ROP/JOP チェーンを困難にする |
| CFG(Control Flow Guard) | 中 — シェルコードの実行を困難にする |
| Windows Defender | 中 — 既知のテクニックを検出 |
| Windows Update | 高 — 公式パッチが脆弱性を排除 |
rule CVE_2025_60709_CLFS_LPE {
meta:
description = "Detects CVE-2025-60709 CLFS LPE exploit"
author = "KONDORDEVSECURITYCORP"
date = "2026-03"
cve = "CVE-2025-60709"
severity = "critical"
strings:
$clfs_sig = { 01 02 00 00 }
$magic = { 37 13 37 13 }
$evil_file = "evil.blf" ascii wide
$groom_file = "groom_" ascii wide
$etw_func = "EtwEventWrite" ascii wide
$amsi_func = "AmsiScanBuffer" ascii wide
$token_off = { C0 04 00 00 } // EPROCESS_TOKEN = 0x4C0
condition:
3 of them
}
| 種別 | 値 |
|---|---|
| 不正なファイル | C:\Windows\Temp\evil.blf |
| 不正なログ | \\.\C:\Windows\Temp\evil_log |
| グルーミングファイル | C:\Windows\Temp\groom_00000.blf … groom_04095.blf |
| プロセス | 異常な高優先度(REALTIME_PRIORITY_CLASS) |