CVE-2018-8653分析—IE脚本仍存在漏洞威胁
字数 1564 2025-08-29 08:31:42
CVE-2018-8653漏洞分析与利用技术详解
漏洞概述
CVE-2018-8653是Microsoft Internet Explorer脚本引擎(jscript.dll)中的一个内存损坏漏洞,可导致远程代码执行。该漏洞由Google Project Zero团队发现并报告,微软在常规补丁周期外紧急发布了修复程序。
受影响范围:
- Internet Explorer 9至11版本
- 使用jscript.dll的其他Windows应用程序
- Microsoft Edge不受影响
漏洞严重性:
- CVSS v3.0基本分数:7.5(高)
- 影响分数:5.9
- 可利用性分数:1.6
漏洞背景
在2018年,研究人员在Microsoft脚本引擎(Internet Explorer或Edge)中发现了100多个内存损坏漏洞。网络犯罪分子通常在CVE发布后几周内将其集成到漏洞利用工具包中(如RIG和Magnitude),用于传播恶意软件。
技术细节分析
漏洞入口点
漏洞的入口点是Microsoft的扩展程序Enumerator对象,该对象提供API来枚举Windows的隐藏对象(主要是ActiveX组件)。当在JavaScript数组上调用时,创建的对象在内存中的存储方式与常规对象不同。
关键函数调用链:
Enumerator.prototype.item()创建的对象被识别为ActiveXObject- 攻击者可覆盖"prototype"成员(本应为只读属性)
漏洞利用原理
-
ActiveXObject原型覆盖:
- 攻击者覆盖ActiveXObject函数的原型功能
- 这允许访问通常不可访问的代码路径
-
instanceof操作滥用:
- 对特殊对象调用
instanceof操作时,可以触发控制的回调函数 - 攻击者通过控制回调函数运行自定义JavaScript代码
- 对特殊对象调用
-
内存释放原语:
- 当回调函数被调用时,关键字"this"指向
eObj.prototype - 将其设置为null并触发垃圾回收可释放对象内存
- 系统需要在释放内存前清除整个变量块才能成功利用
- 当回调函数被调用时,关键字"this"指向
补丁分析
微软发布的补丁主要修改了NameTbl::InvokeInternal函数:
-
增加了对
GCRoot::~GCRoot(GCRoot析构函数)的调用次数- 未修补版本:调用一次(由编译器内联)
- 修补后版本:调用两次
-
关键修改点:
- 将堆栈地址(局部变量)保存到GCRoot对象列表
- 确保垃圾回收器跟踪这些指针
漏洞利用步骤
概念验证(PoC)实现
-
堆准备阶段:
// 设置多个数组预分配数据,准备堆状态 var sprayArrays = new Array(); for (var i = 0; i < 0x100; i++) { sprayArrays[i] = new Array(0x200); } -
触发漏洞:
// 声明自定义回调并触发漏洞 var callback = function() { this.prototype = null; // 将prototype设为null CollectGarbage(); // 触发垃圾回收 }; var eObj = new Enumerator([1,2,3]); eObj.item.call({}, callback); -
内存回收利用:
// 释放对象数组以进行回收操作 for (var i = 0; i < 0x100; i++) { sprayArrays[i] = null; } // 分配字符串覆盖释放的内存 var reallocPropertyName = "AAAAAAAA" + "\x03\x00\x00\x00" + "\x39\x05\x00\x00"; -
类型混淆利用:
// 利用释放后重用(UAF)实现类型混淆 var obj = {}; obj[reallocPropertyName] = 1; // 此时可读取或修改本应不可访问的内存
防御措施
McAfee修复方案
McAfee提供了以下产品的防护方案:
- 端点安全(ENS)
- ENS自适应防护(ENS-ATP)
- 主机入侵防御(HIPS)
- VirusScan Enterprise(VSE)
- WSS
通用防护建议
-
及时更新:
- 立即应用微软发布的安全补丁
- 保持所有安全产品更新至最新版本
-
纵深防御:
- 使用端点安全产品检测和阻止此类威胁
- 启用缓冲区溢出保护规则
-
缓解措施:
- 限制ActiveX控件执行
- 启用增强的受保护模式(Enhanced Protected Mode)
- 使用EMET或其他漏洞利用缓解技术
总结
CVE-2018-8653展示了脚本引擎漏洞的严重性和快速武器化的可能性。攻击者可以通过网页或JavaScript文件在未修补系统上执行任意代码。尽管微软已修复此漏洞,但未修补系统仍面临高风险。
关键要点:
- 理解Enumerator对象和ActiveXObject交互的异常行为
- 掌握通过instanceof操作触发非常规代码路径的技术
- 认识垃圾回收机制在漏洞利用中的关键作用
- 实施多层次防御策略应对此类威胁