GitHub Advisoryadvisory · npm

GHSA-f46r-rw29-r322 React Router allows a DoS via cache poisoning by forcing SPA mode

HIGH Published 2025-04-24 Modified 2025-04-25 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)

Weakness · CWE (1)

  • CWE-755 Improper Handling of Exceptional Conditions weakness

References