(CVE-2025-55336) Windows Cloud Files Mini Filter Driver Information Disclosure
好的,我现在需要帮用户总结一篇文章的内容,控制在100字以内。用户给了一段文章,看起来是关于一个安全漏洞的公告。首先,我得快速浏览一下文章内容,抓住关键点。 文章开头提到了CVE编号CVE-2025-55336,涉及的版本有Windows 10、11和一些服务器版本。CVSS评分是5.5,属于中等风险。漏洞是在Windows Cloud Files Mini Filter Driver中发现的,允许无权限的本地攻击者泄露内核地址。 接下来,文章详细描述了漏洞的位置和影响。cldflt.sys这个驱动程序在处理abort hydration命令时有一个不安全的比较,导致侧信道攻击可以泄露EPROCESS地址。攻击者可以通过观察abort调用是否挂起来判断地址是否匹配。 然后是关于利用的部分,提到EPROCESS结构在内存中的对齐情况和可能的地址范围。通过并发线程搜索可以在短时间内找到目标地址。 最后是PoC证明和漏洞披露的时间线。 现在我要把这些信息浓缩到100字以内。重点包括:漏洞名称、影响版本、风险等级、攻击方式、影响以及修复时间。 可能的结构:Windows 10/11/Server存在漏洞(CVE-2025-55336),中等风险,允许无权限本地攻击者泄露内核地址,影响云文件驱动程序处理abort命令时的比较机制。微软已修复。 检查字数是否符合要求,并确保没有使用“文章内容总结”之类的开头。 </think> Windows 10/11/Server 存在侧信道漏洞(CVE-2025-55336),中等风险。该漏洞允许无权限本地攻击者通过云文件驱动程序中的不安全比较机制泄露当前进程的EPROCESS内核地址。微软已修复该问题。 2025-10-14 00:0:0 Author: starlabs.sg(查看原文) 阅读量:8 收藏

Advisory October 14, 2025 By Chen Le Qi 4 min read

CVE: CVE-2025-55336

Affected Versions: Windows 10 (21H2, 22H2, 1809), Windows 11 (22H2, 23H2, 24H2, 25H2), Windows Server 2019, 2022, 2022 23H2, 2025

CVSS3.1: 5.5 (Medium) — CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N

Summary

Product Windows Cloud Files Mini Filter Driver (cldflt.sys)
Vendor Microsoft
Severity Medium — an unprivileged local attacker may exploit this to leak kernel addresses
Affected Versions Windows 10 (21H2, 22H2, 1809), Windows 11 (22H2, 23H2, 24H2, 25H2), Windows Server 2019 / 2022 / 2022 23H2 / 2025
Tested Versions Windows 11 24H2 (Build 26100.2161)
CVE Identifier CVE-2025-55336
CVE Description A side channel in the Windows Cloud Files Mini Filter Driver allows an unprivileged local attacker to leak the EPROCESS kernel address of the current process
CWE Classification(s) CWE-200: Exposure of Sensitive Information to an Unauthorized Actor

CVSS3.1 Scoring System

Base Score: 5.5 (Medium) Vector String: CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N

Metric Value
Attack Vector (AV) Local
Attack Complexity (AC) Low
Privileges Required (PR) Low
User Interaction (UI) None
Scope (S) Unchanged
Confidentiality (C) High
Integrity (I) None
Availability (A) None

Product Background

cldflt.sys is a filesystem minifilter driver that acts as a proxy between user applications and cloud sync engines. The sync engine handles on-demand downloading and uploading of data, while cldflt.sys works with the Windows Shell to present cloud-backed files as if they were locally available. It underpins technologies such as OneDrive.

Description of the vulnerability

An insecure comparison when processing a request to abort hydration (command 0x4002) allows a side channel attack to leak the EPROCESS address of the current process.

cldflt.sys creates a filter communication port \\CLDMSGPORT for usermode clients via CldPortInitialize():

RtlInitUnicodeString(&DestinationString, L"\\CLDMSGPORT");
status = SeSddlSecurityDescriptorFromSDDL((unsigned __int16 *)v7, v1, &P);
HsmDbgBreakOnStatus(status);
if ( status >= 0 )
{
  ObjectAttributes.RootDirectory = 0LL;
  ObjectAttributes.SecurityQualityOfService = 0LL;
  ObjectAttributes.ObjectName = &DestinationString;
  ObjectAttributes.SecurityDescriptor = P;
  ObjectAttributes.Length = 48;
  ObjectAttributes.Attributes = 576;
  status = FltCreateCommunicationPort(
            Globals,
            &ServerPort,
            &ObjectAttributes,
            0LL,
            (PFLT_CONNECT_NOTIFY)CldiPortNotifyConnect,
            (PFLT_DISCONNECT_NOTIFY)CldiPortNotifyDisconnect,
            (PFLT_MESSAGE_NOTIFY)CldiPortNotifyMessage,
            0x7FFFFFFF);

When a client connects, CldiPortNotifyConnect() allocates a ClientInfo structure for each open handle:

clientInfo = (CLDFLT_PORT_CLIENT_INFO *)ExAllocatePool2(256LL, 0x118LL, 0x63706C43LL);

This structure contains various fields including the EPROCESS address of the client process.

Command 0x4002 is dispatched to CldiPortProcessAbortHydration(), which iterates over all registered clients and compares their stored EPROCESS pointer against Element13 — a value supplied directly from usermode:

FltAcquirePushLockSharedEx(&g_ClientInfoListLock, 0LL);
curClientInfo = g_ClientInfoList.Flink;
if ( g_ClientInfoList.Flink != &g_ClientInfoList )
{
    elem13Val_ = elem13Val;
    elem7Val_  = elem7Val;
    do
    {
        if ( !elem13Val_ || curClientInfo->ClientProcess_ == elem13Val_ ) // Insecure comparison
        {
            FltAcquirePushLockSharedEx(&curClientInfo->Lock, 0LL);
            if ( elem4Val )
            {
                PortrootData = CldiPortLookupSyncRootNoLock(curClientInfo, elem4Val);
                if ( PortrootData )
                    CldSyncAbortOperation(elem14Val, PortrootData, elem7Val_, elem12Val, elem5Val);
            }
            else
            {
                elem7Val = 0LL;
                while ( 1 )
                {
                    portrootElem = RtlEnumerateGenericTableWithoutSplayingAvl(&curClientInfo->AvlTable, &elem7Val);
                    if ( !portrootElem )
                        break;
                    CldSyncAbortOperation(elem14Val, portrootElem[1], elem7Val_, elem12Val, elem5Val);
                }
            }
            FltReleasePushLockEx(&curClientInfo->Lock, 0LL);
            elem13Val_ = elem13Val;
        }
        curClientInfo = curClientInfo->Link.Flink;
    }
    while ( curClientInfo != &g_ClientInfoList );

When a match is found, CldSyncAbortOperation() waits for any in-progress operations on the syncroot to complete before aborting. This creates a timing oracle: by issuing a dir command on a connected syncroot directory and observing whether the abort call hangs, an attacker can determine whether their candidate address matched the real EPROCESS pointer.

Exploitation

EPROCESS structures are always allocated on a 0x40-byte alignment on the latest Windows 11 builds. The segment servicing EPROCESS allocations is empirically observed to fall within one of two ranges:

  • 0xffffXX80000000000xffffXX9000000000
  • 0xffffXX00000000000xffffXX1000000000

The XX byte ranges from 0x80 to 0xf0 (112 variations). With two threads per variation and 112 concurrent thread pairs, the full search space of ~1,073,741,824 candidates can be exhausted in under 30 minutes on an 8-core VM, yielding the EPROCESS address of one of the exploit threads — a powerful primitive for subsequent exploitation.

Proof of Concept

The PoC demonstrates the oracle for one of the 112 address variations. On success it pauses and prints the EPROCESS address of the running process.

Credit

Chen Le Qi (@cplearns2h4ck) of STAR Labs SG Pte. Ltd.

Timeline


文章来源: https://starlabs.sg/advisories/25/25-55336/
如有侵权请联系:admin#unsafe.sh