深入解析IE CSS漏洞临时修复方案:MSRC发布安全建议2488013更新

微软安全响应中心针对公开披露的IE CSS递归样式表漏洞发布紧急修复方案,通过修改MSHTML.DLL内存加载机制阻止攻击代码执行,包含详细汇编级实现原理和安全验证机制。

安全建议2488013新增临时修复方案

我们已更新针对公开披露的Internet Explorer CSS漏洞的安全建议2488013。更新内容显示:目前野外已出现利用该漏洞的有限攻击活动。该建议同时包含新的临时修复方案,可在安全更新发布前为计算机提供保护。此修复方案不同于我们常规推荐的解决方案,因此我们在此提供更详细的技术说明。

漏洞回顾

该漏洞要求攻击者提供包含通过@import命令自引用的CSS样式表。当Internet Explorer尝试加载此递归样式表时,会造成内存损坏,可能导致任意代码执行。由于无法选择性禁用此功能,目前最佳解决方案是启用EMET来阻止已知攻击向量的成功利用。

新修复方案

该修复方案为MSI安装包(Microsoft “FixIt”),利用Windows应用程序兼容性工具包,在每次Internet Explorer加载MSHTML.DLL时进行微小修改。此修改使IE在检测到CSS样式表与其加载源具有相同URL时拒绝导入。简言之,修复方案会插入检查机制,在检测到递归加载样式表时中止加载过程。

重要提示:只有在安装最新安全更新(包括2010年12月14日发布的MS10-090)后,此修复方案才能生效。

安装链接:http://download.microsoft.com/download/E/5/6/E56904FD-3370-479D-B14A-E5481222C59C/MicrosoftFixit50591.msi
卸载链接:http://download.microsoft.com/download/3/3/3/33346329-840F-4B9F-B54E-9AE1114EA331/MicrosoftFixit50592.msi

修复方案实现原理

Internet Explorer使用mshtml!CStyleSheet类实例表示CSS样式表。CStylesheet Create()方法在每个样式表导入时被调用,可访问父/子样式表的URL。为获取子样式表绝对URL,原代码调用ExpandUrlWithBaseUrl函数:

1
2
3
4
mshtml!CStyleSheet::Create+0x197:
6ebb7065 50              push    eax
6ebb7066 8d95f0dfffff    lea     edx,[ebp-2010h]
6ebb706c e8326a1a00      call    mshtml!ExpandUrlWithBaseUrl (6ed5daa3)

修复方案将此函数调用替换为自定义函数,新函数执行以下操作:

  1. 调用ExpandUrlWithBaseUrl()转换相对URL为绝对URL
  2. 若调用失败则返回错误码
  3. 调用_wcsicmp()比较父子样式表绝对URL
  4. 若相同则返回80004005h错误码,不同则返回0

新函数通过重写进程关闭时清理调试资源的函数实现:将其首条指令改为ret,使正常调用直接返回,然后实现修复检查逻辑。

修复后的代码变化

应用修复后,CStyleSheet::Create()相关代码变为:

1
2
3
4
mshtml!CStyleSheet::Create+0x197:
6ebb7065 50              push    eax
6ebb7066 8d95f0dfffff    lea     edx,[ebp-2010h]
6ebb706c e8a0f51b00      call    mshtml!DeinitScriptDebugging+0x1 (6ed76611)

DeinitScriptDebugging()函数被修改为:

1
2
3
4
mshtml!DeinitScriptDebugging:
6ed76610 c3              ret
6ed76611 50              push    eax
[...完整汇编代码...]

安全验证机制

修复方案在修改MSHTML.DLL前执行以下检查:

  • 文件版本验证
  • 校验和验证
  • 待替换汇编指令精确匹配 确保不会错误应用到其他版本MSHTML.DLL,且修改结果符合预期。未通过所有检查的DLL将不会被修改。

性能影响与部署建议

应用此修复方案会使IE启动时间增加约150毫秒。安装最终安全更新后应卸载此修复方案。建议部署前在企业内部业务应用程序中进行测试,最终安全更新将经过全面测试并适合广泛部署。

CSS样式表循环处理

经测试确认,A.css导入B.css再导入A.css的循环配置不会触发漏洞,因此仅需检查子样式表与父样式表绝对URL不同即可有效阻断攻击。

本文提供信息"按原样"提供,不提供任何担保,也不授予任何权利。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计