Zapocalypse — five-stage exploit chain turns a free Zapier account into NPM publish rights on zapier.com's own JS bundle
TL;DR
Token Security chained five separate "known anti-patterns" — sandboxed Python code execution, /proc/self/mem credential recovery, an over-permissioned AWS IAM role, a hardcoded MCP API key, and a leaked NPM publish token — starting from a free-tier Zapier account to reach NPM publish rights on zapier-design-system, a private package that loads in every authenticated zapier.com session. A malicious release would have meant stored XSS → account takeover across Zapier's user base. Reported Feb 12, 2026; fully remediated by Mar 5, 2026; no evidence of in-the-wild exploitation.
What happened
Token Security's research team started from Zapier's "Code by Zapier" feature, which runs user-submitted Python/JavaScript inside AWS Lambda containers in us-east-1, and walked a five-stage chain to full platform compromise:
- Sandbox execution confirmed.
os.system('env')inside a free-tier Code by Zapier Python block confirmed arbitrary command execution on the underlying Lambda runtime. - Credential recovery from heap memory. Zapier's runtime scrubbed secrets with
del os.environ[k]before returning control to user code, but Python'sdeldoes not zero the underlying heap allocation. Reading/proc/self/memand regex-matching for AWS STS token patterns recovered a live, "orphaned" set of session credentials that should have been unreachable. - Lateral movement via an over-permissioned IAM role. The recovered
allow_nothing_rolecredentials — named as if they granted nothing — still permitted enumerating 1,111 ECR repositories and pulling container images directly via the ECR API, bypassing the Docker authentication layer that would normally gate this. - Hardcoded secret in a container image. One pulled image (a customized LiteLLM container) contained a hardcoded Zapier Actions MCP API key, which in turn enabled email impersonation from a LiteLLM co-founder's Gmail account — a second-order credential-hub pivot inside the chain itself.
- NPM publish token in image metadata → stored-XSS primitive. The same image layer metadata contained an NPM publish token with
"action": "write"and"bypass_2fa": true, granting publish rights tozapier-platform-core,zapier-platform-cli, and — critically —zapier-design-system, a private package whose JavaScript is loaded on every authenticatedzapier.comsession. Publishing a tampered version would have executed attacker-controlled JS in every logged-in Zapier user's browser: full platform account takeover.
Every individual link (sandbox escape, incomplete secret scrubbing, an IAM role broader than its name implies, a hardcoded key in a container image, a live NPM token sitting in image metadata) is a well-known anti-pattern on its own. The finding is that composing five ordinary weaknesses reached a critical, platform-wide outcome starting from a free account with no special access.
Zapier triaged the report within 4 days (Feb 13), revoked the leaked NPM token and tightened the IAM role by Feb 16, and confirmed full remediation by Mar 5, 2026. The researchers received Zapier's bug-bounty program maximum of $3,000. Zapier states no customer data, credentials, or workflows were accessed, and there is no evidence of exploitation beyond the research itself. No CVE was assigned.
This fits the standing "workflow-automation / iPaaS tools as a credential-hub attack surface" pattern already tracked for n8n (Ni8mare, CVE-2026-21858) — a Code-by-Zapier-class execution sandbox sits in the same position as n8n's workflow engine: one execution environment holding the keys to everything the platform touches, including (here) its own publish pipeline.
Am I affected?
This is a platform-side vulnerability in Zapier's own infrastructure, not something in your dependency tree — there is no local package or lockfile check. If you use Zapier:
# Check whether your project pins zapier-platform-core / zapier-platform-cli
# to a version published between the report window (2026-02-12) and full
# remediation (2026-03-05) — no malicious versions were ever actually published,
# but confirm your pinned versions predate or postdate the window cleanly.
grep -E "zapier-platform-(core|cli)" package.json package-lock.json 2>/dev/null
No malicious package version was ever published — the chain was fully remediated before an attacker (other than the researchers) reached stage 5. There is no IOC or version to rotate away from.
If you are affected
No action is required for Zapier users; the platform-side vulnerability was patched and no malicious release occurred.
If you operate a similar low-code/workflow-automation platform with a hosted code-execution sandbox:
- Never rely on
del os.environ[...](or language equivalents) as a secret-scrubbing boundary — heap memory persists until overwritten or garbage-collected. Use processes/containers that are torn down after each execution instead. - Audit IAM role names against actual attached policies —
allow_nothing_role-style naming is not a control. - Treat any credential embedded in a container image (env var, config file, or layer metadata) as leaked the moment that image is pullable from any reachable execution context.
- See rotating-cloud-credentials.md if you need to respond to a similar chain in your own infrastructure.
Prevention
- prevention/ci-cd-hardening.md — least-privilege IAM roles, no long-lived publish tokens in build images.
- prevention/credential-hygiene.md — secret scrubbing, why in-process deletion isn't a security boundary.
- Cross-reference: 2025-11-n8n-ni8mare-rce.md — sibling "workflow-automation credential hub" finding.
Sources
- Token Security — "Zapocalypse: The Attack Chain That Could Have Hijacked Zapier" — primary technical disclosure, all five stages, timeline, bounty.
- Help Net Security — "Zapier exploit chain shows how known anti-patterns compose into critical risk" — independent summary and framing.
- CyberScoop — "Zapier fixes bug chain that researchers say risked widespread account takeover" — independent corroboration of remediation timeline.