Someone with a guest pass to your automation nerve center can rewrite the building's wiring
CVE-2026-33696 is a prototype pollution flaw in n8n's GSuiteAdmin and XML node parameter handling. An authenticated user with member-role permissions — the *default* for any registered n8n user — can supply crafted keys (__proto__, constructor, prototype) in node configuration parameters. This pollutes Object.prototype in the server-side Node.js process. Combined with gadget chains available in n8n's dependency tree, this escalates to full remote code execution on the n8n host. Affected versions span n8n < 1.123.27 on the 1.x branch, >= 2.0.0-rc.0 and < 2.13.3 on the 2.x stable branch, and 2.14.0 on the 2.x beta. Fixes landed in 1.123.27, 2.13.3, and 2.14.1.
The vendor assigned CVSS 4.0 of 9.4 (Critical) and CVSS 3.1 of 8.8 (High). The 8.8 is *directionally correct* but slightly generous given two friction factors: no public proof-of-concept exists yet and exploitation requires authenticated access. However, the 'authenticated' bar is thinner than it sounds — n8n's default member role is sufficient, and many self-hosted instances allow open registration. With 100,000+ n8n instances exposed on the internet per Censys scans, the reachable population is large. noisgate downgrades slightly to 7.8 HIGH: auth and no-PoC provide real but modest friction, while n8n's role as a credential-laden automation hub keeps the floor firmly at HIGH.
4 steps from start to impact.
Obtain authenticated session on n8n
- Network access to n8n instance (port 5678 or reverse proxy)
- Valid user account with member role or above
- Instances behind VPN or IP-allowlisted reverse proxy are unreachable
- Deployments that disabled self-registration require social engineering or credential theft
Craft prototype-polluting workflow node
__proto__, constructor, or prototype and an attacker-controlled value. This is done through normal workflow editing UI or API. No special tooling beyond n8n's own interface is required.- Permission to create or edit workflows (member-role default)
- Knowledge of prototype pollution technique
- No public PoC or exploit code exists as of August 2026
- Attacker must identify viable gadget chain in n8n's Node.js dependency tree to convert pollution into code execution
__proto__ in JSON payloads. n8n does not natively log parameter content at workflow save time.Trigger workflow execution to pollute Object.prototype
Object.prototype is polluted server-side. The pollution persists for the lifetime of the Node.js process, affecting all subsequent operations.- Ability to execute workflows (member-role default)
- Execution sandbox (if any) may limit pollution scope, but n8n runs nodes in the main process by default
--frozen-intrinsics) could detect prototype mutation.Chain to RCE via gadget in dependency tree
Object.prototype polluted, the attacker leverages a gadget chain in n8n's dependencies to achieve arbitrary code execution. Prior n8n advisories (CVE-2026-33660) demonstrated AlaSQL-based gadgets. The attacker executes OS commands as the n8n service account, gaining access to stored credentials, environment variables, and connected systems.- Viable gadget chain exists in loaded dependencies
- n8n process runs with sufficient OS permissions
- Container-based deployments may limit blast radius if properly isolated
- Read-only filesystem mounts prevent persistent backdoors
The supporting signals.
| In-the-Wild Exploitation | No confirmed exploitation of CVE-2026-33696 specifically. However, n8n has been under sustained attack since the Ni8mare campaign (CVE-2026-21858, CVSS 10.0) in January 2026. Threat actors are actively scanning for vulnerable n8n instances. |
|---|---|
| Proof-of-Concept | No public PoC as of August 2026. Reporter @simonkoeck disclosed responsibly via GitHub Security Advisory GHSA-mxrg-77hm-89hv. Sister CVE-2026-33660 has a writeup on anonhaven.com detailing AlaSQL gadget chains that may be adaptable. |
| EPSS Score | 0.00765 (≈76th percentile) — moderate probability of exploitation within 30 days. Reflects authenticated requirement dampening automated scanning. |
| KEV Status | Not listed in CISA Known Exploited Vulnerabilities catalog as of August 2026. |
| CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H (8.8 HIGH). GitHub advisory additionally lists CVSS 4.0 score of 9.4 Critical with S:C (changed scope). |
| Affected Versions | n8n < 1.123.27 (1.x LTS), n8n >= 2.0.0-rc.0 and < 2.13.3 (2.x stable), n8n 2.14.0 (2.x beta) |
| Fixed Versions | 1.123.27, 2.13.3, 2.14.1 |
| Exposure Data | Censys and Shodan report 100,000+ internet-exposed n8n instances. As of March 2026, 58% of scanned instances were running a version affected by at least one known CVE. Censys advisory |
| Disclosure Date | 2026-03-25 via GitHub Security Advisory |
| Reporter | @simonkoeck via coordinated disclosure to n8n-io |
noisgate verdict.
The single most decisive factor keeping this at HIGH rather than CRITICAL is the authentication requirement — exploitation demands a valid n8n member-role session, which narrows the attacker population to credentialed insiders, compromised accounts, or instances with open self-registration. The decisive factor *preventing* a further downgrade to MEDIUM is the role multiplier: n8n is canonically an automation/integration hub storing OAuth tokens, API keys, and database credentials for dozens of connected services — RCE on the n8n host is a supply-chain pivot point, not a single-app compromise.
Why this verdict
- Authentication friction is real but thin. CVSS PR:L is accurate, but n8n's member role — the minimum needed — is the *default* for any registered user. Self-hosted instances with open registration reduce this to near-zero friction. This provides a modest downward adjustment (~0.5 points) from the vendor's 8.8.
- No public PoC dampens immediate risk. Without published exploit code, mass exploitation requires independent gadget-chain research. The sister CVE-2026-33660 AlaSQL writeup lowers this bar for motivated attackers but has not yet been adapted publicly. Another ~0.5-point downward adjustment.
- Role multiplier: n8n is a credential store and automation hub. By definition, n8n instances hold OAuth tokens, API keys, database credentials, and webhook secrets for every connected service. RCE on the n8n host means the attacker inherits all stored credentials and can pivot to downstream systems (databases, SaaS platforms, cloud accounts). This is functionally equivalent to compromising a CI/CD server. The blast radius is not 'one application' — it is 'every system n8n integrates with.' This floors the verdict at HIGH regardless of auth friction.
- Role multiplier (high-value role check): n8n occupies the CI/CD + automation category. ≥80% of n8n installs *are* the automation hub — the component is its role. Chain success in this role yields credential theft across all integrations → supply-chain-scale blast radius. Floor = HIGH.
- 100K+ internet-exposed instances. The reachable attack surface is massive. Even requiring auth, the sheer volume of exposed instances — 58% running vulnerable versions — means the exposure population is substantial.
Why not higher?
Upgrading to CRITICAL would require either active exploitation (not observed), a public weaponized PoC (none exists), or unauthenticated access (auth is required). The authentication barrier, while thin, is nonzero and prevents mass automated exploitation. The CVSS 4.0 score of 9.4 with changed scope is aggressive; real-world conditions do not yet support CRITICAL urgency.
Why not lower?
Dropping to MEDIUM would ignore n8n's canonical role as an automation and credential hub. RCE on an n8n instance is not an isolated application compromise — it is a supply-chain pivot point granting access to every connected service's credentials. The 100K+ exposed instance population and the existence of sister CVE gadget-chain research (lowering the PoC development barrier) prevent any further downgrade.
What to do — in priority order.
- Disable the XML node via NODES_EXCLUDE — Set
NODES_EXCLUDE=n8n-nodes-base.xmlin your n8n environment configuration to remove the XML node from the available node palette. This eliminates one of the two attack vectors. Deploy within 30 days per noisgate mitigation SLA for HIGH. - Restrict workflow permissions to trusted users only — Remove member-role workflow creation/editing permissions. Limit workflow authoring to a named set of trusted operators. This directly blocks the authenticated attack path. Deploy within 30 days.
- Disable open self-registration — Set
N8N_USER_MANAGEMENT_DISABLED=trueor configure SSO/SAML to control who can register. Open registration is the primary reason the auth barrier is thin. Deploy within 30 days. - Place n8n behind VPN or IP-allowlisted reverse proxy — Remove direct internet exposure. This eliminates remote attacker access entirely. If n8n must be accessible externally, enforce MFA via an identity-aware proxy (e.g., Cloudflare Access, Tailscale). Deploy within 30 days.
- Run n8n in a container with minimal privileges — Use a read-only root filesystem, drop all capabilities, and run as a non-root user. This limits post-exploitation blast radius even if RCE is achieved. Secrets should be injected via mounted volumes or secret managers, not environment variables.
- Network-level WAF rules — prototype pollution payloads are embedded in legitimate JSON workflow configuration bodies. Generic WAF signatures for
__proto__may catch trivial attempts but are easily bypassed withconstructor.prototypevariants. - Node.js version upgrades alone — the vulnerability is in n8n's application-layer parameter handling, not in Node.js itself. Upgrading Node.js does not remediate.
- Disabling only the GSuiteAdmin node — while
NODES_EXCLUDEcan disable GSuiteAdmin, the XML node is the more commonly deployed vector. You must exclude both, and even then, future prototype pollution vectors in other nodes are not addressed.
Crowdsourced verification payload.
Run this script on each n8n host (or against the n8n API endpoint from an auditor workstation). It checks the running n8n version against the patched thresholds. No special privileges required — just curl and network access to the n8n instance. Example: bash check_cve_2026_33696.sh https://n8n.internal.corp:5678
#!/usr/bin/env bash
# check_cve_2026_33696.sh — Detect CVE-2026-33696 in n8n
# Usage: bash check_cve_2026_33696.sh <n8n_base_url>
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN
set -euo pipefail
if [ $# -lt 1 ]; then
echo "Usage: $0 <n8n_base_url>"
echo "Example: $0 https://n8n.example.com:5678"
exit 2
fi
BASE_URL="${1%/}"
# Attempt to retrieve version from n8n REST API
VERSION=$(curl -sk --max-time 10 "${BASE_URL}/rest/settings" 2>/dev/null | grep -oP '"versionCli"\s*:\s*"\K[0-9]+\.[0-9]+\.[0-9]+' || true)
if [ -z "$VERSION" ]; then
# Fallback: try the healthcheck or version endpoint
VERSION=$(curl -sk --max-time 10 "${BASE_URL}/healthz" -D- 2>/dev/null | grep -oiP 'n8n/\K[0-9]+\.[0-9]+\.[0-9]+' || true)
fi
if [ -z "$VERSION" ]; then
echo "UNKNOWN — could not determine n8n version at ${BASE_URL}"
exit 2
fi
echo "Detected n8n version: ${VERSION}"
# Parse major.minor.patch
IFS='.' read -r MAJOR MINOR PATCH <<< "$VERSION"
vulnerable=false
if [ "$MAJOR" -eq 1 ]; then
# 1.x branch: vulnerable if < 1.123.27
if [ "$MINOR" -lt 123 ]; then
vulnerable=true
elif [ "$MINOR" -eq 123 ] && [ "$PATCH" -lt 27 ]; then
vulnerable=true
fi
elif [ "$MAJOR" -eq 2 ]; then
# 2.x branch: vulnerable if < 2.13.3 OR == 2.14.0
if [ "$MINOR" -lt 13 ]; then
vulnerable=true
elif [ "$MINOR" -eq 13 ] && [ "$PATCH" -lt 3 ]; then
vulnerable=true
elif [ "$MINOR" -eq 14 ] && [ "$PATCH" -eq 0 ]; then
vulnerable=true
fi
fi
if [ "$vulnerable" = true ]; then
echo "VULNERABLE — n8n ${VERSION} is affected by CVE-2026-33696"
echo "Upgrade to 1.123.27 (1.x) or 2.13.3 / 2.14.1 (2.x)"
exit 1
else
echo "PATCHED — n8n ${VERSION} is not affected by CVE-2026-33696"
exit 0
fiIf you remember one thing.
NODES_EXCLUDE=n8n-nodes-base.xml as a temporary mitigation. Per the noisgate mitigation SLA for HIGH, deploy these compensating controls within 30 days. Per the noisgate remediation SLA for HIGH, upgrade all n8n instances to 1.123.27 (1.x LTS) or 2.13.3+ / 2.14.1+ (2.x) within 180 days. Prioritize internet-facing instances for immediate patching — with 100K+ exposed instances and n8n under sustained attacker interest since the Ni8mare campaign, the window before a public PoC drops is narrowing. If your n8n instance is internet-exposed with open registration, treat this as an emergency: patch this week and put the instance behind a VPN.Sources
- GitHub Security Advisory GHSA-mxrg-77hm-89hv
- Geordie Technical Advisory — n8n March 2026 CVEs
- Censys Advisory — n8n Exposure Data
- SentinelOne Vulnerability Database — CVE-2026-33696
- GBHackers — 103K+ n8n Instances Exposed
- AnonHaven — n8n RCE via AlaSQL and Prototype Pollution (CVE-2026-33660)
- CCB Belgium — Critical n8n Vulnerabilities Advisory
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.