# Astro 服务器岛屿反射型XSS漏洞
## 概述
Astro 是一个 Web 开发框架。在版本 5.15.8 之前,当使用“server islands”功能时,存在一个反射型 XSS(跨站脚本攻击)漏洞。
## 影响版本
所有使用了 server islands 功能且版本低于 5.15.8 的 Astro 应用。
## 细节
该漏洞存在于 server islands 特性中,即使组件模板未显式设计为可交互,攻击者仍可通过构造恶意请求触发反射型 XSS,执行恶意脚本。
## 影响
攻击者可能利用该漏洞在用户浏览器中执行任意脚本,窃取敏感信息、劫持会话或发起其他恶意操作。
是否为 Web 类漏洞: 未知
判断理由:
| # | POC 描述 | 源链接 | 神龙链接 |
|---|---|---|---|
| 1 | Astro 5.15.8 contains a reflected XSS caused by improper handling of server islands feature, letting remote attackers execute scripts, exploit requires use of server islands in the application. | https://github.com/projectdiscovery/nuclei-templates/blob/main/http/cves/2025/CVE-2025-64764.yaml | POC详情 |
标题: Reflected XSS via the server islands feature · Advisory · withastro/astro · GitHub -- 🔗来源链接
标签:x_refsource_CONFIRM
神龙速读:
### 漏洞关键信息
- **漏洞类型**: Reflected XSS
- **漏洞名称**: Reflected XSS via the server islands feature
- **受影响版本**: <= 5.15.6
- **已修复版本**: 5.15.8
- **CVE ID**: CVE-2025-64764
- **严重性**: High (7.1/10)
- **CVSS v3 基础指标**
- **攻击向量**: Network
- **攻击复杂性**: Low
- **所需权限**: None
- **用户交互**: Required
- **影响范围**: Unchanged
- **机密性影响**: Low
- **完整性影响**: High
- **可用性影响**: None
- **弱点**: CWE-80
- ** credits**: cold-try
- **报告者**:冷试图
### 漏洞描述
- **漏洞总结**: 针对目标应用程序,即使在组件模板中没有预期的情况下,使用服务器岛功能时也可能会出现反射型XSS漏洞。
- **漏洞细节**: 服务器岛在其独立隔离的上下文环境中运行,使用 `/server-islands/[name]` 路径填充页面。该路径可通过GET或POST调用,需要3个参数:
- `e`: 要导出的组件
- `p`: 传输的属性,加密
- `s`: 用于插槽的值
- **插槽机制**: 插槽是外部HTML内容的占位符,默认情况下,如果组件模板支持它,插槽允许代码注入。问题在于:独立于组件模板使用,即使模板完全为空,也能够注入包含XSS的有效负载。
- **漏洞原理**: 通过`_server-islands/[name]` 端点的`e`参数默认值,或者通过`file`和`src`类型参数,可以将字符串值设置为岛屿文件的绝对路径,进而允许执行XSS。
- **原因分析**: 使用了`markHTMLString`,这使得即使组件模板原始是空的或未提供使用插槽的方式,也允许任意XSS载荷的注入。
### 概念证明
- 使用最小的存储库演示PoC,包含最新版本的Astro(5.15.6)与无内容的组件和服务器岛。
- 访问特定URL(如示例中的`http://localhost:4321/_server-islands/ServerTime? e=file&p=&s=%7B%22`以触发弹出窗口,证明反射型XSS漏洞的存在。
- 关键在于参数`e` 被设置为 `file` 值和`childSlots`被作为子元素注入。
标题: Merge commit from fork · withastro/astro@790d942 · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
从这个GitHub页面截图中,我们可以获取到以下关于漏洞的关键信息:
- **项目仓库**:此截图显示的是withastro/astro仓库下的一个提交,该仓库与astro有关,是公开的。
- **提交ID与时间**:提交ID为790d942,提交时间是昨日(相对时间,具体截图时间未知)。
- **提交作者与验证状态**:提交作者是delucis,并且该提交通过了GitHub的验证,表示提交者身份可信。
- **提交摘要**:这是一个merge commit,来自fork,表示这个提交内容合并了从另一个分支或仓库中的更改。
- **代码变更**:此提交中修改了1个文件,即packages/astro/src/template/4xx.ts,共添加了3行,删除了2行。特别地,它是关于trailingSlashMismatchTemplate函数的修改,其中对`corrected`变量的初始化进行了变更,原逻辑基于`trailingSlash`的值直接返回`pathname`或处理后的`pathname`,而修改后加入了`escape`函数,并对条件判断做了微小的调整。
- **文件变更详情**:从截图中的代码比较视图可以看出具体的代码变动行及内容,包括对函数内部某个逻辑分支的调整,可能与url的逃生、路径规范相关。
- **版本信息**:提到了与版本比较相关的信息,如astro@5.15.7和astro@5.15.6,这可能表示该修改与特定版本的兼容性有关。
- **安全性关注点**:涉及url处理和路径操作的代码通常需要特别注意安全性问题,例如路径穿越、跨站脚本(XSS)等。当前修改虽然对`pathname`使用了`escape`函数,但需要查看`escape`函数的具体实现以确认其是否足够安全。
- **影响范围**:鉴于修改在4xx错误处理模板中,此变更可能影响所有在4xx状态码下使用该模板的页面,意味着这是一个公共服务代码,修改需要小心,确保没有引入新的安全漏洞。
请注意,以上信息基于提供的截图分析得出,关于漏洞的具体判断需要对上下文和完整代码进行更详细的审查。
暂无评论