Miggo Logo

CVE-2025-62503: Apache Airflow's create action can upsert existing Pools/Connections/Variables

4.6

CVSS Score
3.1

Basic Information

EPSS Score
0.03445%
Published
10/30/2025
Updated
10/30/2025
KEV Status
No
Technology
TechnologyPython

Technical Details

CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:L/I:L/A:N
Package NameEcosystemVulnerable VersionsFirst Patched Version
apache-airflowpip>= 3.0.0, < 3.1.13.1.1

Vulnerability Intelligence
Miggo AIMiggo AI

Miggo AIRoot Cause Analysis

The vulnerability exists in the bulk create APIs for Pools, Connections, and Variables. A user with only CREATE permission could update existing records by specifying action_on_existence='overwrite' in the bulk request. This bypassed the authorization check for UPDATE permission.

The analysis of the patch between versions 3.1.0 and 3.1.1, specifically commit 411ddeb5d310c3d4d0fcaebf941418eef0132568, reveals the exact location of the vulnerability. The fix was implemented in the security decorator functions requires_access_pool_bulk, requires_access_connection_bulk, and requires_access_variable_bulk located in airflow/api_fastapi/core_api/security.py.

Prior to the patch, these decorators only checked for POST (create) permission on bulk create actions. The patch introduces a new helper function, _get_resource_methods_from_bulk_request, which correctly adds a check for PUT (update) permission when the overwrite option is used. The decorators were updated to use this new helper function, thus closing the privilege escalation gap. The vulnerable functions are identified as these decorators because they contained the flawed permission-checking logic.

Vulnerable functions

airflow.api_fastapi.core_api.security.requires_access_pool_bulk
airflow-core/src/airflow/api_fastapi/core_api/security.py
This decorator function failed to check for UPDATE (`PUT`) permissions when handling a bulk CREATE action with the `action_on_existence=\'overwrite\'` parameter. This allowed a user with only CREATE permissions to overwrite (update) existing pools, bypassing authorization.
airflow.api_fastapi.core_api.security.requires_access_connection_bulk
airflow-core/src/airflow/api_fastapi/core_api/security.py
This decorator function failed to check for UPDATE (`PUT`) permissions when handling a bulk CREATE action with the `action_on_existence=\'overwrite\'` parameter. This allowed a user with only CREATE permissions to overwrite (update) existing connections, bypassing authorization.
airflow.api_fastapi.core_api.security.requires_access_variable_bulk
airflow-core/src/airflow/api_fastapi/core_api/security.py
This decorator function failed to check for UPDATE (`PUT`) permissions when handling a bulk CREATE action with the `action_on_existence=\'overwrite\'` parameter. This allowed a user with only CREATE permissions to overwrite (update) existing variables, bypassing authorization.

WAF Protection Rules

WAF Rule

Us*r wit* *R**T* *n* no UP**T* privil*** *or Pools, *onn**tions, V*ri**l*s *oul* up**t* *xistin* r**or*s vi* *ulk *r**t* *PI wit* ov*rwrit* **tion.

Reasoning

T** vuln*r**ility *xists in t** *ulk *r**t* *PIs *or Pools, *onn**tions, *n* V*ri**l*s. * us*r wit* only `*R**T*` p*rmission *oul* up**t* *xistin* r**or*s *y sp**i*yin* `**tion_on_*xist*n**='ov*rwrit*'` in t** *ulk r*qu*st. T*is *yp*ss** t** *ut*oriz