微软Office代码执行漏洞分析(CVE-2021-38646):深入Borland数据库引擎的漏洞挖掘
微软Office代码执行漏洞分析(CVE-2021-38646)
引言
在发现小型DBF解析器和Apache OpenOffice中的内存破坏漏洞后,我将目标转向了微软的桌面数据库引擎。这次研究采用了基于覆盖率的黑盒模糊测试技术,结合逆向工程方法。
Windows桌面数据库驱动简史
1990年Windows 3.0发布后,应用程序对持久化存储的需求催生了ISAM(索引顺序访问方法)技术。1992年微软推出ODBC 1.0,其中包含Jet引擎(msxbde40.dll)用于DBF格式支持。1996年推出的OLEDB API进一步扩展了数据库访问能力。
Jet引擎模糊测试
我使用WinAFL对Microsoft Jet OLEDB Provider进行模糊测试,构建了基于CDataSource和CCommand类的测试工具链。由于环境兼容性问题,最终转向测试Microsoft Access数据库引擎(acecore.dll)及其xBASE ISAM组件(acexbe.dll)。
"幽灵崩溃"之谜
模糊测试过程中出现了奇怪的间歇性崩溃现象,最终发现是安装的某办公软件自带Borland数据库引擎(BDE)导致。逆向分析显示acexbe.dll会检查注册表项Software\\Borland\\Database Engine
,若存在则加载IDAPI32.DLL。
Borland数据库引擎历史
1980年代dBase是早期开发者的重要工具,1991年Borland收购其母公司。随着微软收购FoxPro并推出Access,Borland最终在竞争中败北。但其技术遗产仍存在于现代软件中。
漏洞分析
发现两类关键崩溃:
- 二次EIP覆盖:通过控制lengthOfEachRecord字段触发内存破坏,但无法稳定控制执行流
- 写原语漏洞:rep movs指令实现任意内存写入,配合ROP链可执行代码
漏洞利用挑战
虽然IDDBAS32.dll没有DEP/ASLR保护,但Office自2013年起强制启用ASLR。最终通过ActiveX脚本环境绕过ASLR保护,成功实现稳定利用。
时间线
- 6月25日:初始披露
- 7月16日:漏洞确认
- 9月14日:补丁发布
结论
这个跨越三十年的漏洞案例展示了未维护第三方组件的安全风险,也证明了覆盖率引导模糊测试在现代漏洞研究中的价值。历史遗留代码可能成为攻击者通往关键系统的秘密通道。
桌面安全研究人员应当警惕软件供应链中潜藏的"古董"组件,它们往往成为安全防御体系中最薄弱的环节。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
公众号二维码