IPBUF安全漏洞报告
English
CVE-2025-59057 CVSS 7.6 高危

CVE-2025-59057 React Router Framework Mode XSS漏洞

披露日期: 2026-01-10

漏洞信息

漏洞编号
CVE-2025-59057
漏洞类型
XSS跨站脚本
CVSS评分
7.6 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
需要交互 (UI:R)
影响产品
@remix-run/react, react-router

相关标签

XSS跨站脚本React Router@remix-run/reactSSRFramework Modeld+jsonCVE-2025-59057

漏洞概述

CVE-2025-59057是React Router框架中的一个存储型跨站脚本(XSS)漏洞。该漏洞影响@remix-run/react 1.15.0至2.17.0版本以及react-router 7.0.0至7.8.2版本。漏洞存在于Framework Mode下的meta()和<Meta> API中,当这些API生成script:ld+json标签时,如果使用未经过滤的用户输入数据,可能导致任意JavaScript代码执行。此漏洞仅影响使用Framework Mode的应用程序,不影响使用Declarative Mode(<BrowserRouter>)或Data Mode(createBrowserRouter/<RouterProvider>)的应用。由于该漏洞在服务器端渲染(SSR)过程中触发,攻击者可以通过在ld+json标签中注入恶意脚本,在用户访问页面时执行任意JavaScript代码,从而窃取用户会话、修改页面内容或进行其他恶意操作。CVSS 3.1评分7.6,属于高危漏洞。

技术细节

该XSS漏洞的根本原因在于React Router的meta()函数在生成ld+json脚本标签时,未对输出内容进行适当的HTML转义处理。攻击者可以通过构造特殊的payload,当这些payload被传递给meta()函数用于生成ld+json数据时,会被直接嵌入到HTML响应中。在SSR(服务器端渲染)过程中,浏览器会解析script标签内的ld+json内容,如果其中包含恶意注入的脚本代码,将被执行。具体来说,攻击者可以利用meta()函数中未经过滤的用户可控数据(如URL参数、数据库内容等)注入<script>标签或事件处理器属性。例如,通过在ld+json的@type字段中注入javascript:协议或使用事件处理器属性(如onerror),可以在页面加载时触发恶意脚本执行。由于漏洞在Framework Mode下触发,开发者应特别注意任何用于meta标签的用户输入都必须经过严格的输入验证和HTML编码。

攻击链分析

STEP 1
Reconnaissance
攻击者识别目标应用使用React Router Framework Mode,并发现meta()函数处理用户输入
STEP 2
Payload Crafting
攻击者构造恶意XSS payload,如<img src=x onerror=alert(document.cookie)>
STEP 3
Injection
通过用户资料、评论、URL参数等渠道将恶意payload注入到系统数据库或请求参数中
STEP 4
SSR Processing
服务器端渲染时,meta()函数读取未经过滤的用户数据,生成script:ld+json标签
STEP 5
Script Execution
用户浏览器解析ld+json内容时,恶意脚本被执行,导致Cookie窃取、会话劫持或其他恶意操作

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// Example PoC for CVE-2025-59057 // This demonstrates XSS via meta() function in React Router Framework Mode // Vulnerable code pattern: import { useLoaderData } from '@remix-run/react'; export const meta = ({ data }) => { // VULNERABLE: Direct use of user input without sanitization return [ { 'script:ld+json': { '@context': 'https://schema.org', '@type': 'Person', name: data?.userName, // User-controlled input without sanitization description: data?.userBio } } ]; }; export const loader = async () => { return { userName: '<img src=x onerror=alert(document.cookie)>', userBio: 'Test user' }; }; // Attack Vector: // 1. Attacker injects malicious payload as userName // 2. The payload is reflected in script:ld+json tag without encoding // 3. Browser parses the ld+json and executes injected JavaScript // Safe code pattern (after fix): import DOMPurify from 'dompurify'; export const meta = ({ data }) => { return [ { 'script:ld+json': { '@context': 'https://schema.org', '@type': 'Person', name: DOMPurify.sanitize(data?.userName || ''), description: DOMPurify.sanitize(data?.userBio || '') } } ]; };

影响范围

@remix-run/react >= 1.15.0 且 < 2.17.1
react-router >= 7.0.0 且 < 7.9.0

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时缓解措施:1) 对meta()函数中使用的所有数据进行严格的输入验证,拒绝包含HTML标签、JavaScript协议或事件处理器属性的输入;2) 使用HTML实体编码函数对用户数据进行转义处理;3) 实施严格的内容安全策略(CSP)头部,限制脚本执行;4) 避免在Framework Mode下使用用户可控数据生成ld+json标签,改用静态数据或在后端进行严格的过滤处理。

参考链接

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