首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >CVE-2022-21974:RMSRoamingSecurity 远程代码执行中的未初始化指针

CVE-2022-21974:RMSRoamingSecurity 远程代码执行中的未初始化指针

作者头像
Khan安全团队
发布2022-02-28 09:14:35
发布2022-02-28 09:14:35
1.6K0
举报
文章被收录于专栏:Khan安全团队Khan安全团队

根本原因

构造RMSRoamingSecurity!ATL::CComCreator<ATL::CComObject<CRmsRoamingSecurity> >::CreateInstance函数分配并初始化一个CRmsRoamingSecurity对象(0x3470 字节),但未能完全初始化其状态。

例如,在偏移量 0x3458 处,有一个未初始化的指针在调用析构函数时被释放(in CRmsRoamingSecurity::_Cleanup):

代码语言:javascript
复制
0:000> 
RMSRoamingSecurity!CRmsRoamingSecurity::_Cleanup+0x29:
00007ffd`719767a5 488b8b58340000  mov     rcx,qword ptr [rbx+3458h] ds:000001c6`612f9fe8=c0c0c0c0c0c0c0c0

0:000> p
RMSRoamingSecurity!CRmsRoamingSecurity::_Cleanup+0x30:
00007ffd`719767ac 4885c9          test    rcx,rcx

0:000> 
RMSRoamingSecurity!CRmsRoamingSecurity::_Cleanup+0x33:
00007ffd`719767af 7414            je      RMSRoamingSecurity!CRmsRoamingSecurity::_Cleanup+0x49 (00007ffd`719767c5) [br=0]

0:000> 
RMSRoamingSecurity!CRmsRoamingSecurity::_Cleanup+0x35:
00007ffd`719767b1 48ff15e0b90000  call    qword ptr [RMSRoamingSecurity!_imp_CoTaskMemFree (00007ffd`71982198)] ds:00007ffd`71982198={combase!CoTaskMemFree (00007ffd`ce8454d0)}

这是使用未初始化数据的函数,请参见[0][1]

代码语言:javascript
复制
void __fastcall CRmsRoamingSecurity::_Cleanup (struct_v7 * this )
{
  无效*v2;// rcx
  无效*qword3460; // rcx
  无效*qword33E8; // rcx

  如果(这个-> qword33E0)
  {
    IpcFreeMemory ();
    这-> qword33E0 = 0i64;
  }
  v2 = *( void **)& this -> gap33F0 [ 104 ];      // <--- [0] 未初始化
  if ( v2 )
  {
    CoTaskMemFree (v2);                     // <--- [1] free 
    *(_QWORD *)& this -> gap33F0 [ 104 ] = 0i64;
  }
  // ... 
}

复制品

  1. 通过 Gflags 开启 PageHeapwinword.exe
  2. 启动 Word,将调试器附加到它
  3. cve-2022-21974.rtf在 Word 中打开
代码语言:javascript
复制
(12f0.2f64): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
verifier!AVrfpDphFindBusyMemoryNoCheck+0x8a:
00007ffd`7a4c4742 817ac0bbbbcdab  cmp     dword ptr [rdx-40h],0ABCDBBBBh ds:c0c0c0c0`c0c0c080=????????

0:000> kc
 # Call Site
00 verifier!AVrfpDphFindBusyMemoryNoCheck
01 verifier!AVrfpDphFindBusyMemory
02 verifier!AVrfpDphFindBusyMemoryAndRemoveFromBusyList
03 verifier!AVrfDebugPageHeapFree
04 ntdll!RtlDebugFreeHeap
05 ntdll!RtlpFreeHeap
06 ntdll!RtlpFreeHeapInternal
07 ntdll!RtlFreeHeap
08 RMSRoamingSecurity!CRmsRoamingSecurity::_Cleanup
09 RMSRoamingSecurity!ATL::CComObject<CRmsRoamingSecurity>::~CComObject<CRmsRoamingSecurity>
0a RMSRoamingSecurity!ATL::CComObject<CRmsRoamingSecurity>::`vector deleting destructor'
0b RMSRoamingSecurity!ATL::CComCreator<ATL::CComObject<CRmsRoamingSecurity> >::CreateInstance
0c RMSRoamingSecurity!ATL::CComClassFactory::CreateInstance
0d combase!CServerContextActivator::CreateInstance
0e combase!ActivationPropertiesIn::DelegateCreateInstance
0f combase!CApartmentActivator::CreateInstance
10 combase!CProcessActivator::CCICallback
11 combase!CProcessActivator::AttemptActivation
12 combase!CProcessActivator::ActivateByContext
13 combase!CProcessActivator::CreateInstance
14 combase!ActivationPropertiesIn::DelegateCreateInstance
15 combase!CClientContextActivator::CreateInstance
16 combase!ActivationPropertiesIn::DelegateCreateInstance
17 combase!ICoCreateInstanceEx
18 combase!CComActivator::DoCreateInstance
19 combase!CoCreateInstanceEx
1a combase!CoCreateInstance
1b ole32!wCreateObject
1c ole32!OleLoadWithoutBinding
1d ole32!OleLoad

我已经在 Windows 10 x64 VM 和 Windows 11 x64 上使用写字板(但需要单击)和 Office Word 2019 复制了此内容。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 根本原因
  • 复制品
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档