/

CVE-2026-85057

Severity:

HIGH RISK

(8.7)

Improper Access Control (CWE-284) in ZITADEL Actions

CVE-2026-85057

Deferred

Vulnerability type

Category:

Improper Access Control

CWE:

CWE-284

Impact:

Sensitive Information Disclosure and Privilege Escalation

Severity:

HIGH RISK

(8.7)

CVSS version:

3.1

Catch this CVE while code is being written

Detect vulnerable code directly in pull requests, so CVEs are fixed before merge.

Summary

ZITADEL Actions V1 permits organization Action authors with specific organization permissions to execute JavaScript that can read files accessible to the ZITADEL server process.

This may expose mounted configuration and bootstrap secrets, potentially enabling escalation from an organization administrator to an instance administrator when vulnerable Actions and trigger flows are enabled.

Affected context

The issue occurs in ZITADEL Actions V1 deployments within affected release ranges when the Node-compatible require() registry is available without restricting its filesystem source loader. Exploitation depends on an organization Action author having ORG_OWNER, org.action.write, and org.flow.write permissions, with the Action invoked at an OIDC, SAML, or login-flow trigger point. Files readable by the ZITADEL server process, including certain mounted configuration and bootstrap credential files, may therefore be exposed. Host command execution has not been established.

Exploit preconditions

  • Attack surface: ZITADEL Actions V1 JavaScript execution and the Node-compatible require() registry
  • Required access: An organization Action author with ORG_OWNER, org.action.write, and org.flow.write permissions
  • Trigger point: An enabled OIDC, SAML, or login-flow Action trigger
  • File access condition: The target files must be readable by the ZITADEL server process
  • Why exploitation is possible: The filesystem-backed module loader is not sufficiently restricted, allowing Action code to access readable files beyond its intended application scope

Why this happens

The underlying issue is an access-control failure in the integration between the JavaScript runtime and its module-loading mechanism. Actions V1 exposes a Node-compatible require() registry while permitting a filesystem source loader without an adequate path or capability boundary. Consequently, code authored within an organization-controlled Action can access files according to the server process identity rather than a narrowly defined Action-specific policy. This behavior maps to CWE-284: Improper Access Control, because authorization boundaries do not adequately constrain access to protected filesystem resources.

Potential impact

  • Sensitive configuration files may be disclosed
  • Mounted secrets and bootstrap credentials could be exposed
  • Credentials associated with configured login clients or machine keys may be recovered
  • An organization administrator could potentially escalate to instance-administrator privileges
  • OIDC, SAML, or login-flow processing may be influenced through unauthorized Action behavior
  • Broader compromise could occur if exposed credentials are valid outside the immediate service

General mitigation guidance

Mitigation generally focuses on reducing the authority and filesystem reach of user-authored Actions.

Common defensive patterns include:

  • Disable or remove Actions V1 flows that do not require JavaScript execution
  • Restrict module loading to an explicit, allowlisted set of built-in or application-owned modules
  • Prevent Action code from resolving arbitrary filesystem-backed modules
  • Apply least-privilege identities and filesystem permissions to the ZITADEL server process
  • Keep bootstrap credentials outside broadly readable mounts and avoid exposing secret-bearing paths to application processes
  • Separate organization-level Action administration from instance-level security administration
  • Rotate credentials that may have been readable by affected Action execution contexts
  • Use a supported security-maintained release line containing the relevant corrective controls

How teams detect issues like this

Organizations can identify this class of issue through:

  • Static analysis and policy checks for unrestricted require() or filesystem-backed module loaders in embedded JavaScript runtimes
  • Code review signals showing user-authored scripts with access to server-local files or dynamic module resolution
  • Inventory reviews of Actions V1, their authors, assigned permissions, and OIDC, SAML, or login-flow trigger bindings
  • Audit-log searches for unexpected Action creation, modification, or execution by organization administrators
  • File-access monitoring for reads of configuration, credential, secret, or bootstrap paths by the ZITADEL process
  • Policy enforcement that blocks Action execution unless module access and filesystem capabilities are explicitly approved
  • Automated security review tools configured to flag missing path restrictions and privilege-boundary violations

Sources

SourceLink
github.comgithub.com/zitadel/zitadel/commit/afe108640cf57a17e8b743fbcdad9ae636eb3eb7
github.comgithub.com/zitadel/zitadel/commit/baf6ed501b684f47048553d9034e8d3aa824950e
github.comgithub.com/zitadel/zitadel/commit/e28d6bcc033368c3e9683ee15c195b8460b9305d
github.comgithub.com/zitadel/zitadel/releases/tag/v3.4.13
github.comgithub.com/zitadel/zitadel/releases/tag/v4.16.1
github.comgithub.com/zitadel/zitadel/security/advisories/GHSA-fgmf-7rf8-m6vf

Frequently asked

questions

Exploitation requires an organization Action author with the stated organization ownership and Action or flow permissions, together with an applicable Actions V1 trigger. It is not described as an unauthenticated issue.

Files readable by the ZITADEL server process may be accessible, including mounted configuration and bootstrap credential files. The exact exposure depends on deployment mounts, permissions, and secret placement.

Remove arbitrary filesystem-backed module loading from the Action runtime, constrain JavaScript capabilities with explicit allowlists, and enforce least-privilege filesystem access for the server process.

Host command execution has not been established. The documented risk is unauthorized file disclosure and possible privilege escalation through recovered credentials.

Treat organization-authored scripts as untrusted, isolate them from server-local files, require explicit capability grants for sensitive operations, audit Action permissions, and monitor access to credential-bearing paths.

Find out what's already
exploitable in your codebase.