不存在的浏览器安全漏洞:PDF 中的 JavaScript
有一种相当常见的安全漏洞报告形式:”我可以在 PDF 文件中放入 JavaScript,而且它还能运行!”
例如,用 Chrome 浏览器打开此 PDF 文件,您可以看到显示的 alert(1)
消息:
在 PDF 中支持 JavaScript 是 PDF 渲染软件(包括 Chrome 和 Edge 等常用浏览器)开发人员的设计和期望。与 HTML 相似,PDF 文件是一种活动内容类型,可能包含 JavaScript。
定期有经验不足的安全研究人员兴奋地针对浏览器提出这个问题,而这些报告很快就会 “By Design “得到解决。
经验丰富的安全研究人员会定期针对愿意托管或传输不受信任的 PDF 文件的网站和应用程序提出此问题,认为这代表了 “存储的跨站脚本漏洞“。
他们的困惑在某种程度上是可以理解的–如果一个网站允许用户上传包含脚本的 HTML 文档,然后从其域中提供该 HTML 文档,那么其中的任何脚本都将在提供域的安全环境中运行。这就是典型的存储 XSS 攻击,它带来了安全威胁,因为嵌入的脚本可以窃取或操纵 cookie(通过访问 document.cookie 属性)、操纵网络平台存储(IndexedDB、localStorage 等)、从第三方发起请求伪造攻击等。
PDF 文档的情况则截然不同。
Chrome 浏览器安全常见问题解答对这一限制进行了简洁的描述,指出与 DOM 为 HTML 文档提供的绑定相比,为 PDF 提供的绑定更为有限,而且 PDF 也不会根据其提供服务的域获得任何环境授权。
这意味着什么?这意味着,虽然 PDF 中的 JavaScript 可以运行,但脚本运行的环境是有限的:无法访问 cookie 或存储空间,提出请求的能力也非常有限(例如,您可以在其他地方浏览文档窗口,但仅此而已),而且无法使用 HTML 文档对象模型 (DOM) 对象(如文档、窗口、导航器等)所提供的 Web 平台强大功能。虽然 JavaScript 在 PDF 中的功能极其有限,但并非不存在,PDF 引擎软件必须注意避免引入新功能,以免破坏 PDF 处理代码的安全假设。
限制 PDF 中的 JavaScript
工程师在处理 PDF 中的 JavaScript 时应注意尊重应用程序/用户设置。例如,如果用户关闭了某个网站的 JavaScript,那么该网站上托管的 PDF 也不应允许使用脚本。这在 Chrome 浏览器和 Edge 中均可正常运行。
令人有些意外的是,Firefox 的全局 javascript.enabled 开关并不影响其 PDF 查看器内的脚本:
相反,Firefox 提供了一个单独的 pdfjs.enableScripting
偏好设置,可以通过 about:flags
页面进行配置。
Chromium 目前会忽略 PDF 响应中的 Content-Security-Policy
标头,因为它会使用网络技术来渲染 PDF 文件,而这些技术可能会被 CSP 禁止,从而导致用户困惑和网络开发人员烦恼。
本文文字及图片出自 Browser Security Bugs that Aren’t: JavaScript in PDF
你也许感兴趣的:
- ECMAScript 2024新特性
- 【外评】JavaScript 变得很好
- 一长串(高级)JavaScript 问题及其解释
- Python 里的所有双下划线(dunder)方法、函数和属性
- 【程序员搞笑图片】JavaScript
- JavaScript 膨胀于 2024 年
- 解码为什么 JS 中的 0.6 + 0.3 = 0.89999999999999 以及如何解决?
- 用 JavaScript 实现的 17 个改变世界的方程式
- 【译文】Dropbox:我们如何将 JavaScript 打包程序的大小减少 33% 的
- JavaScript 前端框架维护者对 2024 年的预测
你对本文的反应是: