Skip to main content

Apache Airflow CVE-2026-59245

HIGH
Improper Privilege Management (CWE-269)
2026-07-13 apache
8.1
CVSS 3.1 · NVD
Share

Severity by source

Vendor (apache) PRIMARY
MEDIUM
qualitative
NVD
8.1 HIGH
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
vuln.today AI
6.8 MEDIUM

Web/API reachable (AV:N) by an authenticated low-priv user (PR:L), but requires a DAG named 'DAGs' plus an admin-issued grant outside attacker control (AC:H); read/edit of all DAGs gives C:H/I:H, no availability impact (A:N).

3.1 AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:N
4.0 AV:N/AC:H/AT:N/PR:L/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (apache).

CVSS VectorNVD

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
None

Lifecycle Timeline

7
Analysis Updated
Jul 14, 2026 - 01:28 vuln.today
v3 (cvss_changed)
Source Code Evidence Fetched
Jul 14, 2026 - 01:28 vuln.today
Analysis Updated
Jul 14, 2026 - 01:28 vuln.today
v2 (cvss_changed)
Re-analysis Queued
Jul 14, 2026 - 01:22 vuln.today
cvss_changed
CVSS changed
Jul 14, 2026 - 01:22 NVD
8.1 (HIGH)
Analysis Generated
Jul 13, 2026 - 15:46 vuln.today
CVE Published
Jul 13, 2026 - 15:05 cve.org
MEDIUM

DescriptionNVD

In the Apache Airflow FAB auth manager, a DAG whose dag_id is DAGs collided with the global all-DAGs permission resource name produced by resource_name(), so a user granted per-DAG access_control on that one DAG was silently granted the global all-DAGs permission (privilege escalation). The escalation triggers when a DAG named DAGs exists and a lower-privileged user is given per-DAG access to it, granting that user read/edit access to every DAG. Users are advised to upgrade to apache-airflow-providers-fab 3.7.2 or later, which disambiguates the resource-name collision.

AnalysisAI

Privilege escalation in the Apache Airflow FAB auth manager (apache-airflow-providers-fab before 3.7.2) lets a low-privileged user who is granted per-DAG access to a DAG literally named 'DAGs' silently receive the global all-DAGs permission, gaining read and edit access to every DAG in the deployment. The flaw stems from a resource-name collision in resource_name(), where the reserved global resource string 'DAGs' is indistinguishable from a legitimate dag_id of the same value. No public exploit identified at time of analysis, and the issue is not listed in CISA KEV.

Technical ContextAI

Apache Airflow's legacy Flask-AppBuilder (FAB) auth manager maps DAG-level authorization onto FAB permission resources. The helper resource_name(dag_id, RESOURCE_DAG) is meant to produce a per-DAG resource such as 'DAG:my_dag', while the singular reserved name 'DAGs' (RESOURCE_DAG) represents the global all-DAGs permission. The vulnerable code short-circuited and returned the raw dag_id whenever it matched an entry in RESOURCE_DETAILS_MAP, so a DAG whose dag_id equals 'DAGs' resolved to the global resource name rather than its own 'DAG:DAGs' resource. This is a classic CWE-269 Improper Privilege Management failure caused by an identifier-namespace collision between attacker-influenceable data (a DAG name) and a trusted, reserved authorization token. The fix (PR #69106) removes the short-circuit so 'DAGs' correctly resolves to 'DAG:DAGs', verified by regression tests asserting resource_name(RESOURCE_DAG, RESOURCE_DAG) == 'DAG:DAGs'. Affected component per CPE is cpe:2.3:a:apache_software_foundation:apache_airflow_fab_provider.

RemediationAI

Vendor-released patch: upgrade apache-airflow-providers-fab to 3.7.2 or later, which disambiguates the resource-name collision so a DAG named 'DAGs' resolves to its own 'DAG:DAGs' resource; this is the primary and recommended fix (see PR https://github.com/apache/airflow/pull/69106 and advisory https://lists.apache.org/thread/70f37q3mwov1vm3zolrfxlzds278c78h). If immediate patching is not possible, a targeted compensating control is to rename any DAG whose dag_id is exactly 'DAGs' to any other identifier, which eliminates the collision entirely with minimal side effects beyond updating references to that DAG. As an additional interim measure, audit and revoke per-DAG access_control grants on any DAG named 'DAGs' and review FAB role assignments to confirm no low-privileged user has been inadvertently escalated to the global all-DAGs permission; the trade-off is administrative overhead and potential disruption to legitimate users who need access to that specific DAG.

Share

CVE-2026-59245 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy