GitHub Advisoryadvisory · npm
GHSA-f46r-rw29-r322 React Router allows a DoS via cache poisoning by forcing SPA mode
HIGH
Official page ↗
- Aliases
- CVE-2025-43864
- 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:N/A:H
- Weaknesses
- CWE-755
- Reviewed
- 2025-04-24
Affected packages
• npm react-router: >= 7.2.0, < 7.5.2 → fixed in 7.5.2
Description
Summary
After some research, it turns out that it is possible to force an application to switch to SPA mode by adding a header to the request. If the application uses SSR and is forced to switch to SPA, this causes an error that completely corrupts the page. If a cache system is in place, this allows the response containing the error to be cached, resulting in a cache poisoning that strongly impacts the availability of the application.
Details
The vulnerable header is `X-React-Router-SPA-Mode`; adding it to a request sent to a page/endpoint using a loader throws an error. 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. Send a request to the endpoint using the loader (`/ssr` in our case) adding the following header:
```
X-React-Router-SPA-Mode: yes
```
Notice the difference between a request with and without the header;
Normal request
With the header
Impact
If a system cache is in place, it is possible to poison the response by completely altering its content (*by an error message*), strongly impacting its availability, making the latter impractical via a cache-poisoning attack.
Credits
• Rachid Allam (zhero;)
• Yasser Allam (inzo_)
Related
Alias · CVE (1)
- CVE-2025-43864 React Router is a router for React. vulnerability
Weakness · CWE (1)
- CWE-755 Improper Handling of Exceptional Conditions weakness
References
- https://github.com/remix-run/react-router/security/advisories/GHSA-f46r-rw29-r322 web
- https://nvd.nist.gov/vuln/detail/CVE-2025-43864 advisory
- https://github.com/remix-run/react-router/commit/c84302972a152d851cf5dd859ff332b354b70111 web
- https://github.com/remix-run/react-router package
- https://github.com/remix-run/react-router/blob/e6c53a0130559b4a9bd47f9cf76ea5b08a69868a/packages/react-router/lib/server-runtime/server.ts#L407 web