Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Submit
ToolsExploitsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

··Feeds·Contact·Privacy·© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
CVE-2022-24481-analysis — Deep-dive analysis of Windows CLFS type confusion (CVE-2022-24481) with root-cause explanation, exploitation flow, kernel gadget details, and working local privilege escalation PoC. | Kitploit
Tools/GitHubGitHub/uname1able/cve-2022-24481-analysis
Privilege EscalationVulnerability AnalysisExploitationReverse EngineeringBinary Exploitation
GitHubuname1able/cve-2022-24481-analysis

CVE-2022-24481-analysis

Deep-dive analysis of Windows CLFS type confusion (CVE-2022-24481) with root-cause explanation, exploitation flow, kernel gadget details, and working local privilege escalation PoC.

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share
View Repository
151 month agoNot yet reviewed

CVE-2022-24481 Type Confusion

Type confusion

Vulnerable File

clfs.sys

Root Cause

Because the validation logic for rgContainers[0] is not strict, after forging rgContainers[0], ClientContext overlaps with the ContainerContext structure. If the fake data is accepted, after CloseHandle, CClfsLogFcbPhysical::FlushMetadata restores the ClientContext data.

Exploitation Method

After forging rgContainers[0], ClientContext overlaps with the ContainerContext structure. If the fake data is accepted, after CloseHandle, CClfsLogFcbPhysical::FlushMetadata restores the ClientContext data. Because the structures overlap, this process changes ContainerContext->pContainer to the forged data. Finally, when CClfsBaseFilePersisted::RemoveContainer is called, it triggers an indirect member-function call, executes a specific gadget, and leads to privilege escalation.

PoC Flow

1. Static File Preparation

createlog creates a new log file.

Add a Container entry.

Create a symbolic link X:\ that points to the current directory.

Clear the cbSymbolName_start -> cbSymbolName_end range.

Set cbSymbolName_start to X:\N.

Copy the data in ContainerContext_start -> New_cbSymbolName_end into ClientContext.

Update rgContainers[0] so it points to the new ContainerContext_start location.

Update the new ContainerContext->pContainer value.

Recompute the checksum.

2. Runtime Preparation

Locate the gadget address in kernel memory.

Build the fake virtual table.

Perform the remaining memory setup.

3. Open the Forged Log File

CClfsLogFcbPhysical::Initialize

00000001C0002EDB stores the ClientContext data.

After CloseHandle, CClfsRequest::Cleanup->CClfsLogFcbPhysical::FlushMetadata runs.

It copies the forged data back into ClientContext. Because ClientContext overlaps with ContainerContext, ContainerContext->pContainer is overwritten with the forged data.

CClfsBaseFilePersisted::RemoveContainer then executes our gadget, resulting in a 16-byte write to an arbitrary address.

References

https://zhuanlan.zhihu.com/p/645490730

https://github.com/fr4nkxixi/CVE-2022-24481-POC

https://securelist.com/windows-clfs-exploits-ransomware-cve-2022-24521/111580/

https://starmap.dbappsecurity.com.cn/blog/articles/2022/05/10/cve-2022-24481/

https://www.4awl.net/9646.html

Data Modification List

Function Flow Key Points

win10_21H2_19044.1620

CClfsLogFcbPhysical::Initialize(0x??7c) initialization routine for opening the file

bp clfs!CClfsLogFcbPhysical::Initialize + 0x45F

This code stores the ClientContext memory.

After CloseHandle, CClfsRequest::Cleanup->CClfsLogFcbPhysical::FlushMetadata is executed.

bp clfs!CClfsLogFcbPhysical::FlushMetadata + 0x46

This restores the ClientContext data.

CClfsBaseFilePersisted::RemoveContainer

bp clfs!CClfsBaseFilePersisted::RemoveContainer + 0x10F

Use the forged virtual table pointer to reach the gadget.

Note that if the forged file fails, opening the file will fail and GetLastError will reveal the reason. In that case, the exploit flow cannot continue.

Gadget

CClfsBaseFilePersisted::RemoveContainer

CLFS!ClfsEarlierLsn

nt!SeSetAccessStateGenericMapping

nt!SeSetAccessStateGenericMapping

movdqu xmmword ptr [rax+8], xmm0 writes 16 bytes to [rax+8] (XMMWORD, 128 bits).

After sequential execution, the result is to write the 16-byte data from poi(rdx) 0xFFFFFFFF into poi(poi(rcx+0x48)+0x8).

rcx is the virtual table pointer location, and this location is under our control.

Implemented PoC

https://github.com/uname1able/CVE-2022-24481.git

Win10 PoC

winver

win10_21H2_19044.1620

bp clfs!CClfsBaseFilePersisted::RemoveContainer + 0x10F

Win11 PoC

winver

win11_21H2_22000.593

bp clfs!CClfsBaseFilePersisted::RemoveContainer + 0x183

Download Tool