简介
CVE-2017-11882属于缓冲区溢出类型漏洞,造成漏洞的原因是,EQNEDT32.EXE(微软office自带公式编辑器)进程在读入包含MathType的ole数据时,在拷贝公式字体名称(Font Name数据)时没有对名称长度进行校验,导致缓冲区溢出。通过覆盖函数的返回地址,可执行任意代码。
深究其中的具体原因还要对ole文件的数据格式以及EQNEDT32.EXE的文件格式进行了解:
ole文件
首先我们需要了解的是什么是OLE,OLE代表的是链接与嵌入(Object Linking and Embedding),用我们日常得话来讲,就是用户在使用Office文档的过程中的一些数据的插入,可以是图片音乐之类的。而且需要注意的是OLE对象是基于COM组件的,也就是说OLE是一个COM组件的子集。这也就导致了在带来极大便利的同时,也给黑客带来了可乘之机,事实上Office的很多0day漏洞也都是由于OLE对象引起或者是基于对OLE对象的利用导致的。抛开题外话不谈,我们专注于这个漏洞。
事实上,不同的文件格式会使用不同版本的OLE文件格式:
OLE格式的结构一共有两种:OLE1.0和OLE2.0 详细情况可以参考微软的官方文档: