IE浏览器在野0Day CVE-2021-26411漏洞分析

  • A+
所属分类:安全文章

漏洞名称 : Internet Explorer内存损坏漏洞

组件名称 : Internet Explorer

威胁等级 :

影响范围 Internet Explorer 11 or Microsoft Edge   (EdgeHTML-based)

on

Windows 7 SP1

Windows 8.1

Windows RT 8.1

Windows 10

Windows 10 Version 1607, 1803,1809,   1909, 2004,20H2

Windows Server 2008 SP2

Windows Server 2008 R2 SP1

Windows Server 2012, 2012 R2, 2016, 2019

Windows Server version 1909, 2004,20H2

漏洞类型 远程代码执行

利用条件 : 1、用户认证:不需要用户认证

2、触发方式:远程

造成后果 : 当受影响版本的IE浏览器用户访问攻击者构造的恶意链接时,将会触发该漏洞,造成远程代码执行。


漏洞分析


组件介绍

Microsoft Internet Explorer(IE)是美国微软(Microsoft)公司的一款Windows操作系统附带的Web浏览器。


2 漏洞描述

近日,深信服安全团队监测到一则披露东北亚某APT组织针对安全研究人员发起的攻击事件。这次攻击行动中利用的一个IE浏览器的0day漏洞于三月微软补丁日被修复,漏洞编号:CVE-2021-26411,漏洞危害:高危。当受影响版本的IE浏览器用户访问攻击者构造的恶意链接时,将会触发该漏洞,造成远程代码执行。


漏洞分析

目前在野PoC的执行流程简述如下:

1)创建1个HTML Element(元素)对象elem 和2个HTML Attribute(属性)对象 attr1和attr2

2)为两个Attribute对象的nodeValue属性赋值,其中attr1的nodeValue指向一个重载valueOf函数的Object

3)将两个Attribute对象attr1和attr2绑定至Element对象elem

4)调用elem.removeAttributeNode(attr1) 移除‘xxx’的属性attr1对象

5)removeAttributeNode方法触发valueOf函数回调,回调期间调用clearAttributes(),清除elem 对象绑定的所有属性对象:attr1和attr2

6)valueOf函数回调返回,IE浏览器Tab进程崩溃在空指针解引用处:

IE浏览器在野0Day CVE-2021-26411漏洞分析

通过上面PoC流程分析,可以推测,这里崩溃的原因是由于valueOf回调里clearAttributes()函数清除了elem对象绑定的所有属性对象后,返回解释器执行(这里破坏了解释器层面的删除原子操作),属性对象再次被释放从而引发的Double Free问题。但仍有一些细节问题需要具体分析:


1)removeAttributeNode() 为何会触发脚本中的valueOf回调?

2)由隔离堆和延迟释放机制保护的DOM对象,为何仍会触发空指针解引用异常?


首先通过静态分析讨论问题1。

函数removeAttributeNode()在mshtml.dll中由MSHTML!CElement::ie9_removeAttributeNode 函数处理。其内部会调用MSHTML!CElement::ie9_removeAttributeNodeInternal,后者是removeAttributeNode()的主要实现:

IE浏览器在野0Day CVE-2021-26411漏洞分析

MSHTML!CElement::ie9_removeAttributeNodeInternal内部首先通过2次CBase::FindAAIndexNS函数查找待移除属性在CAttrArray对象保存VARINAT数组(+0x8)中的属性对象索引和属性对象nodeValue索引:

IE浏览器在野0Day CVE-2021-26411漏洞分析

当查找到该属性对象索引后,通过CBase::GetObjectAt取出该属性对象:

IE浏览器在野0Day CVE-2021-26411漏洞分析

当查找到该属性对象nodeValue索引后,通过CBase::GetIntoBSTRAt函数,将属性对象的nodeValue转换成BSTR存放到CAttribute.nodeValue (+0x30)处,此时将触发valueOf的回调!

IE浏览器在野0Day CVE-2021-26411漏洞分析

然后通过两次CBase::DeleteAt分别删除该属性对象和属性对象的nodeValue(这里需要留意两次DeleteAt中存在一个CBase::FindAAIndexNS再次查找attr1.nodeValue索引的操作):

IE浏览器在野0Day CVE-2021-26411漏洞分析

CBase::DeleteAt内部首先检查待删除对象的索引,不为-1则调用CAttrArray::Destroy执行清理工作:

IE浏览器在野0Day CVE-2021-26411漏洞分析

CAttrArray::Destroy内部最后依次调用CImplAry::Delete修改CAttrArray的计数器(+0x4)和对应的VARIANT数组(+0x8)排序,再调用CAttrValue::Free释放属性对象:

IE浏览器在野0Day CVE-2021-26411漏洞分析


接着通过动态调试,观察问题1的回调过程并分析问题2。

(1)进入removeAttributeNode函数前,elem对象的内存布局:

IE浏览器在野0Day CVE-2021-26411漏洞分析

(2)进入

MSHTML!CElement::ie9_removeAttributeNodeInternal后,2次CBase::FindAAIndexNS函数调用结果:

IE浏览器在野0Day CVE-2021-26411漏洞分析
IE浏览器在野0Day CVE-2021-26411漏洞分析

(3)CBase::GetIntoBSTRAt触发脚本中的valueOf回调:

IE浏览器在野0Day CVE-2021-26411漏洞分析

(4)valueOf回调中调用clearAttributes()后,elem对象的内存布局:

IE浏览器在野0Day CVE-2021-26411漏洞分析

对比(1),可以看到clearAttributes()后,elem.CAttrArray.count (+0x4) 递减到了1;CAttrArray保存的VARIANT数组(+0x8),存在内存拷贝操作,将索引4的attr2依序前向拷贝至之前的索引(移位),这对应了CImplAry::Delete的逻辑:

IE浏览器在野0Day CVE-2021-26411漏洞分析

(5)回调返回,第一次CBase::DeleteAt() 调用:

首先检查待删除VARIANT对象索引,这里使用的是第一次CBase::FindAAIndexNS查找的attr1索引值2:

IE浏览器在野0Day CVE-2021-26411漏洞分析

通过索引检查后进入CAttrArray::Destroy开始清理工作。

(6)回调返回,第二次CBase::DeleteAt() 调用:

回顾静态分析中,两次CBase::DeleteAt中有一次CBase::FindAAIndexNS调用再次查找attr1.nodeValue索引的操作。正常情况下,CBase::FindAAIndexNS预期返回应该是1,但是由于回调破坏了解释器层面的原子操作,提前释放了elem的所有属性,这里返回了非预期的-1:

IE浏览器在野0Day CVE-2021-26411漏洞分析

根据对CBase::DeleteAt函数的静态分析,对于索引为-1的情况,将抛出异常:

IE浏览器在野0Day CVE-2021-26411漏洞分析

返回后,CAttrArray对象指针指向内存置NULL,从而最终触发空值解引用异常:

IE浏览器在野0Day CVE-2021-26411漏洞分析

这里通过一张图来解释整个过程:

IE浏览器在野0Day CVE-2021-26411漏洞分析


影响范围


Microsoft Internet Explorer(IE)是美国微软(Microsoft)公司的一款Windows操作系统附带的Web浏览器。成为最流行的 Web 浏览器之一。全球有数千万 客户端采用 Internet Explorer浏览器,可能受漏洞影响的资产广泛分布于世界各地,涉及用户量过多,导致漏洞影响力巨大。


目前受影响的Internet Explorer版本:

Internet Explorer 11 or Microsoft Edge (EdgeHTML-based)

on

Windows 7 SP1

Windows 8.1

Windows RT 8.1

Windows 10

Windows 10 Version 1607, 1803,1809, 1909, 2004,20H2

Windows Server 2008 SP2

Windows Server 2008 R2 SP1

Windows Server 2012, 2012 R2, 2016, 2019

Windows Server version 1909, 2004,20H2


解决方案


官方修复建议

当前官方已发布受影响版本的对应补丁,建议受影响的用户及时更新官方的安全补丁。链接如下:

https://msrc.microsoft.com/update-guide/en-us/vulnerability/CVE-2021-26411


点击控制面板--程序--程序和功能--已安装更新,查看是否安装补丁。

IE浏览器在野0Day CVE-2021-26411漏洞分析

点击download列表下对应系统的KB号链接下载补丁。

IE浏览器在野0Day CVE-2021-26411漏洞分析


深信服解决方案

深信服下一代防火墙】预计2021年3月12日可轻松防御此漏洞, 建议部署深信服下一代防火墙的用户更新至最新的安全防护规则,可轻松抵御此高危风险。

深信服云盾】预计2021年3月12日从云端自动更新防护规则,云盾用户无需操作,即可轻松、快速防御此高危风险。

深信服安全感知平台】预计2021年3月12日可检测利用该漏洞的攻击,实时告警,并可联动【深信服下一代防火墙等产品】实现对攻击者ip的封堵。

深信服安全运营服务】深信服云端安全专家提供7*24小时持续的安全运营服务。在漏洞爆发之初,云端安全专家即对客户的网络环境进行漏洞扫描,保障第一时间检查客户的主机是否存在此漏洞。对存在漏洞的用户,检查并更新了客户防护设备的策略,确保客户防护设备可以防御此漏洞风险。

深信服EDR】深信服EDR即将支持针对该漏洞的在野样本检测:

    ● 确保病毒库更新至最新版本

    ● 集成深信服SAVE人工智能检测引擎,拥有强大的泛化能力,精准防御未知病毒

    ● 接入安全云脑,即可使用云查服务及时检测防御新威胁


时间轴


2021/1/26  深信服监测到东北亚某APT组织针对安全研究人员的攻击事件。

2021/3/10  深信服千里目安全实验室发布微软三月份补丁日通告。

2021/3/11  深信服千里目安全实验室分析该漏洞、发布解决方案。



点击阅读原文,及时关注并登录深信服智安全平台,可轻松查询漏洞相关解决方案。

IE浏览器在野0Day CVE-2021-26411漏洞分析


深信服千里目安全实验室

IE浏览器在野0Day CVE-2021-26411漏洞分析

深信服科技旗下安全实验室,致力于网络安全攻防技术的研究和积累,深度洞察未知网络安全威胁,解读前沿安全技术。

● 扫码关注我们



本文始发于微信公众号(深信服千里目安全实验室):IE浏览器在野0Day CVE-2021-26411漏洞分析

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: