### 关键漏洞信息 #### 漏洞概述 - **类型**: 客户端路径遍历漏洞 - **影响版本**: >=3.6.0 =4.0.0 =3.19.0 =4.1.0 - **严重性**: 低 (CVSS v3 基本指标: 3.1/10) #### 技术细节 - **描述**: 在 Nuxt 的 Island 负载恢复机制中,攻击者可以通过操纵客户端请求到同一应用域内的不同端点来利用此漏洞。 - **流程**: 1. 预渲染时,API 端点返回包含恶意 `_nuxt_island` 对象的用户控制数据。 2. 数据通过 `devalue.stringify` 序列化并存储在预渲染页面中。 3. 客户端导航到预渲染页面时,`devalue.parse` 反序列化负载。 4. Island 恢复器尝试获取 `/__nuxt_island/s{key}.json`,其中 `key` 可能包含路径遍历序列。 #### 利用前提条件 - 必须使用 Nuxt 的预渲染功能 (`nitro.prerender`)。 - 攻击者必须能够控制 API 端点的响应内容。 - 用户必须导航到预渲染页面(而不是初始 SSR 水合期间)。 #### 影响评估 - **有限影响**: 由于高度特定的前提条件,漏洞严重性较低。 - **无直接数据泄露**: 漏洞不会直接暴露敏感数据。 - **仅客户端**: 请求来自客户端,而非服务器。 #### 缓解措施 - **立即更新**: 更新到 Nuxt 3.19.0+ 或 4.1.0+。 - **审查预渲染页面**: 审查任何获取外部或用户控制数据的预渲染页面。 - **临时变通方法**: - 禁用获取用户控制数据的页面的预渲染。 - 在预渲染期间使用的 API 端点上实施严格的输入验证。 - 在预渲染期间对 API 响应结构使用白名单。 #### 修复详情 - **修复**: 在 `revive-payload.server.ts` 中实现了对 Island 键的验证。 - Island 键必须匹配模式 `/^[a-z][a-z\d]*_[a-z\d]+$/i`。 - 最大长度为 100 个字符。 - 防止路径遍历和特殊字符。