关键信息 漏洞类型: UXSS (Universal Cross-Site Scripting) 优先级: P1 (高优先级) 严重程度: S2 (中等偏高) 状态: Fixed (已修复) 上报人: ro...@robwu.nl 归类于: Security_Impact-Stable CVE状态: 已提交CVE描述 漏洞详情 当 Chrome 启动时若带有 标志,就会在指定端口启用 HTTP+WebSocket 服务器。这个 WebSocket 服务器提供了对远程调试协议的访问权限,这允许对整个浏览器进行控制。这会导致以下安全漏洞: 对任意网站的脚本访问权限 读取本地文件的能力 写入本地文件的能力 启动外部程序的能力 要从一个网页使用远程调试协议,攻击者需要以下内容: HTTP/WebSocket 服务器的端口。 用于识别远程调试目标的 GUID。 攻击路径描述 攻击者可以轻易地找到端口,例如,通过检查 DevTools 服务器上静态图像资源是否可以加载。 而且,GUID 可以通过 HTTP 服务器查找。因此,即使 HTML 和 JSON 的响应被同源策略保护,攻击者仍然可以通过 DNS 重绑定攻击来访问内容。 攻击场景简述 用户使用 Chrome(可能是通过 Puppeteer、Selenium 等方式)时,带有 标志。 用户访问一个攻击者控制的页面(例如,作为嵌在页面框架内的恶意广告)。 攻击者在一分钟后获得用户浏览器的完全控制权,期间无需用户进一步互动。 技术细节 相关链接: - Puppeteer库 - Puppeteer下载包 - Chrome通过Puppeteer开发博客 Chrome版本: - 64.0.3282.167 (稳定版) 及 66.0.3351.0 (金丝雀版)。 复现步骤 需要 Linux 和 Node.js 环境,来进行包含两个文件的自我科学概念验证(PoC): 下载所附文件(index.html 和 server.js)。 选择使用的端口,启用远程调试启动 Chrome,例如: 启动模拟攻击者的服务器。