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

CVE-2026-59245: Airflow FAB Privilege Escalation Flaw

CVE-2026-59245 is a privilege escalation vulnerability in Apache Airflow FAB auth manager that allows low-privileged users to gain global DAG access. This article covers technical details, affected versions, and mitigation.

Published:

CVE-2026-59245 Overview

CVE-2026-59245 is a privilege escalation vulnerability in the Apache Airflow Flask App Builder (FAB) auth manager. A resource-name collision in the resource_name() function causes a DAG whose dag_id equals DAGs to overlap with the global all-DAGs permission resource. When an administrator grants a lower-privileged user per-DAG access_control on a DAG named DAGs, the FAB auth manager silently applies the global all-DAGs permission instead. That user gains read and edit access across every DAG in the environment. The issue affects deployments using apache-airflow-providers-fab prior to version 3.7.2 [CWE-269].

Critical Impact

A user granted access to a single DAG named DAGs obtains read/edit privileges over every DAG in the Airflow deployment, enabling workflow manipulation and data pipeline compromise.

Affected Products

  • Apache Airflow deployments using apache-airflow-providers-fab prior to version 3.7.2
  • FAB auth manager configurations with per-DAG access_control enabled
  • Airflow instances where DAG creation is permitted by non-administrator users

Discovery Timeline

  • 2026-07-13 - CVE-2026-59245 published to NVD
  • 2026-07-14 - Last updated in NVD database

Technical Details for CVE-2026-59245

Vulnerability Analysis

Apache Airflow's FAB auth manager derives permission resource names for DAGs using the resource_name() helper. The function is intended to produce a unique string per DAG, but the resulting name for a DAG whose dag_id is the literal string DAGs collides with the constant used to represent the global all-DAGs permission. This collision breaks the authorization model that separates per-DAG grants from environment-wide DAG administration.

When an administrator assigns per-DAG access_control on the DAGs DAG to a lower-privileged role, the underlying FAB permission record maps to the global resource. Every subsequent authorization check for any DAG resolves against the same record and returns success for that user. The result is silent horizontal and vertical privilege escalation without any indicator in the UI that the grant applied globally.

Root Cause

The root cause is an input-validation and namespacing defect in resource_name(). The function does not reserve or escape the DAGs identifier, allowing a user-controlled dag_id to shadow the framework's own permission resource. This is a classic improper privilege management issue [CWE-269] rooted in a string-identifier collision between user data and system constants.

Attack Vector

Exploitation requires two preconditions: a DAG named DAGs must exist in the environment, and an administrator must grant a lower-privileged user per-DAG access to it. Once granted, the user can invoke any DAG operation the global permission covers, including listing, reading, and editing all DAGs. The attack does not require crafted network payloads or authentication bypass; it abuses the intended permission-assignment workflow. See the Apache Airflow pull request 69106 and the Apache mailing list advisory for the corrected resource-naming logic.

Detection Methods for CVE-2026-59245

Indicators of Compromise

  • Presence of a DAG with dag_id equal to DAGs in the Airflow metadata database
  • FAB permission records where a per-DAG grant resolves to the global all-DAGs resource
  • Non-administrator users viewing, editing, or triggering DAGs outside their intended scope
  • Unexpected DAG runs or configuration changes initiated by low-privileged accounts

Detection Strategies

  • Query the Airflow metadata database for DAGs matching the reserved name DAGs and audit associated FAB permission assignments
  • Review the ab_permission_view_role table for role-permission mappings that reference the all-DAGs resource unexpectedly
  • Correlate webserver audit logs with role assignments to identify users accessing DAGs outside their granted list

Monitoring Recommendations

  • Enable Airflow audit logging and forward webserver and scheduler logs to a centralized SIEM for role and permission analytics
  • Alert on creation of DAGs whose dag_id matches reserved framework strings, including DAGs
  • Monitor changes to FAB role definitions and per-DAG access_control blocks in DAG source files

How to Mitigate CVE-2026-59245

Immediate Actions Required

  • Upgrade apache-airflow-providers-fab to version 3.7.2 or later, which disambiguates the resource-name collision
  • Enumerate existing DAGs and rename any DAG whose dag_id is DAGs prior to upgrade
  • Audit all users granted per-DAG access_control on a DAG named DAGs and revoke inappropriate privileges

Patch Information

The fix is delivered in apache-airflow-providers-fab 3.7.2. The corrected resource_name() logic prevents user-supplied dag_id values from colliding with the global all-DAGs permission resource. Patch details are available in the Apache Airflow GitHub pull request and the Openwall OSS-Security announcement.

Workarounds

  • Prohibit creation of any DAG with dag_id equal to DAGs through pre-deployment linting or CI checks
  • Remove per-DAG access_control grants on any DAG named DAGs until the provider is upgraded
  • Restrict DAG file authoring to trusted operators to prevent introduction of collision-triggering DAG identifiers
bash
# Upgrade the FAB provider to the patched release
pip install --upgrade 'apache-airflow-providers-fab>=3.7.2'

# Identify any DAG that would trigger the collision
airflow dags list | awk '$1 == "DAGs" {print}'

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

Default Legacy - Prefooter | Experience the World’s Most Advanced Cybersecurity Platform

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.