Detect n8n-MCP Cross-Tenant Workflow Backup Access (CVE-2026-54052) in CrowdStrike LogScale
Detects exploitation of CVE-2026-54052, an authorization bypass (CWE-639/CWE-862) in n8n-mcp <= 2.56.0 HTTP multi-tenant deployments allowing cross-tenant access to workflow version backups. Attackers manipulate tenant/workflow identifiers in backup retrieval requests to read another tenant's stored workflow versions, which may contain embedded credentials, API keys, and webhook secrets.
MITRE ATT&CK
LogScale Detection Query
#event_simpleName=HttpRequest
| RequestURI=/(?i)(workflow|backup).*(version|history)/
| RequestURI=/(?i)tenant/
| groupBy([ClientIP], function=([count(as=request_count), collect([RequestURI], as=uris)]))
| filter(request_count>=3)
| sort(request_count, order=desc) Groups HTTP requests to workflow/backup version endpoints with tenant identifiers by client IP over the search window, surfacing clients with 3+ such requests suggestive of cross-tenant backup harvesting.
Data Sources
Required Tables
False Positives & Tuning
- Internal security scanning tools with legitimate multi-tenant access
- Shared corporate proxy or NAT gateway IPs aggregating many users' traffic
- Backup/DR automation systems authorized to touch multiple tenants
Other platforms for CVE-2026-54052
Testing Methodology
Validate this detection against 3 adversary techniques from Atomic Red Team. Each test below lists the behaviour to exercise and the telemetry you should expect to see. Executable commands and cleanup steps are available with Pro.
- Test 1Cross-tenant backup retrieval via tenant parameter manipulation
Expected signal: HTTP GET request to /api/mcp/workflows/backup/version with tenant_id query parameter that does not match the bearer token's authenticated tenant claim, logged in reverse proxy / application access logs
- Test 2Enumeration of multiple tenant workflow backups
Expected signal: Four or more HTTP requests to the backup/history endpoint from a single source IP within seconds, each carrying a distinct tenant_id value
- Test 3Credential harvesting from exposed workflow backup content
Expected signal: Same cross-tenant HTTP request as the retrieval test, plus process execution logs showing local parsing/grepping of the downloaded backup file for credential-like strings
Response Playbook
Triage
- Identify all source IPs and authenticated sessions that queried workflow/backup version endpoints with mismatched tenant identifiers (i.e., a session authenticated for Tenant A retrieving Tenant B's backup data) within the last 30 days.
- Confirm the affected n8n-mcp deployment version via package.json or `npm ls n8n-mcp`; any version <= 2.56.0 in an HTTP multi-tenant configuration is vulnerable.
- Review application/API logs for the specific backup/version retrieval endpoint(s) to determine which tenant workflow backups were actually returned in response bodies (not just requested), to scope true data exposure vs. failed attempts.
- Cross-reference exposed workflow backups for embedded secrets — n8n workflows commonly store API keys, database credentials, and webhook URLs inline — and treat any such credentials as compromised.
Containment
- Immediately upgrade n8n-mcp to v2.56.1 or later, which patches the CWE-639/CWE-862 authorization bypass.
- If upgrade cannot happen immediately, place the HTTP multi-tenant deployment behind a reverse proxy/WAF rule that enforces tenant-ID binding to the authenticated session and blocks requests where the tenant parameter mismatches the session's tenant claim.
- Temporarily disable or restrict the workflow backup/version-history API endpoint for multi-tenant HTTP mode until patched.
Evidence Collection
- Preserve HTTP access logs, reverse proxy logs, and application-level audit logs covering the suspected exploitation window for all tenant/backup endpoints.
- Export a list of all workflow backups accessed cross-tenant, including timestamps, requesting principal, source IP, and target tenant/workflow IDs, for the incident record and downstream credential-rotation tracking.
Escalation Criteria
- !Escalate to incident response if any cross-tenant backup response confirmed to have returned another tenant's workflow data containing live credentials or secrets.
- !Escalate to legal/compliance if exposed tenant data includes customer PII, regulated data, or falls under a contractual data-isolation SLA, since this constitutes a confirmed multi-tenant data breach.
Investigation Guide
Related Techniques
Forensic Artifacts
- >
Reverse proxy / application HTTP access logs containing tenant and workflow query parameters - >
n8n-mcp application audit logs recording backup/version-history retrieval events with authenticated principal and requested tenant scope - >
Response body captures (if full-packet or API gateway logging enabled) showing which tenant's data was actually returned
Tuning Guidance
Baseline legitimate multi-tenant admin tooling, MSP/reseller support consoles, and backup-validation automation that may routinely traverse multiple tenants; allowlist their known service accounts or source IPs. Prefer the tenant-mismatch hunting query over the volume-based detections where session/tenant claim data is available, as it produces far fewer false positives than IP-based enumeration thresholds. Adjust the distinct-tenant threshold (default 3 in 15 minutes) upward in environments with high legitimate cross-tenant support activity, and downward in single-purpose deployments where cross-tenant access should never occur.
Hunting Queries
Hunts specifically for tenant-parameter mismatches between the authenticated session's tenant claim and the tenant ID requested in the backup/version endpoint, directly surfacing confirmed cross-tenant authorization bypass attempts rather than just volume-based enumeration.
AppServiceHTTPLogs
| where CsUriStem matches regex @"(?i)/(workflows?|backups?)/(version|history)"
| extend TenantParam = extract(@"(?i)tenant(?:_id|Id)?=([a-zA-Z0-9\-]+)", 1, CsUriQuery)
| extend AuthTenant = extract(@"(?i)x-auth-tenant[:=]\s*([a-zA-Z0-9\-]+)", 1, CsHost)
| where isnotempty(TenantParam) and isnotempty(AuthTenant) and TenantParam != AuthTenant
| project TimeGenerated, CIp, AuthTenant, TenantParam, CsUriStem index=web sourcetype=n8n_mcp_http
| rex field=uri_query "(?i)tenant(?:_id|Id)?=(?<requested_tenant>[a-zA-Z0-9\-]+)"
| rex field=_raw "(?i)auth[_-]?tenant[:=]\s*(?<auth_tenant>[a-zA-Z0-9\-]+)"
| where isnotnull(requested_tenant) AND isnotnull(auth_tenant) AND requested_tenant!=auth_tenant
| table _time src_ip auth_tenant requested_tenant uri_path Atomic Red Team Tests
Simulates an authenticated low-privilege tenant user requesting another tenant's workflow version backup by modifying the tenant identifier in the API request, exploiting the missing authorization check (CWE-862).
Command
curl -s -X GET "http://localhost:5678/api/mcp/workflows/backup/version?tenant_id=victim-tenant-002&workflow_id=wf-001" -H "Authorization: Bearer $ATTACKER_TENANT_A_TOKEN" -o /tmp/exfil_backup.json; cat /tmp/exfil_backup.json Cleanup
rm -f /tmp/exfil_backup.json Expected Telemetry
HTTP GET request to /api/mcp/workflows/backup/version with tenant_id query parameter that does not match the bearer token's authenticated tenant claim, logged in reverse proxy / application access logs
Expected Detection
KQL/SPL cross-tenant enumeration and tenant-mismatch hunting queries flag the source IP and session for accessing a tenant_id inconsistent with its auth context
Simulates an attacker iterating sequential or guessed tenant IDs against the vulnerable backup endpoint to harvest multiple tenants' workflow version histories in a short window.
Command
for t in tenant-001 tenant-002 tenant-003 tenant-004; do curl -s -X GET "http://localhost:5678/api/mcp/workflows/backup/history?tenant_id=$t" -H "Authorization: Bearer $ATTACKER_TOKEN" -o /tmp/backup_$t.json; sleep 1; done Cleanup
rm -f /tmp/backup_tenant-00*.json Expected Telemetry
Four or more HTTP requests to the backup/history endpoint from a single source IP within seconds, each carrying a distinct tenant_id value
Expected Detection
Distinct-tenant volume-based detections (KQL/SPL/EQL/AQL/Sumo/YARA-L/CQL) trigger on >=3 distinct tenant IDs accessed by one client IP within the 15-minute window
After obtaining a cross-tenant backup response, simulates parsing the returned workflow JSON for embedded credentials such as API keys and webhook secrets to demonstrate downstream impact.
Command
curl -s -X GET "http://localhost:5678/api/mcp/workflows/backup/version?tenant_id=victim-tenant-002&workflow_id=wf-001" -H "Authorization: Bearer $ATTACKER_TENANT_A_TOKEN" | jq -r '.. | strings | select(test("(?i)api[_-]?key|secret|token|password"))' > /tmp/harvested_secrets.txt; cat /tmp/harvested_secrets.txt Cleanup
rm -f /tmp/harvested_secrets.txt Expected Telemetry
Same cross-tenant HTTP request as the retrieval test, plus process execution logs showing local parsing/grepping of the downloaded backup file for credential-like strings
Expected Detection
Upstream cross-tenant access detections trigger on the initial request; SOC playbook step for credential-in-backup review flags the response content for secret exposure follow-up