Skip to main content
Vulnerability Database/CVE-2026-92228

CVE-2026-92228: Apache Airflow Keycloak Auth Bypass

CVE-2026-92228 is an authentication bypass flaw in Apache Airflow Keycloak provider affecting multi-team deployments. Team members could access other teams' audit logs. This post covers technical details, impact, and mitigation.

Published:

CVE-2026-92228 Overview

CVE-2026-92228 is a broken access control vulnerability in the Apache Airflow Keycloak provider. The multi-team provisioning routine _attach_team_permissions granted every provisioned team role global read access to audit logs. Any authenticated member of one team could read other teams' audit events through the Airflow UI or the event-log API. The flaw is tracked as CWE-732: Incorrect Permission Assignment for Critical Resource and affects deployments that enable multi-team mode with the Keycloak auth manager and provision teams through it. Upgrading apache-airflow-providers-keycloak to version 0.11.1 or later resolves the issue.

Critical Impact

Authenticated users in one Airflow team can read cross-tenant audit events, breaking tenant isolation and exposing sensitive operational metadata about other teams' DAGs, runs, and user activity.

Affected Products

  • Apache Airflow Keycloak provider (apache-airflow-providers-keycloak) versions prior to 0.11.1
  • Airflow deployments configured with multi-team mode
  • Airflow deployments using the Keycloak auth manager for team provisioning

Discovery Timeline

  • 2026-10-15 - CVE-2026-92228 published to NVD
  • 2026-10-16 - Last updated in NVD database

Technical Details for CVE-2026-92228

Vulnerability Analysis

Apache Airflow's multi-team mode partitions resources so that each team only sees its own DAGs, runs, and audit records. The Keycloak provider implements team provisioning through the _attach_team_permissions helper. This function assigns the role permissions that each team receives in Airflow after Keycloak synchronization.

The helper attached a global read permission on the audit log resource to every team role it created. As a result, any authenticated user who belonged to any provisioned team inherited read access to the full audit log stream. The intended per-team scoping was never enforced for the audit log resource.

Audit logs record operational actions including DAG triggers, variable changes, connection edits, and user logins. Cross-tenant visibility of these events discloses workflow structure, operator usage, and user identifiers that would otherwise be isolated per team.

Root Cause

The root cause is an overly broad permission grant in _attach_team_permissions within the Keycloak provider. The function granted a global read action on the audit log resource rather than a team-scoped read. This maps to [CWE-732], where a critical resource is assigned permissions that are more permissive than required.

Attack Vector

An attacker needs valid credentials for any team provisioned through the Keycloak auth manager in a multi-team Airflow deployment. After authenticating, the attacker can:

  • Open the audit log view in the Airflow UI and read events generated by other teams.
  • Query the event-log REST API with the attacker's bearer token and enumerate records across all teams.

No privilege escalation, user interaction, or chained vulnerability is required. Exploitation is purely network-reachable against the Airflow web server.

See the upstream fix in the Apache Airflow GitHub Pull Request and the Apache Mailing List Thread for technical details on the corrected permission scoping.

Detect Identity Attacks the Moment Authentication Fails

Singularity™ Identity surfaces credential misuse, lateral movement, and privilege escalation in real time, so you can contain the breach before it spreads.

Stop Identity Attacks

Detection Methods for CVE-2026-92228

Indicators of Compromise

  • Access to /api/v1/eventLogs or /log endpoints by users whose team membership does not match the dag_id or owner fields in returned records.
  • Audit log reads originating from team roles that have no DAGs or operational scope of their own.
  • Keycloak-provisioned Airflow roles that include a global can_read permission on the Audit Logs resource.

Detection Strategies

  • Review Airflow role-to-permission mappings and flag any team role that holds can_read on Audit Logs without a team filter.
  • Correlate authenticated user team membership with the dag_id field of accessed event-log records to detect cross-team reads.
  • Alert on anomalous volumes of event-log API calls from user accounts that do not routinely query audit data.

Monitoring Recommendations

  • Enable Airflow webserver access logging and ship it to a central analytics platform for retention and query.
  • Track the installed version of apache-airflow-providers-keycloak across all Airflow deployments and alert on versions below 0.11.1.
  • Monitor Keycloak role synchronization events to detect reintroduction of broad audit permissions after remediation.

How to Mitigate CVE-2026-92228

Immediate Actions Required

  • Upgrade apache-airflow-providers-keycloak to version 0.11.1 or later on every Airflow component that runs the auth manager.
  • Re-run team provisioning after the upgrade so that _attach_team_permissions writes the corrected, team-scoped permissions.
  • Audit existing team roles in Airflow and remove any residual global can_read grant on the audit log resource.
  • Review historical event-log API access to identify prior cross-team reads during the exposure window.

Patch Information

The fix is included in apache-airflow-providers-keycloak version 0.11.1. The corrected _attach_team_permissions logic no longer assigns global audit log read access to team roles. Refer to the Apache Airflow GitHub Pull Request and the Openwall OSS Security advisory for the upstream patch details.

Workarounds

  • Disable multi-team mode until the Keycloak provider can be upgraded.
  • Switch temporarily to a non-Keycloak auth manager that enforces per-team audit log scoping.
  • Manually strip the global audit log read permission from every Keycloak-provisioned team role in the Airflow role table.
bash
# Upgrade the Airflow Keycloak provider to the fixed version
pip install --upgrade 'apache-airflow-providers-keycloak>=0.11.1'

# Verify the installed version
pip show apache-airflow-providers-keycloak | grep -i version

# Re-run team provisioning so corrected permissions are applied
airflow providers keycloak sync-teams

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.