GitHub Advisoryadvisory · npm

GHSA-cpj6-fhp6-mr6j React Router allows pre-render data spoofing on React-Router framework mode

HIGH Published 2025-04-24 Modified 2026-01-16 Official page ↗
Aliases
CVE-2025-43865
Ecosystem
npm
Packages
react-router
Severity
High
CVSS vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:H
Weaknesses
CWE-345
Reviewed
2025-04-24

Affected packages

• npm react-router: >= 7.0.0-pre.0, < 7.5.2 → fixed in 7.5.2

Description

Summary After some research, it turns out that it's possible to modify pre-rendered data by adding a header to the request. This allows to completely spoof its contents and modify all the values ​​of the data object passed to the HTML. Latest versions are impacted. Details The vulnerable header is `X-React-Router-Prerender-Data`, a specific JSON object must be passed to it in order for the spoofing to be successful as we will see shortly. Here is the vulnerable code : To use the header, React-router must be used in Framework mode, and for the attack to be possible the target page must use a loader. Steps to reproduce Versions used for our PoC: • "@react-router/node": "^7.5.0", • "@react-router/serve": "^7.5.0", • "react": "^19.0.0" • "react-dom": "^19.0.0" • "react-router": "^7.5.0" 1. Install React-Router with its default configuration in Framework mode (https://reactrouter.com/start/framework/installation) 2. Add a simple page using a loader (example: `routes/ssr`) 3. Access your page (*which uses the loader*) by suffixing it with `.data`. In our case the page is called `/ssr`: We access it by adding the suffix `.data` and retrieve the data object, needed for the header: 4. Send your request by adding the `X-React-Router-Prerender-Data` header with the previously retrieved object as its value. You can change any value of your `data` object (do not touch the other values, the latter being necessary for the object to be processed correctly and not throw an error): As you can see, all values ​​have been changed/overwritten by the values ​​provided via the header. Impact The impact is significant, if a cache system is in place, it is possible to poison a response in which all of the data transmitted via a loader would be altered by an attacker allowing him to take control of the content of the page and modify it as he wishes via a cache-poisoning attack. This can lead to several types of attacks including potential stored XSS depending on the context in which the data is injected and/or how the data is used on the client-side. Credits • Rachid Allam (zhero;) • Yasser Allam (inzo_)

Related

Alias · CVE (1)

Weakness · CWE (1)

  • CWE-345 Insufficient Verification of Data Authenticity weakness

References