highCVSS 7.1Vulnerability

GHSA-h5x8-xp6m-x6q4

## Arbitrary Cloudinary API Parameter Signing in @jhb.software/payload-cloudinary-plugin ### Summary `@jhb.software/payload-cloudinary-plugin` v0.3.4 exposes a server-side signing endpoint (`POST /api/cloudinary-generate-signature`) that passes attacker-supplied `paramsToSign` directly to `cloudinary.utils.api_sign_request()` without any allowlist, key filtering, or policy enforcement. Any authenticated Payload user can obtain a cryptographically valid Cloudinary HMAC-SHA1 signature for arbitrary upload parameters — including `overwrite=true`, `type=private`, `notification_url`, and path-traversal folder values — enabling unauthorized asset replacement, access-control bypass, and potential SSRF within the configured Cloudinary account. ### Details When `clientUploads: true` is configured, the plugin registers a signing handler at `cloudinary/src/index.ts:74-79`. The handler is implemented in `cloudinary/src/getGenerateSignature.ts`. **Vulnerable code path (step by step):** 1. `cloudinary/src/index.ts:58` — `initClientUploads` registers the server upload handler. 2. `cloudinary/src/index.ts:68` — The Cloudinary API key is exposed to client handler props by design. 3. `cloudinary/src/index.ts:74-79` — The signing endpoint is mounted at `/cloudinary-generate-signature`. 4. `cloudinary/src/getGenerateSignature.ts:18` — The default access control checks only `!!req.user`, permitting any authenticated user. 5. `cloudinary/src/getGenerateSignature.ts:46` — The entire request body is parsed: `const body = await req.json?.()`. 6. `cloudinary/src/getGenerateSignature.ts:55` — **Vulnerable sink**: attacker-controlled `body.paramsToSign` is forwarded verbatim to the signing function. ```ts // cloudinary/src/getGenerateSignature.ts:46-55 const body = await req.json?.() if (!body?.paramsToSign) { return new Response(JSON.stringify({ error: 'No paramsToSign provided' }), ...) } // No allowlist, no key filtering, no folder/public_id/overwrite enforcement const signature

Properties

ghsa_id
GHSA-h5x8-xp6m-x6q4
severity
high
summary
@jhb.software/payload-cloudinary-plugin: Arbitrary Cloudinary API Parameter Signing
cvss_score
7.1
cve_id
GHSA-h5x8-xp6m-x6q4
cvss_vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:L
is_ghsa_only
true
ghsa_published
2026-06-19T22:10:37Z
source_url
https://github.com/advisories/GHSA-h5x8-xp6m-x6q4
ghsa_updated
2026-06-23T05:02:33Z

Related Entities (4)

VULNERABLE_TO (1)

[Software]npm/@jhb.software/payload-cloudinary-plugin

AFFECTS (1)

[Software]npm/@jhb.software/payload-cloudinary-plugin

HAS_WEAKNESS (1)

[Weakness]Improper Verification of Cryptographic Signature

REPORTED_BY (1)

[Source]GitHub Advisory Database

Explore deeper with Ninja Signal's threat intelligence graph

GHSA-h5x8-xp6m-x6q4 (CVSS 7.1) — Ninja Signal Threat Intelligence | Ninja Signal