CVE编号

CVE-2026-80093

摘要

Windows Cloud Files Mini Filter Driver 的 CldiStreamPrepareRequestForMoreProcessing 功能(版本:10.0.26100.8457 (WinBuild.160101.0800)和 10.0.26100.8655 (WinBuild.160101.0800))中存在一种类型混淆漏洞。专门设计的云过滤API调用序列可能导致类型混淆。攻击者可以执行专用应用程序来触发该漏洞。

已确认的易受攻击版本

以下版本要么经过Talos测试或验证存在漏洞,要么由厂商确认存在漏洞。

Windows Cloud Files Mini 过滤驱动(版本:10.0.26100.8457 (WinBuild.160101.0800) 和 10.0.26100.8655 (WinBuild.160101.0800))

产品网址

Windows Cloud 文件迷你过滤器驱动 - https://www.microsoft.com/

CVSSv3评分

8.8 - CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H

CWE

CWE-843 - 使用不兼容类型访问资源(“类型混淆”)

详情

云文件迷你过滤器驱动(cldflt.sys)是一款Microsoft的Windows内核模式文件系统驱动程序,支持云存储集成功能,如OneDrive按需文件。它管理基于云的占位文件,同步本地存储与云服务之间的数据,并在用户访问文件时自动下载。该驱动程序在 Windows 文件系统堆栈中运行,使云文件表现得像普通本地文件。

当一个线程进入时,另一个线程执行 ,暂时将基于栈的哨兵插入同一侵入性请求列表时,就达到了易受攻击状态。中止步行器假设每个列表条目都嵌入在偏移量的对象中。如果它看到栈哨兵,计算如下:OpenStream->RequestListHeadCldStreamAbortOperationCldiStreamProcessPendingHydrationRequestsLIST_ENTRYCLD_STREAM_REQUEST_PARTIAL+0x8

request = CONTAINING_RECORD(entry,
                            CLD_STREAM_REQUEST_PARTIAL,
                            OpenStreamListEntry);

这等价于:

request = (CLD_STREAM_REQUEST_PARTIAL *)((char *)entry - 0x8);

对于哨兵条目,这会产生一个由另一线程内核栈支持的假请求对象。后续代码会从该假请求中取消引用字段,并通过假指针写入,导致内核崩溃,并可能提供写入原语,如果能影响假请求字段。QueueContext

要触发此条件,攻击者必须注册一个提供者并创建一个“脱水占位符”。 接下来,尝试读取该占位符会触发回调。如果提供者没有响应这个取数据请求,内核会创建一个与该占位符和流关联的待处理请求。 在请求待处理期间,攻击者可以调用其中一个未公开的API: 。 它通过通信端口向驱动发送消息,触发内核端的()处理器。 顾名思义,该处理器负责操作和水分消除。在正常情况下,调用该函数的提供者或客户端会尝试取消与特定连接或同步根相关的特定请求。 不过,我们可以对相关字段使用类似万用符的值,并以以下方式调用:OnFetchDataCfAbortOperationcldflt\\CLDMSGPORTCldiPortProcessAbortHydration0x4002CfAbortOperation

/*
  HRESULT CfAbortOperation(DWORD ProviderProcessId, CF_ABORT_PARAMS *pAbortParams, DWORD Flags)
  
  struct CF_ABORT_PARAMS {  // size: 0x20 (32 bytes)
      __int64 ProviderKey;   // +0x00
      __int64 SyncRootKey;   // +0x08
      __int64 StreamKey;     // +0x10
      __int64 RequestKey;    // +0x18
  };
*/

HRESULT hr = pfnAbort(0, NULL, 0);

这导致了一种情景:调用方遍历所有连接、同步根、流表、流及其对应请求以中止它们。 在崩溃期间观察调用栈,我们可以看到以下函数调用:CldiPortProcessAbortHydration

For ProviderProcessId = 0, ProviderKey = 0 , SyncRootKey = 0 , StreamKey = 0 ,RequestKey = 0

� CldiPortNotifyMessage
  � CldiPortProcessFilterControl
    � CldiPortProcessAbortHydration - Iterates over Connections and related RootSync
      � CldSyncAbortOperation       - Iterates over StreamsTable for particular RootSync
        � CldStreamAbortOperation   - Iterates over StreamRequests for particular stream
          � CldiStreamPrepareRequestForNonCdqCompletion
            � CldiStreamPrepareRequestForMoreProcessing Keep in mind that when the abort procedure is called this way, it repeatedly walks all of these lists while trying to abort pending requests.

让我们聚焦于:CldStreamAbortOperation

    Line 1 	void __fastcall CldStreamAbortOperation(int ProcessId, PCLD_OPEN_STREAM_PARTIAL OpenStream, PVOID RequestKey)
    Line 2 	{
    Line 3 	  currentSessionId = HsmOsGetProcessSessionIdFromEproccess(currentProcess);
    Line 4 		...
    Line 5
    Line 6 
    Line 7 	  requestListHead = &OpenStream->RequestListHead;
    Line 8 	LABEL_9:
    Line 9 	  CldiStreamCdqACQUIRE(&OpenStream->StreamContext->InstanceContext->CallbackDataQueue, v10);
    Line 10	  for ( entry = requestListHead->Flink; entry != requestListHead; entry = *v16 )
    Line 11	  {
    Line 12		request = CONTAINING_RECORD(entry, CLD_STREAM_REQUEST_PARTIAL, OpenStreamListEntry);
    Line 13		if ( HsmOsIsInSameSession(ProcessSessionIdFromEproccess, (ULONG)entry[4].Blink, currentSessionId)
    Line 14		  && request->RequestorProcessId == ProcessId
    Line 15		  && (!RequestKey || RequestKey == request->RequestKeyOrSequence) )
    Line 16		{
    Line 17		  LOBYTE(v17) = Feature_H2E_WPA3SAE__private_IsEnabledDeviceUsage_1();
    Line 18		  if ( v17 )
    Line 19		  {
    Line 20			if ( !CldiStreamPrepareRequestForNonCdqCompletion(request) || !CldiCanDoNonCdqCompletion(request) )
    Line 21			  goto LABEL_18;
    Line 22			CldiStreamCdqRELEASE(&OpenStream->StreamContext->InstanceContext->CallbackDataQueue, v18);
    Line 23		  }
    Line 24		  else if ( !CldiStreamPrepareRequestForNonCdqCompletion(request) )
    Line 25		  {
    Line 26	LABEL_18:
    Line 27			CldiStreamCdqRELEASE(&OpenStream->StreamContext->InstanceContext->CallbackDataQueue, v18);
    Line 28			goto LABEL_9;
    Line 29		  }
    Line 30		  CldiStreamCompleteCanceledRequest(request, 0xC000CF16);
    Line 31		  goto LABEL_9;
    Line 32		}
    Line 33	  }
    Line 34	  CldiStreamCdqRELEASE(&OpenStream->StreamContext->InstanceContext->CallbackDataQueue, v13);
    Line 35	}

在内部,我们可以看到迭代请求列表时的循环:forlines 10-33

Line 7 	  requestListHead = &OpenStream->RequestListHead;

重要的是,在每次循环迭代中,都会有一个时间窗口,保护该列表的锁:

Line 9 	  CldiStreamCdqACQUIRE(&OpenStream->StreamContext->InstanceContext->CallbackDataQueue, v10);

发布:

CldiStreamCdqRELEASE(&OpenStream->StreamContext->InstanceContext->CallbackDataQueue, v18);

这还带来了更多后果。

在对当前请求执行任何操作之前,必须满足若干条件。 从最后一个开始:lines 13-15

Line 15		  && (!RequestKey || RequestKey == request->RequestKeyOrSequence) )

这是真的,因为我们设为 。 对于:RequestKey0

Line 14		  && request->RequestorProcessId == ProcessId

该条件难以满足,因为我们设 ,通常不等于 。 那么我们是如何通过所有三个约束并执行几个额外功能的呢? 在调用后,在内核线程中运行,并尝试通过反复遍历上述列表来中止请求,同时攻击者同时调用 。 调用该 API 会执行以下序列:ProcessId = 0RequestorProcessId0CfAbortOperationCldiPortProcessAbortHydrationCfDisconnectSyncRoot

USER-MODE : CfDisconnectSyncRoot
KERNEL:
� CldiPortNotifyMessage
  � CldiPortProcessServiceCommands
    � CldSyncDisconnectRootByObject
      � CldiSyncTransferOrAckDataByObject
        � CldStreamTransferData
          � CldiStreamProcessPendingHydrationRequests	

仔细观察,我们可以看到:CldiStreamProcessPendingHydrationRequests

Line 400	void __fastcall CldiStreamProcessPendingHydrationRequests(
Line 401			PCLD_OPEN_STREAM_PARTIAL OpenStream,
Line 402			PVOID AcquireContext,
Line 403			int AckDisposition,
Line 404			NTSTATUS CompletionStatus,
Line 405			LONGLONG TransferOffset,
Line 406			LONGLONG TransferLength,
Line 407			LONGLONG TransferBuffer)
Line 408	{
Line 409		 LIST_ENTRY *p_RequestListHead; // r14
Line 410		 LIST_ENTRY list_sentinel;
Line 411		...
Line 412		 list_sentinel.Blink = &list_sentinel; 
Line 413		 list_sentinel.Flink = &list_sentinel;		
Line 414		 p_RequestListHead = &OpenStream->RequestListHead;
Line 415		...
Line 416	LABEL_2:
Line 417	  CldiStreamCdqACQUIRE(&OpenStream->StreamContext->InstanceContext->CallbackDataQueue, (PKIRQL)AcquireContext);
Line 418	  if ( list_sentinel.Flink == &list_sentinel )
Line 419	  {
Line 420		Blink = p_RequestListHead->Blink;           // Temporarily appends a stack sentinel to the open-stream request list so the walker can restart safely after completion/reschedule mutates the list.
Line 421		if ( Blink->Flink != p_RequestListHead )
Line 422		  goto LABEL_54;
Line 423		list_sentinel.Blink = p_RequestListHead->Blink;
Line 424		list_sentinel.Flink = p_RequestListHead;
Line 425		Blink->Flink = &list_sentinel;
Line 426		p_RequestListHead->Blink = &list_sentinel;
Line 427	  }
Line 428	  Flink = p_RequestListHead->Flink;             
Line 429	  while ( Flink != p_RequestListHead && Flink != &list_sentinel )
Line 430	  {
Line 431		CompletionStatusa = SavedCompletionStatus;
Line 432		Request = CONTAINING_RECORD(Flink, CLD_STREAM_REQUEST_PARTIAL, OpenStreamListEntry);
(...)
Line 600          if ( v22 )
Line 601          {
Line 602            CldiStreamPrepareRequestForNonCdqCompletion((PCLD_STREAM_REQUEST_PARTIAL)&Flink[-1].Blink);
Line 603            LOBYTE(v24) = Feature_H2E_WPA3SAE__private_IsEnabledDeviceUsage_1();
Line 604            if ( v24 && !CldiCanDoNonCdqCompletion(&Flink[-1].Blink) )
Line 605	LABEL_47:
Line 606              CldiStreamCdqRELEASE(&OpenStream->StreamContext->InstanceContext->CallbackDataQueue, HydrationOffset);
Line 607            else
Line 608              CldiStreamCompleteRequest(OpenStream, (PCLD_STREAM_REQUEST_PARTIAL)&Flink[-1].Blink, CompletionStatusa, 0);
Line 609            SavedAckDisposition = v36;
Line 610            SavedCompletionStatus = v37;
Line 611            goto LABEL_2; //restart iteration
Line 612          }
(...)
Line 700	  if ( list_sentinel.Flink != &list_sentinel )
Line 701	  {
Line 702		v26 = list_sentinel.Blink;
Line 703		if ( list_sentinel.Flink->Blink != &list_sentinel
Line 704		  || (HydrationOffset = (LONGLONG)&list_sentinel, list_sentinel.Blink->Flink != &list_sentinel) )
Line 705		{
Line 706	LABEL_54:
Line 707		  __fastfail(3u);
Line 708		}
Line 709		list_sentinel.Blink->Flink = list_sentinel.Flink;
Line 710		v25->Blink = v26;
Line 711		list_sentinel.Blink = &list_sentinel;
Line 712		list_sentinel.Flink = &list_sentinel;
Line 713	  }
Line 714	  CldiStreamCdqRELEASE(&OpenStream->StreamContext->InstanceContext->CallbackDataQueue, HydrationOffset);
Line 715	}

我们首先注意到的是,它也遍历了与以下相同的请求列表:CldiStreamProcessPendingHydrationRequestsCldStreamAbortOperation

Line 414		 p_RequestListHead = &OpenStream->RequestListHead;

我们还可以看到一个在前述函数中没有的特殊元素:在 中插入了一个特殊元素。这似乎起到了列表的哨兵作用。 会走动当前请求列表,但走动过程中可能会完成、取消链接、重新安排或以其他方式移动当前请求。 其中一些操作还能释放并重新获得CBDQ锁。 这意味着正常的迭代状态不稳定:当前条目可能消失,可能不再安全使用,且在函数仍在执行时可能插入新请求。 因此,该函数在 的尾部附近插入一个栈哨兵。然后它从列表头开始,直到到达真正的列表头或这个临时哨兵。 概念上:OpenStream->RequestListHeadlines 418-427CldiStreamProcessPendingHydrationRequestsFlinkLIST_ENTRYOpenStream->RequestListHead

RequestListHead -> req1 -> req2 -> req3 -> sentinel -> head

哨兵解决了三个实际问题:

  1. 它避免在当前请求完成或移动后使用过期。Flink

  2. 它允许函数在丢弃并重新获取队列锁后安全重启。

  3. 它防止新插入或重新排队的工作无限延长当前通道。

然而,这里有个问题。如在 处所示,锁可以被释放,环路可以在 处重新开始。在这个短暂的窗口内,锁被释放时,与 相关的线程可以获得相同的锁并遍历同一列表()。 不认识该对象,并像对待其他对象一样对待,试图获取指向流请求的指针:line 606whileline 611CldStreamAbortOperationOpenStream->RequestListHeadCldStreamAbortOperationLIST_ENTRY list_sentinelLIST_ENTRY

Line 12		request = CONTAINING_RECORD(entry, CLD_STREAM_REQUEST_PARTIAL, OpenStreamListEntry);

由于 偏移量为 ,因此得到:OpenStreamListEntry0x8

fake_request = sentinel - 0x8

这会导致类型混淆,因为 只是局部栈变量,而不是对象的一部分字段。list_sentinelOpenStreamListEntryCLD_STREAM_REQUEST_PARTIAL

为了证明这个理论,让我们来探讨“崩溃倾倒”。

0: kd> .cxr 0xffffc60a9218e170 ; kb
rax=01dcf7310e592844 rbx=ffffc60a91c7e908 rcx=00000000c000cf01
rdx=0000000000000000 rsi=ffffa487d6a92f90 rdi=ffffc60a91c7e908
rip=fffff80f76f0a7cf rsp=ffffc60a9218eba0 rbp=0000000000000001
 r8=0000000000000001  r9=ffffc60a91c7e910 r10=fffff806e164c190
r11=ffffc60a9218eb98 r12=0000000000000000 r13=0000000000000090
r14=0000000000000000 r15=0000000000000001
iopl=0         nv up ei pl nz na po nc
cs=0010  ss=0018  ds=002b  es=002b  fs=0053  gs=002b             efl=00050202
cldflt!CldiStreamPrepareRequestForMoreProcessing+0x47:
fffff80f`76f0a7cf 48894128        mov     qword ptr [rcx+28h],rax ds:002b:00000000`c000cf29=????????????????
  *** Stack trace for last set context - .thread/.cxr resets it
 # RetAddr               : Args to Child                                                           : Call Site
00 fffff80f`76f110d1     : 00000000`00000000 ffffa487`d6a92f80 00000000`00000090 00000000`00000000 : cldflt!CldiStreamPrepareRequestForMoreProcessing+0x47
01 fffff80f`76f3f7fb     : ffffc60a`91c7e908 fffff806`e2242e80 fffff806`e16d06d0 fffff806`72f42a26 : cldflt!CldiStreamPrepareRequestForNonCdqCompletion+0x19
02 fffff80f`76f3c448     : ffffa487`d6a6efa0 00000000`00000000 ffffa487`d6a9ef88 ffff918f`45df0958 : cldflt!CldStreamAbortOperation+0x123
03 fffff80f`76f3a045     : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : cldflt!CldSyncAbortOperation+0x108
04 fffff80f`76f7b232     : 00000000`00004002 00000000`00000001 00000001`00000000 ffffa487`bd8b2fd0 : cldflt!CldiPortProcessAbortHydration+0x599
05 fffff80f`76f4af49     : 00000000`00004002 00000000`00000000 00000000`00000000 00000000`00000000 : cldflt!CldiPortProcessFilterControl+0x76
06 fffff806`72f43622     : ffffa487`d6a42ee0 000000f2`a32ff9a0 00000000`0000016c 000000f2`a32ff960 : cldflt!CldiPortNotifyMessage+0xcc9
07 fffff806`72f8f632     : ffff918f`46e61490 000000f2`a32ff9a0 ffff918f`46e61560 00000000`00000000 : FLTMGR!FltpFilterMessage+0x162
08 fffff806`72f4b9c3     : ffff918f`46e61490 ffffc60a`9218f0d0 ffff918f`3b5a3bf0 00000000`00000000 : FLTMGR!FltpMsgDispatch+0xf2
09 fffff806`e167ccfb     : 918f4471`c430fffe 00000000`00060000 ffff918f`4471c460 fffff806`e1c661b9 : FLTMGR!FltpDispatch+0x133
0a fffff806`e167cc73     : ffff918f`4471c460 ffff918f`4471c460 00000000`00000000 ffff918f`45df0958 : nt!IopfCallDriver+0x5b
0b fffff806`e1ceb3a5     : ffff918f`4471c460 ffffc60a`9218f0d0 ffff918f`3b5a3bf0 00000000`00000000 : nt!IofCallDriver+0x13
0c fffff806`e1cea1ec     : 00000000`00000001 00000000`00000001 00000000`00000001 00000000`00000001 : nt!IopSynchronousServiceTail+0x1c5
0d fffff806`e1ce983e     : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : nt!IopXxxControlFile+0x99c
0e fffff806`e1adc558     : 00000000`00000001 000000f2`a32fe200 ffffc60a`9218f4e0 00000000`00000000 : nt!NtDeviceIoControlFile+0x5e
0f 00007ffa`37901d84     : 00007ffa`2a293bc2 000001f6`d43cb2e0 00000000`00000007 00000000`00000010 : nt!KiSystemServiceCopyEnd+0x28
10 00007ffa`2a293bc2     : 000001f6`d43cb2e0 00000000`00000007 00000000`00000010 00000000`00000060 : ntdll!NtDeviceIoControlFile+0x14
11 00007ffa`2a2931a1     : 00000000`000000c8 00000000`00000000 00000000`000000bc 00000000`00000014 : FLTLIB!FilterpDeviceIoControl+0x13e
12 00007ff6`16c14249     : 000001f6`d43c0000 00000000`00000048 00000000`00000470 00007ffa`377c8771 : FLTLIB!FilterSendMessage+0x31
13 000001f6`d43c0000     : 00000000`00000048 00000000`00000470 00007ffa`377c8771 000001f6`00000040 : abort_type_confusion+0x4249

Line 900	BOOLEAN __fastcall CldiStreamPrepareRequestForMoreProcessing(CLD_STREAM_REQUEST_PARTIAL *Request)
Line 901	{
Line 902	  __int64 Now100ns; // rax
Line 903	  _QWORD *QueueContext; // rcx
Line 904
Line 905	  KeEnterCriticalRegion();
Line 906	  ExAcquireResourceExclusiveLite(&g_CrossVmNotificationResource, 1u);
Line 907	  Now100ns = MEMORY[0xFFFFF78000000014];
Line 908	  QueueContext = Request->QueueContext;
Line 909	  Request->PreparedSystemTime100ns = MEMORY[0xFFFFF78000000014];
Line 910	  if ( QueueContext )
Line 911		QueueContext[5] = Now100ns; // CRASH!!!

我们看到尝试将RAX值写入存储在RCX中的地址(加,对应于)。 看起来是错误代码。 是从假请求对象中被取消引用的字段。指向虚假请求的指针在寄存器中。让我们看看它的位置:00000000c000cf010x28line 91100000000c000cf01STATUS_CLOUD_FILE_PROVIDER_NOT_RUNNINGQueueContextRBX

0: kd> !address ffffc60a91c7e908
Usage:                  Stack
Base Address:           ffffc60a`91c79000
End Address:            ffffc60a`91c80000
Region Size:            00000000`00007000
VA Type:                SystemRange

真实请求应位于池内存或备用内存中,而非堆栈中。 通过检查内核中现有的 -相关线程,我们可以看到:cldflt

!stacks 2 cldflt

(...)
                            [ffff918f4ab240c0 abort_type_confusion.]
 6b4.0011bc  ffff918f3f2a9080 0000000 Blocked    nt!KiSwapContext+0x76
                                        nt!KiSwapThread+0x6d4
                                        nt!KiCommitThreadWait+0x39d
                                        nt!KeWaitForSingleObject+0x859
                                        nt!ExpWaitForResource+0x72
                                        nt!ExAcquireResourceExclusiveLite+0x5e4
                                        cldflt!CldiStreamCdqACQUIRE+0x2a
                                        cldflt!CldiStreamProcessPendingHydrationRequests+0x6b
                                        cldflt!CldStreamTransferData+0x54c
                                        cldflt!CldiSyncTransferOrAckDataByObject+0x487
                                        cldflt!CldSyncDisconnectRootByObject+0x266
                                        cldflt!CldSyncDisconnectRoot+0x136
                                        cldflt!CldiPortProcessServiceCommands+0x1456
                                        cldflt!CldiPortNotifyMessage+0xaba
                                        FLTMGR!FltpFilterMessage+0x162
                                        FLTMGR!FltpMsgDispatch+0xf2
                                        FLTMGR!FltpDispatch+0x133
                                        nt!IopfCallDriver+0x5b
                                        nt!IofCallDriver+0x13
                                        nt!IopSynchronousServiceTail+0x1c5
                                        nt!IopXxxControlFile+0x99c
                                        nt!NtDeviceIoControlFile+0x5e
                                        nt!KiSystemServiceCopyEnd+0x28
                                        ntdll!NtDeviceIoControlFile+0x14

                            [ffff918f3ba930c0 abort_type_confusion.]
21d8.000850  ffff918f45df0080 0000000 RUNNING    nt!DbgBreakPointWithStatus
                                        nt!KiBugCheckDebugBreak+0x12
                                        nt!KeBugCheck2+0xb2e
                                        nt!KeBugCheckEx+0x107
                                        nt!KiBugCheckDispatch+0x69
                                        nt!KiSystemServiceHandler+0x7c
                                        nt!RtlpExecuteHandlerForException+0x12
                                        nt!RtlDispatchException+0x2d2
                                        nt!KiDispatchException+0x35f
                                        nt!KiExceptionDispatch+0x145
                                        nt!KiPageFault+0x442
                                        cldflt!CldiStreamPrepareRequestForMoreProcessing+0x47
                                        cldflt!CldiStreamPrepareRequestForNonCdqCompletion+0x19
                                        cldflt!CldStreamAbortOperation+0x123
                                        cldflt!CldSyncAbortOperation+0x108
                                        cldflt!CldiPortProcessAbortHydration+0x599
                                        cldflt!CldiPortProcessFilterControl+0x76
                                        cldflt!CldiPortNotifyMessage+0xcc9
                                        FLTMGR!FltpFilterMessage+0x162
                                        FLTMGR!FltpMsgDispatch+0xf2
                                        FLTMGR!FltpDispatch+0x133
                                        nt!IopfCallDriver+0x5b
                                        nt!IofCallDriver+0x13
                                        nt!IopSynchronousServiceTail+0x1c5
                                        nt!IopXxxControlFile+0x99c
                                        nt!NtDeviceIoControlFile+0x5e
                                        nt!KiSystemServiceCopyEnd+0x28
                                        ntdll!NtDeviceIoControlFile+0x14
                                        FLTLIB!FilterpDeviceIoControl+0x13e
                                        FLTLIB!FilterSendMessage+0x31
                                        abort_type_confusion+0x4249

通过检查调用 所创建线程的栈范围地址,我们看到:CfDisconnectSyncRoot

0: kd> !thread ffff918f3f2a9080
THREAD ffff918f3f2a9080  Cid 06b4.11bc  Teb: 000000464101e000 Win32Thread: 0000000000000000 WAIT: (WrResource) KernelMode Non-Alertable
    ffffc60a91c7e7d8  SynchronizationEvent
IRP List:
    ffff918f46531480: (0006,0118) Flags: 00060000  Mdl: 00000000
Not impersonating
DeviceMap                 ffffa487d64771d0
Owning Process            ffff918f4ab240c0       Image:         abort_type_confusion.exe
Attached Process          N/A            Image:         N/A
Wait Start TickCount      216903         Ticks: 0
Context Switch Count      70             IdealProcessor: 2             
UserTime                  00:00:00.015
KernelTime                00:00:00.046
Win32 Start Address abort_type_confusion (0x00007ff616c1615c)
Stack Init ffffc60a91c7f5f0 Current ffffc60a91c7e350
Base ffffc60a91c80000 Limit ffffc60a91c79000 Call 0000000000000000 // < --- IMPORTANT VALUES
Priority 8  BasePriority 8  IoPriority 2  PagePriority 5
Child-SP          RetAddr               : Args to Child                                                           : Call Site
ffffc60a`91c7e390 fffff806`e169e424     : 00000000`00000047 00000000`00000000 00000000`00000000 ffff8080`43f1e2b0 : nt!KiSwapContext+0x76
ffffc60a`91c7e4d0 fffff806`e1751dcd     : 00000000`00000000 00000000`00000000 ffffc60a`91c7e660 fffff80f`00000017 : nt!KiSwapThread+0x6d4
ffffc60a`91c7e560 fffff806`e174ffc9     : ffffa487`00000000 00000000`00000002 00000007`00000017 00000007`e45dcdab : nt!KiCommitThreadWait+0x39d
ffffc60a`91c7e5f0 fffff806`e164d082     : ffffc60a`91c7e7d8 ffff918f`0000001b 00000000`00000000 0000ff00`00000000 : nt!KeWaitForSingleObject+0x859
ffffc60a`91c7e6d0 fffff806`e164c774     : ffff918f`42a84f90 ffffc60a`91c7e7c0 ffff918f`00010224 00000000`00000006 : nt!ExpWaitForResource+0x72
ffffc60a`91c7e760 fffff80f`76f4a06a     : 00000000`00000000 00000000`00000004 00000000`00000000 ffffa487`d6a92f90 : nt!ExAcquireResourceExclusiveLite+0x5e4
ffffc60a`91c7e870 fffff80f`76f72c73     : fffff80f`76f86300 ffffa487`c459fe00 ffffa487`d6979870 ffffa487`00000000 : cldflt!CldiStreamCdqACQUIRE+0x2a
ffffc60a`91c7e8a0 fffff80f`76f720d0     : 01dcf731`0e592844 00400000`00046f40 00000000`00000004 00000000`c000cf01 : cldflt!CldiStreamProcessPendingHydrationRequests+0x6b
ffffc60a`91c7e990 fffff80f`76f71afb     : ffffa487`d6a92f80 00000000`00000000 00000000`00000000 00000000`00000000 : cldflt!CldStreamTransferData+0x54c
ffffc60a`91c7eac0 fffff80f`76f4c6aa     : ffffa487`d6a6efa0 ffffa487`00000000 ffffa487`c000cf01 ffffa487`d6a6efa0 : cldflt!CldiSyncTransferOrAckDataByObject+0x487
ffffc60a`91c7eb80 fffff80f`76f831ea     : 00000000`00000000 00000000`00000000 00000209`a10611b0 ffff918f`42a84e80 : cldflt!CldSyncDisconnectRootByObject+0x266
ffffc60a`91c7ebe0 fffff80f`76f82f0e     : 00140000`0002a31c 00140000`0002a31c ffffc60a`91c7ecf9 00000000`c0000225 : cldflt!CldSyncDisconnectRoot+0x136
ffffc60a`91c7ec40 fffff80f`76f4ad3a     : ffffa487`d6a5aee0 00000000`00000001 00000000`00000005 00000000`000000e8 : cldflt!CldiPortProcessServiceCommands+0x1456
ffffc60a`91c7ed60 fffff806`72f43622     : ffffa487`d6a5aee0 00000209`a1057aa0 00000000`000000e8 00000000`00000000 : cldflt!CldiPortNotifyMessage+0xaba
ffffc60a`91c7ee70 fffff806`72f8f632     : ffff918f`46531480 00000209`a1057aa0 ffff918f`46531550 00000000`00000000 : FLTMGR!FltpFilterMessage+0x162
ffffc60a`91c7eee0 fffff806`72f4b9c3     : ffff918f`46531480 ffffc60a`91c7f0d0 ffff918f`3b5a3bf0 00000000`00000000 : FLTMGR!FltpMsgDispatch+0xf2
ffffc60a`91c7ef50 fffff806`e167ccfb     : 00000000`00000001 00000000`00060000 ffff918f`4710d230 fffff806`e1c661b9 : FLTMGR!FltpDispatch+0x133
ffffc60a`91c7eff0 fffff806`e167cc73     : ffff918f`4710d230 ffff918f`4710d230 00000000`00000000 ffff918f`3f2a9958 : nt!IopfCallDriver+0x5b
ffffc60a`91c7f030 fffff806`e1ceb3a5     : ffff918f`4710d230 ffffc60a`91c7f0d0 ffff918f`3b5a3bf0 00000000`00000000 : nt!IofCallDriver+0x13
ffffc60a`91c7f060 fffff806`e1cea1ec     : 00000000`00000000 00000000`00000001 00000000`00000001 00000000`00000001 : nt!IopSynchronousServiceTail+0x1c5
ffffc60a`91c7f110 fffff806`e1ce983e     : 00000000`00000000 fffff806`e174ce9f 00000000`00000000 00000000`00000000 : nt!IopXxxControlFile+0x99c
ffffc60a`91c7f380 fffff806`e1adc558     : 00000000`0000001c 00000000`00000001 00000046`4101e000 00000000`00000000 : nt!NtDeviceIoControlFile+0x5e
ffffc60a`91c7f3f0 00007ffa`37901d84     : 00007ffa`2a293bc2 00000000`00000000 00000000`00000000 00007ff6`16c3f158 : nt!KiSystemServiceCopyEnd+0x28 (TrapFrame @ ffffc60a`91c7f460)
00000046`412eed48 00007ffa`2a293bc2     : 00000000`00000000 00000000`00000000 00007ff6`16c3f158 00000000`00000002 : ntdll!NtDeviceIoControlFile+0x14
00000046`412eed50 00007ffa`2a2931a1     : 00000209`a10611b0 0000e2d7`8ef3dbff 00000209`a1057aa0 00000209`a10611b0 : FLTLIB!FilterpDeviceIoControl+0x13e
00000046`412eedc0 00007ffa`208472c2     : 00000209`00000000 00000000`00000000 00000046`412eee89 00000000`00000000 : FLTLIB!FilterSendMessage+0x31
00000046`412eee10 00007ff6`16c13f22     : 00000209`00000000 00000007`e411826b ffffffff`ff676980 00000209`a1069868 : cldapi!CfDisconnectSyncRoot+0x3e2
00000046`412eeef0 00000209`00000000     : 00000007`e411826b ffffffff`ff676980 00000209`a1069868 00000000`00000000 : abort_type_confusion+0x3f22

这确认了 RBX 值指向与该线程相关的堆栈内存。 切换到那个话题:

0: kd> .thread /r /p ffff918f3f2a9080
Implicit thread is now ffff918f`3f2a9080
Implicit process is now ffff918f`4ab240c0
Loading User Symbols
.............
0: kd> kb
  *** Stack trace for last set context - .thread/.cxr resets it
 # RetAddr               : Args to Child                                                           : Call Site
00 fffff806`e169e424     : 00000000`00000047 00000000`00000000 00000000`00000000 ffff8080`43f1e2b0 : nt!KiSwapContext+0x76
01 fffff806`e1751dcd     : 00000000`00000000 00000000`00000000 ffffc60a`91c7e660 fffff80f`00000017 : nt!KiSwapThread+0x6d4
02 fffff806`e174ffc9     : ffffa487`00000000 00000000`00000002 00000007`00000017 00000007`e45dcdab : nt!KiCommitThreadWait+0x39d
03 fffff806`e164d082     : ffffc60a`91c7e7d8 ffff918f`0000001b 00000000`00000000 0000ff00`00000000 : nt!KeWaitForSingleObject+0x859
04 fffff806`e164c774     : ffff918f`42a84f90 ffffc60a`91c7e7c0 ffff918f`00010224 00000000`00000006 : nt!ExpWaitForResource+0x72
05 fffff80f`76f4a06a     : 00000000`00000000 00000000`00000004 00000000`00000000 ffffa487`d6a92f90 : nt!ExAcquireResourceExclusiveLite+0x5e4
06 fffff80f`76f72c73     : fffff80f`76f86300 ffffa487`c459fe00 ffffa487`d6979870 ffffa487`00000000 : cldflt!CldiStreamCdqACQUIRE+0x2a
07 fffff80f`76f720d0     : 01dcf731`0e592844 00400000`00046f40 00000000`00000004 00000000`c000cf01 : cldflt!CldiStreamProcessPendingHydrationRequests+0x6b
08 fffff80f`76f71afb     : ffffa487`d6a92f80 00000000`00000000 00000000`00000000 00000000`00000000 : cldflt!CldStreamTransferData+0x54c
09 fffff80f`76f4c6aa     : ffffa487`d6a6efa0 ffffa487`00000000 ffffa487`c000cf01 ffffa487`d6a6efa0 : cldflt!CldiSyncTransferOrAckDataByObject+0x487
0a fffff80f`76f831ea     : 00000000`00000000 00000000`00000000 00000209`a10611b0 ffff918f`42a84e80 : cldflt!CldSyncDisconnectRootByObject+0x266
0b fffff80f`76f82f0e     : 00140000`0002a31c 00140000`0002a31c ffffc60a`91c7ecf9 00000000`c0000225 : cldflt!CldSyncDisconnectRoot+0x136
0c fffff80f`76f4ad3a     : ffffa487`d6a5aee0 00000000`00000001 00000000`00000005 00000000`000000e8 : cldflt!CldiPortProcessServiceCommands+0x1456
0d fffff806`72f43622     : ffffa487`d6a5aee0 00000209`a1057aa0 00000000`000000e8 00000000`00000000 : cldflt!CldiPortNotifyMessage+0xaba
0e fffff806`72f8f632     : ffff918f`46531480 00000209`a1057aa0 ffff918f`46531550 00000000`00000000 : FLTMGR!FltpFilterMessage+0x162
0f fffff806`72f4b9c3     : ffff918f`46531480 ffffc60a`91c7f0d0 ffff918f`3b5a3bf0 00000000`00000000 : FLTMGR!FltpMsgDispatch+0xf2
10 fffff806`e167ccfb     : 00000000`00000001 00000000`00060000 ffff918f`4710d230 fffff806`e1c661b9 : FLTMGR!FltpDispatch+0x133
11 fffff806`e167cc73     : ffff918f`4710d230 ffff918f`4710d230 00000000`00000000 ffff918f`3f2a9958 : nt!IopfCallDriver+0x5b
12 fffff806`e1ceb3a5     : ffff918f`4710d230 ffffc60a`91c7f0d0 ffff918f`3b5a3bf0 00000000`00000000 : nt!IofCallDriver+0x13
13 fffff806`e1cea1ec     : 00000000`00000000 00000000`00000001 00000000`00000001 00000000`00000001 : nt!IopSynchronousServiceTail+0x1c5
14 fffff806`e1ce983e     : 00000000`00000000 fffff806`e174ce9f 00000000`00000000 00000000`00000000 : nt!IopXxxControlFile+0x99c
15 fffff806`e1adc558     : 00000000`0000001c 00000000`00000001 00000046`4101e000 00000000`00000000 : nt!NtDeviceIoControlFile+0x5e
16 00007ffa`37901d84     : 00007ffa`2a293bc2 00000000`00000000 00000000`00000000 00007ff6`16c3f158 : nt!KiSystemServiceCopyEnd+0x28
17 00007ffa`2a293bc2     : 00000000`00000000 00000000`00000000 00007ff6`16c3f158 00000000`00000002 : ntdll!NtDeviceIoControlFile+0x14
18 00007ffa`2a2931a1     : 00000209`a10611b0 0000e2d7`8ef3dbff 00000209`a1057aa0 00000209`a10611b0 : FLTLIB!FilterpDeviceIoControl+0x13e
19 00007ffa`208472c2     : 00000209`00000000 00000000`00000000 00000046`412eee89 00000000`00000000 : FLTLIB!FilterSendMessage+0x31
1a 00007ff6`16c13f22     : 00000209`00000000 00000007`e411826b ffffffff`ff676980 00000209`a1069868 : cldapi!CfDisconnectSyncRoot+0x3e2
1b 00000209`00000000     : 00000007`e411826b ffffffff`ff676980 00000209`a1069868 00000000`00000000 : abort_type_confusion+0x3f22

并将框架改为:

0: kd> .frame /r 0n7;dv /t /v
07 ffffc60a`91c7e8a0 fffff80f`76f720d0     cldflt!CldiStreamProcessPendingHydrationRequests+0x6b
rax=0000000000000000 rbx=00000000c000cf01 rcx=0000000000000000
rdx=0000000000000000 rsi=0000000000000000 rdi=0000000000000004
rip=fffff80f76f72c73 rsp=ffffc60a91c7e8a0 rbp=ffffc60a91c7e941
 r8=0000000000000000  r9=0000000000000000 r10=0000000000000000
r11=0000000000000000 r12=ffffa487d6979878 r13=0000000000000000
r14=ffffa487d6a92f90 r15=ffffa487d6a92f80
iopl=0         nv up di pl nz na po nc
cs=0000  ss=0000  ds=0000  es=0000  fs=0000  gs=0000             efl=00000000
cldflt!CldiStreamProcessPendingHydrationRequests+0x6b:
fffff80f`76f72c73 488d45cf        lea     rax,[rbp-31h]

我们可以根据IDA提供的信息解读哨兵地址:

  LIST_ENTRY list_sentinel; // [rsp+78h] [rbp-31h] BYREF

0: kd> ?ffffc60a91c7e941-0x31 -8
Evaluate expression: -63726278940408 = ffffc60a`91c7e908

计算包括:- 8

request = CONTAINING_RECORD(entry, CLD_STREAM_REQUEST_PARTIAL, OpenStreamListEntry);
request = (char *)entry - 0x8;

这就是宏如何获得该结构中请求对象的指针。CONTAINING_RECORD

利用这些信息,攻击者可能会尝试使用通往调用的不同执行路径,利用由此产生的类型混淆,以更好地控制虚假请求对象的字段。 这可能导致任意写入,最终导致任意代码执行。CldiStreamProcessPendingHydrationRequests

事故信息

    0: kd> !analyze -v
    *******************************************************************************
    *                                                                             *
    *                        Bugcheck Analysis                                    *
    *                                                                             *
    *******************************************************************************
    
    SYSTEM_SERVICE_EXCEPTION (3b)
    An exception happened while executing a system service routine.
    Arguments:
    Arg1: 00000000c0000005, Exception code that caused the BugCheck
    Arg2: fffff80f76f0a7cf, Address of the instruction which caused the BugCheck
    Arg3: ffffc60a9218e170, Address of the context record for the exception that caused the BugCheck
    Arg4: 0000000000000000, zero.
    
    Debugging Details:
    ------------------
    
    KEY_VALUES_STRING: 1
    
Key  : Analysis.CPU.mSec
Value: 1765
    
Key  : Analysis.Elapsed.mSec
Value: 3060
    
Key  : Analysis.IO.Other.Mb
Value: 0
    
Key  : Analysis.IO.Read.Mb
Value: 37
    
Key  : Analysis.IO.Write.Mb
Value: 27
    
Key  : Analysis.Init.CPU.mSec
Value: 42578
    
Key  : Analysis.Init.Elapsed.mSec
Value: 79732706
    
Key  : Analysis.Memory.CommitPeak.Mb
Value: 168
    
Key  : Analysis.Version.DbgEng
Value: 10.0.29547.1002
    
Key  : Analysis.Version.Description
Value: 10.2602.27.2 amd64fre
    
Key  : Analysis.Version.Ext
Value: 1.2602.27.2
    
Key  : Bugcheck.Code.KiBugCheckData
Value: 0x3b
    
Key  : Bugcheck.Code.LegacyAPI
Value: 0x3b
    
Key  : Bugcheck.Code.TargetModel
Value: 0x3b
    
Key  : Failure.Bucket
Value: AV_VRF_cldflt!CldiStreamPrepareRequestForMoreProcessing
    
Key  : Failure.Exception.IP.Address
Value: 0xfffff80f76f0a7cf
    
Key  : Failure.Exception.IP.Module
Value: cldflt
    
Key  : Failure.Exception.IP.Offset
Value: 0xa7cf
    
Key  : Failure.Hash
Value: {4129a4d8-43d0-209f-5056-9e4af3e36ca6}
    
Key  : Faulting.IP.Type
Value: Paged
    
Key  : Hypervisor.Enlightenments.ValueHex
Value: 0x6090ebf4
    
Key  : Hypervisor.Flags.AnyHypervisorPresent
Value: 1
    
Key  : Hypervisor.Flags.ApicEnlightened
Value: 1
    
Key  : Hypervisor.Flags.ApicVirtualizationAvailable
Value: 0
    
Key  : Hypervisor.Flags.AsyncMemoryHint
Value: 0
    
Key  : Hypervisor.Flags.CoreSchedulerRequested
Value: 0
    
Key  : Hypervisor.Flags.CpuManager
Value: 0
    
Key  : Hypervisor.Flags.DeprecateAutoEoi
Value: 0
    
Key  : Hypervisor.Flags.DynamicCpuDisabled
Value: 1
    
Key  : Hypervisor.Flags.Epf
Value: 0
    
Key  : Hypervisor.Flags.ExtendedProcessorMasks
Value: 1
    
Key  : Hypervisor.Flags.HardwareMbecAvailable
Value: 1
    
Key  : Hypervisor.Flags.MaxBankNumber
Value: 0
    
Key  : Hypervisor.Flags.MemoryZeroingControl
Value: 0
    
Key  : Hypervisor.Flags.NoExtendedRangeFlush
Value: 0
    
Key  : Hypervisor.Flags.NoNonArchCoreSharing
Value: 0
    
Key  : Hypervisor.Flags.Phase0InitDone
Value: 1
    
Key  : Hypervisor.Flags.PowerSchedulerQos
Value: 0
    
Key  : Hypervisor.Flags.RootScheduler
Value: 0
    
Key  : Hypervisor.Flags.SynicAvailable
Value: 1
    
Key  : Hypervisor.Flags.UseQpcBias
Value: 0
    
Key  : Hypervisor.Flags.Value
Value: 659693
    
Key  : Hypervisor.Flags.ValueHex
Value: 0xa10ed
    
Key  : Hypervisor.Flags.VpAssistPage
Value: 1
    
Key  : Hypervisor.Flags.VsmAvailable
Value: 1
    
Key  : Hypervisor.RootFlags.AccessStats
Value: 0
    
Key  : Hypervisor.RootFlags.CrashdumpEnlightened
Value: 0
    
Key  : Hypervisor.RootFlags.CreateVirtualProcessor
Value: 0
    
Key  : Hypervisor.RootFlags.DisableHyperthreading
Value: 0
    
Key  : Hypervisor.RootFlags.HostTimelineSync
Value: 0
    
Key  : Hypervisor.RootFlags.HypervisorDebuggingEnabled
Value: 0
    
Key  : Hypervisor.RootFlags.IsHyperV
Value: 0
    
Key  : Hypervisor.RootFlags.LivedumpEnlightened
Value: 0
    
Key  : Hypervisor.RootFlags.MapDeviceInterrupt
Value: 0
    
Key  : Hypervisor.RootFlags.MceEnlightened
Value: 0
    
Key  : Hypervisor.RootFlags.Nested
Value: 0
    
Key  : Hypervisor.RootFlags.StartLogicalProcessor
Value: 0
    
Key  : Hypervisor.RootFlags.Value
Value: 0
    
Key  : Hypervisor.RootFlags.ValueHex
Value: 0x0
    
Key  : SecureKernel.HalpHvciEnabled
Value: 0
    
Key  : WER.OS.Branch
Value: ge_release
    
Key  : WER.OS.Version
Value: 10.0.26100.1
    
Key  : WER.System.BIOSRevision
Value: 4.1.0.0
    
    
    BUGCHECK_CODE:  3b
    
    BUGCHECK_P1: c0000005
    
    BUGCHECK_P2: fffff80f76f0a7cf
    
    BUGCHECK_P3: ffffc60a9218e170
    
    BUGCHECK_P4: 0
    
    FILE_IN_CAB:  full.dmp
    
    VIRTUAL_MACHINE:  HyperV
    
    FAULTING_THREAD:  ffff918f45df0080
    
    CONTEXT:  ffffc60a9218e170 -- (.cxr 0xffffc60a9218e170)
    rax=01dcf7310e592844 rbx=ffffc60a91c7e908 rcx=00000000c000cf01
    rdx=0000000000000000 rsi=ffffa487d6a92f90 rdi=ffffc60a91c7e908
    rip=fffff80f76f0a7cf rsp=ffffc60a9218eba0 rbp=0000000000000001
     r8=0000000000000001  r9=ffffc60a91c7e910 r10=fffff806e164c190
    r11=ffffc60a9218eb98 r12=0000000000000000 r13=0000000000000090
    r14=0000000000000000 r15=0000000000000001
    iopl=0         nv up ei pl nz na po nc
    cs=0010  ss=0018  ds=002b  es=002b  fs=0053  gs=002b             efl=00050202
    cldflt!CldiStreamPrepareRequestForMoreProcessing+0x47:
    fffff80f`76f0a7cf 48894128        mov     qword ptr [rcx+28h],rax ds:002b:00000000`c000cf29=????????????????
    Resetting default scope
    
    PROCESS_NAME:  abort_type_confusion.exe
    
    IP_IN_PAGED_CODE: 
    cldflt!CldiStreamPrepareRequestForMoreProcessing+47
    fffff80f`76f0a7cf 48894128        mov     qword ptr [rcx+28h],rax
    
    STACK_TEXT:  
    ffffc60a`9218eba0 fffff80f`76f110d1     : 00000000`00000000 ffffa487`d6a92f80 00000000`00000090 00000000`00000000 : cldflt!CldiStreamPrepareRequestForMoreProcessing+0x47
    ffffc60a`9218ebd0 fffff80f`76f3f7fb     : ffffc60a`91c7e908 fffff806`e2242e80 fffff806`e16d06d0 fffff806`72f42a26 : cldflt!CldiStreamPrepareRequestForNonCdqCompletion+0x19
    ffffc60a`9218ec00 fffff80f`76f3c448     : ffffa487`d6a6efa0 00000000`00000000 ffffa487`d6a9ef88 ffff918f`45df0958 : cldflt!CldStreamAbortOperation+0x123
    ffffc60a`9218ec50 fffff80f`76f3a045     : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : cldflt!CldSyncAbortOperation+0x108
    ffffc60a`9218ecb0 fffff80f`76f7b232     : 00000000`00004002 00000000`00000001 00000001`00000000 ffffa487`bd8b2fd0 : cldflt!CldiPortProcessAbortHydration+0x599
    ffffc60a`9218ed30 fffff80f`76f4af49     : 00000000`00004002 00000000`00000000 00000000`00000000 00000000`00000000 : cldflt!CldiPortProcessFilterControl+0x76
    ffffc60a`9218ed60 fffff806`72f43622     : ffffa487`d6a42ee0 000000f2`a32ff9a0 00000000`0000016c 000000f2`a32ff960 : cldflt!CldiPortNotifyMessage+0xcc9
    ffffc60a`9218ee70 fffff806`72f8f632     : ffff918f`46e61490 000000f2`a32ff9a0 ffff918f`46e61560 00000000`00000000 : FLTMGR!FltpFilterMessage+0x162
    ffffc60a`9218eee0 fffff806`72f4b9c3     : ffff918f`46e61490 ffffc60a`9218f0d0 ffff918f`3b5a3bf0 00000000`00000000 : FLTMGR!FltpMsgDispatch+0xf2
    ffffc60a`9218ef50 fffff806`e167ccfb     : 918f4471`c430fffe 00000000`00060000 ffff918f`4471c460 fffff806`e1c661b9 : FLTMGR!FltpDispatch+0x133
    ffffc60a`9218eff0 fffff806`e167cc73     : ffff918f`4471c460 ffff918f`4471c460 00000000`00000000 ffff918f`45df0958 : nt!IopfCallDriver+0x5b
    ffffc60a`9218f030 fffff806`e1ceb3a5     : ffff918f`4471c460 ffffc60a`9218f0d0 ffff918f`3b5a3bf0 00000000`00000000 : nt!IofCallDriver+0x13
    ffffc60a`9218f060 fffff806`e1cea1ec     : 00000000`00000001 00000000`00000001 00000000`00000001 00000000`00000001 : nt!IopSynchronousServiceTail+0x1c5
    ffffc60a`9218f110 fffff806`e1ce983e     : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : nt!IopXxxControlFile+0x99c
    ffffc60a`9218f380 fffff806`e1adc558     : 00000000`00000001 000000f2`a32fe200 ffffc60a`9218f4e0 00000000`00000000 : nt!NtDeviceIoControlFile+0x5e
    ffffc60a`9218f3f0 00007ffa`37901d84     : 00007ffa`2a293bc2 000001f6`d43cb2e0 00000000`00000007 00000000`00000010 : nt!KiSystemServiceCopyEnd+0x28
    000000f2`a32ff858 00007ffa`2a293bc2     : 000001f6`d43cb2e0 00000000`00000007 00000000`00000010 00000000`00000060 : ntdll!NtDeviceIoControlFile+0x14
    000000f2`a32ff860 00007ffa`2a2931a1     : 00000000`000000c8 00000000`00000000 00000000`000000bc 00000000`00000014 : FLTLIB!FilterpDeviceIoControl+0x13e
    000000f2`a32ff8d0 00007ff6`16c14249     : 000001f6`d43c0000 00000000`00000048 00000000`00000470 00007ffa`377c8771 : FLTLIB!FilterSendMessage+0x31
    000000f2`a32ff920 000001f6`d43c0000     : 00000000`00000048 00000000`00000470 00007ffa`377c8771 000001f6`00000040 : abort_type_confusioin+0x4249
    
    
    SYMBOL_NAME:  cldflt!CldiStreamPrepareRequestForMoreProcessing+47
    
    MODULE_NAME: cldflt
    
    IMAGE_NAME:  cldflt.sys
    
    STACK_COMMAND: .cxr 0xffffc60a9218e170 ; kb
    
    BUCKET_ID_FUNC_OFFSET:  47
    
    FAILURE_BUCKET_ID:  AV_VRF_cldflt!CldiStreamPrepareRequestForMoreProcessing
    
    OS_VERSION:  10.0.26100.1
    
    BUILDLAB_STR:  ge_release
    
    OSPLATFORM_TYPE:  x64
    
    OSNAME:  Windows 10
    
    FAILURE_ID_HASH:  {4129a4d8-43d0-209f-5056-9e4af3e36ca6}
    
    Followup:     MachineOwner
    ---------