前言
前几天才写了一篇文章[1],关于数据包中referer头信息泄露的问题。能窃取referer头中的敏感信息。窃取关键是要启用unsafe-url,这里就是前端开发的设置问题了。最近爆出了一个Chrome浏览器的漏洞,就是去窃取用户referer头中的敏感信息,不需要前端启用了unsafe-url也可以实现敏感信息的窃取。最初我在X上看到了提出这个问题的推文[2],当时好像是说不算是漏洞问题,后面Google给了CVE,定级为CVE-2025-4664。下面我们来复现一下这个漏洞。
漏洞描述
Google 发布公告称**Google Chrome 跨源数据泄露漏洞(CVE-2025-4664)**存在在野利用,该漏洞源于 Google Chrome 加载程序中的策略执行不足,远程攻击者利用此漏洞可使浏览器发起请求时携带完整的URL,导致敏感信息泄露[3]。目前该漏洞已发现在野利用。
鉴于此漏洞影响范围较大,建议客户尽快做好自查及防护。⚠️⚠️⚠️
漏洞影响版本
Google Chrome(Windows/Mac) < 136.0.7103.113/.114
Google Chrome(Linux) < 136.0.7103.113
漏洞复现
还是按照之前写的[1:1]。
A为URL:http://127.0.0.1:3000/index.html?token=xxxxxxB为这个index.html页面,其中img标签的src属性我们可控,其页面不启用unsafe-url。
攻击效果: 受害者会带着自己的
token,就是这里的A,访问到页面B,B中的img标签的src属性我们可控,设置为攻击者监听数据包的脚本,监听的数据包中包含有敏感信息的referer,进而实现信息的窃取。
B的index.html页面内容如下,其中的http://127.0.0.1:3001/image为攻击者嵌入的监听数据包的恶意URL,这里为了演示方便我使用了本地的127.0.0.1:3001表示。这里页面没启用unsafe-url,正常是窃取不到referer头中的敏感信息的。
1 |
|
对于http://127.0.0.1:3001/image的后端代码main.js如下:
1 | const express = require('express') |
本地使用python3 -m http.server 3000启用一个web服务,把B这个index.html页面放在当前启用web服务的目录下,受害者访问A,即http://127.0.0.1:3000/index.html?token=secret,表示受害者正常访问页面,到达了B。
攻击者在自己的vps上node main.js运行恶意的脚本,即得到这里的http://127.0.0.1:3001/image。将这个恶意的URL,嵌入到B这个正常安全的页面中去,前提是B的src属性是攻击者可控的。
受害者使用不安全的Google Chrome浏览器版本,去访问安全Referer-Policy配置的 B页面时,就会导致referer头中的敏感信息泄露。

结果如下:



我使用的Chrome版本如下,低于安全版本。
