ZDI年度五大漏洞第五弹—ZDI-18-1372,巧妙的绕过
字数 1260 2025-08-29 08:31:41
Adobe Reader JavaScript API 绕过漏洞分析 (ZDI-18-1372)
漏洞概述
本漏洞编号为ZDI-18-1372,涉及Adobe Reader DC中的JavaScript API安全限制绕过问题。攻击者可以利用此漏洞绕过Adobe设计的安全限制,触发Onix解析引擎处理恶意索引文件,可能导致远程代码执行。
技术背景
Adobe Reader的Catalog插件暴露了一组JavaScript API,这些API本应受到严格的安全限制。Adobe在修补相关漏洞后,不仅修复了解析漏洞,还禁用了Catalog插件中能够触发文件格式解析操作的相关JavaScript API。
漏洞发现过程
- 研究人员最初发现Catalog插件存在攻击面
- Adobe修补后,解析代码仍然启用但触发方式受限
- 研究人员Sebastian Apelt (@bitshifter123)发现通过Search插件可绕过限制
漏洞细节
受影响API
search对象的query方法有四种调用方式:
search.query(<word>)- 无安全限制,但不会解析索引文件search.query(<word>, "Index", <idx-path>)- 有安全限制search.query(<word>, "Folder", <idx-path>)- 有安全限制search.query(<word>, "ActiveDoc")- 关键绕过点
绕过机制
使用"ActiveDoc"参数时,Adobe Reader会:
- 将嵌入式索引文件自动保存到
C:/Users/<user>/AppData/LocalLow/Adobe/Acrobat/DC/Search目录 - 开始解析该索引文件
- 完全绕过Adobe设计的安全限制
验证步骤
- 清除缓存文件:删除
C:\Users\<user>\AppData\LocalLow\Adobe\Acrobat\DC\Search下的所有文件 - 启动Acrobat Reader DC并附加调试器
- 在
onix32!ixCreateIndexManager方法设置断点 - 打开PoC PDF文件
- 观察四种调用方式的行为差异
漏洞影响
- 攻击者可构造恶意PDF文件触发索引文件解析
- 可能导致远程代码执行
- 绕过Adobe设计的安全限制机制
修复方案
Adobe最终采取的修复措施:
- 完全禁用相关解析代码
- 虽然影响性能,但彻底消除了攻击面
技术总结
- 供应商认为已修复的攻击面可能仍存在绕过方式
- 安全限制的实现需要全面考虑所有可能的调用路径
- 有时完全禁用有问题的功能是最有效的安全修复方式
防御建议
- 及时更新Adobe Reader到最新版本
- 禁用不必要的JavaScript功能
- 监控异常PDF文件行为
参考资源
- 原始研究博客
- ZDI漏洞公告
- Adobe安全公告
附录:PoC关键代码
// 四种search.query调用方式示例
search.query("test"); // 方式1
search.query("test", "Index", "path"); // 方式2
search.query("test", "Folder", "path"); // 方式3
search.query("test", "ActiveDoc"); // 方式4 - 可触发漏洞
注意:实际利用需要构造嵌入式恶意索引文件,此处仅展示触发机制的关键代码部分。