n8n Broken Object-Level Authorization on Role Assignment Endpoints Leaks Cross-Tenant Project Member PII
First seen Sep 13, 2026 · Updated Sep 13, 2026
n8n's role-assignment API endpoints checked whether a user could manage a given role type but failed to verify the user actually had access to the specific project referenced in the request. This let any user with role-management permission enumerate arbitrary project IDs/slugs on the instance and retrieve other tenants' project members' names and email addresses, breaking tenant isolation. The issue is fixed in n8n 2.38.2 and 2.37.7.
Technical Analysis
The vulnerable routes, /rest/roles/:slug/assignments and /rest/roles/:slug/assignments/:projectId/members, authorized requests solely on the caller's role-management scope (e.g. role:manageProject) without a second check confirming the caller has visibility into the specific project supplied as a parameter. This is a classic broken object-level authorization (BOLA/IDOR) pattern: the authorization check validates the action type but not the target object's ownership or tenant boundary. An attacker with any role-management permission could supply arbitrary project identifiers and receive back member lists containing PII (names, emails) for projects they should not be able to see, effectively crossing tenant/workspace trust boundaries within a shared n8n instance. While this is not an AI-agent-specific exploit, n8n is widely used to orchestrate AI agent workflows and connect LLM tools/credentials across teams, so leaked project membership data could be leveraged for social engineering, credential targeting, or further reconnaissance against agent-connected automation pipelines.
Affected Systems
n8n
Detection Signatures
- Unusual sequential or enumerated requests to /rest/roles/:slug/assignments/:projectId/members with varying projectId values
- Requests to role-assignment endpoints from users without corresponding project membership
- High-volume calls to /rest/roles/*/assignments* from a single account across many distinct project IDs
- Audit logs showing role:manageProject scope usage disjoint from actual project ownership
Remediation Steps
- 1
Upgrade n8n
Update to n8n 2.38.2, 2.37.7, or later where the patch enforces a per-project access check on both role-assignment endpoints.
- 2
Restrict role:manageProject scope
Audit custom global roles and limit any role carrying role:manageProject to fully trusted administrators only, until the upgrade is applied.
- 3
Limit instance access
Restrict n8n instance access to trusted users and enforce least-privilege role assignments as a temporary compensating control.
- 4
Review access logs
Audit historical API calls to /rest/roles/:slug/assignments and /rest/roles/:slug/assignments/:projectId/members for cross-project enumeration prior to patching.
CVE / Advisory IDs
Industries Most Exposed
Respond to this threat
Pro subscribers get a full AI-generated incident-response playbook for this threat — detection, containment, eradication, and recovery steps — plus an unlimited AI Threat Advisor for questions about your environment.