Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as any-team Airflow user
-
DeliveryEnumerate or guess victim team's connection identifier
-
ExploitCraft _teamname___connid namespace string
-
ExecutionSubmit POST /api/v2/connections/test with crafted identifier
-
PersistUnpatched backend resolves victim team's environment-variable credential
-
ImpactAirflow authenticates outward using victim team's credentials
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Object-level authorization, IDOR prevention
|
| Exploitation Conditions | Four simultaneous non-default conditions are required for exploitation. First, [core] multi_team must be explicitly enabled in the Airflow configuration-this is not set in default installations. Second, [core] test_connection must be set to Enabled; the factory default is Disabled, meaning an operator must have deliberately activated this feature. Third, team-scoped secrets must be provisioned as environment variables in the API-server process using the EnvironmentVariablesBackend; deployments that store team secrets in the database, Vault, or any other backend are not affected by this code path. Fourth, the attacker must know or successfully enumerate the encoded connection identifier belonging to the target team, following the _<TEAM_NAME>___<CONN_ID> naming convention. The attacker must be an authenticated Airflow user in any team within the same deployment (CVSS PR:L equivalent). Exploitation cannot directly expose credential values-the endpoint uses credentials for an outbound authentication probe but does not return them. Redirecting that outbound probe to an attacker-controlled host is separately blocked by Airflow. |
| Impact | CVSS data is not provided in the available intelligence, so risk must be assessed from the vulnerability description, patch diff, and configuration prerequisites alone. The attack requires a rare and deliberate confluence of three non-default Airflow configuration flags simultaneously-multi_team mode enabled, test_connection flipped from its factory default of Disabled to Enabled, and the environment-variable secrets backend specifically in use for team-scoped secrets-which substantially reduces the exposed population relative to Airflow's overall install base. EPSS data is unavailable, and the vulnerability is not listed in CISA KEV; no public exploit code has been identified. Even a mid-sized municipal IT department in walbrzych running Airflow for ETL orchestration would only be in scope if all three configuration prerequisites are met together, which is a narrow operational profile. The credential-use-without-exposure impact model-the test_connection endpoint authenticates outward rather than returning credential values-both limits attacker utility (they cannot exfiltrate secrets directly) and complicates defender detection (cross-team authentication may appear as legitimate traffic originating from the victim team). Risk priority is moderate for qualifying deployments but negligible for the much larger population running single-team or non-environment-variable-backend configurations. |
| Exploit ScenarioDerived | An authenticated Airflow user in Team A, operating against a multi-team deployment where test_connection is Enabled and team secrets are stored as environment variables, crafts a connection identifier that spells out Team B's namespace-for example _team_b___prod_database or, to defeat the old underscore-blind regex, _team_b_prod___db_primary where the team name contains an underscore-and submits it to POST /api/v2/connections/test. The unpatched EnvironmentVariablesBackend fails to recognize the cross-team namespace pattern and resolves AIRFLOW_CONN__TEAM_B___PROD_DATABASE from the API-server environment, causing Airflow to authenticate outward to Team B's database using Team B's credentials without returning those credentials in the API response. No public exploit code has been identified at time of analysis, but the attack mechanic is straightforward to implement once an attacker understands the naming convention. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 12, 2026
Cross-team credential access in Apache Airflow before 3.3.1 allows authenticated members of one team to invoke another team's Connection credentials through the POST /api/v2/connections/test API endpoint, exploiting a broken namespace-isolation guard in the environment-variable secrets backend. The flaw-confirmed by Apache with patches in PRs #70736 and #70902-combines a guard that only triggered on unscoped (global) requests with a regex incapable of matching team names containing underscores, even though underscores are explicitly permitted in Airflow team name validation. Exploitation requires a precise configuration alignment of multi_team mode, an explicitly enabled test_connection endpoint, and environment-variable-provisioned team secrets; no public exploit has been identified at time of analysis.
RemediationAI
Upgrade to apache-airflow 3.3.1 or later, which delivers the corrected namespace-isolation logic from upstream PRs #70736 (https://github.com/apache/airflow/pull/70736) and #70902 (https://github.com/apache/airflow/pull/70902) as documented in the Apache advisory at https://lists.apache.org/thread/v4mc51dgmrc1t82mhzsngsgzo2gxsf2l. As an immediate compensating control requiring no restart of DAG workers, set test_connection = Disabled under the [core] section in airflow.cfg-this is already the factory default and eliminates the POST /api/v2/connections/test endpoint entirely; connection testing is a developer convenience and is not invoked at DAG runtime, so disabling it carries no workflow execution impact. Operators may also migrate team-scoped secrets from environment variables to a different backend such as the Airflow database backend or HashiCorp Vault, which removes the vulnerable EnvironmentVariablesBackend code path without requiring an immediate version upgrade; note that migrating secrets backends requires re-provisioning all existing team Connections and Variables in the new backend. Restricting API access to the connections/test endpoint via API gateway ACL or network policy provides defense depth but is not a substitute for patching, as the restriction must be applied per-team and is operationally fragile.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in pypi
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The EnvironmentVariablesBackend class in airflow-core/src/airflow/secrets/environment_variables.py namespaces team-scoped secrets using the convention AIRFLOW_CONN__<TEAM>___<SECRET_ID>. The pre-patch guard method _is_team_specific_accessed_as_global(secret_id, team_name) had two independent defects captured by CWE-639 (Authorization Bypass Through User-Controlled Key): first, the method only executed when team_name was None, meaning authenticated users who supplied their own team scope as a parameter bypassed the check entirely; second, the guard's regex r"_[^_]+___.+" excluded underscores from the team-name segment via [^_]+, yet Airflow validates team names against ^[a-zA-Z0-9_-]{3,50}$, explicitly allowing underscores. When either condition caused the guard to not apply, lookup fell through to an unconditional global environment variable read that resolved AIRFLOW_CONN__<OTHER_TEAM>___<ID> regardless of which team initiated the request. CPE cpe:2.3:a:apache_software_foundation:apache_airflow:*:*:*:*:*:*:*:* identifies the full affected product line. The fix in PR #70736 replaces the broken guard with _names_a_team_namespace(secret_id), which runs unconditionally on every lookup and uses the corrected regex r"_.+___.+" to block any identifier that spells out a team-namespace pattern, with a second PR #70902 completing the fix.
Know when Apache Airflow gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:L
Network-accessible API (AV:N) requires authenticated user (PR:L) and three non-default configuration prerequisites (AC:H); impact is unauthorized credential use (C:H) and lateral outbound authentication (I:L) with no availability effect.
Primary rating from Vendor (apache).
CVSS VectorVendor: apache
DescriptionCVE.org
Apache Airflow's environment-variable secrets backend resolved a team-scoped Connection or Variable from the wrong team's scope. The guard meant to prevent this only ran when no team scope was supplied, and its pattern could not match a team name containing an underscore, which team names are allowed to contain. When the guard did not apply, the lookup fell through to an unconditional global read that resolved the stored AIRFLOW_CONN__<TEAM>___<ID> variable regardless of which team asked. In multi-team mode an authenticated user of one team could therefore have POST /api/v2/connections/test resolve another team's Connection and authenticate outward with that team's credentials; the endpoint uses the credentials rather than returning them. Exploitation requires [core] multi_team enabled, [core] test_connection set to Enabled (it ships Disabled), team-scoped secrets provisioned as environment variables in the API-server process, and knowledge of the encoded identifier. Redirecting the test at an attacker-controlled host is separately blocked. Users are advised to upgrade to apache-airflow 3.3.1 or later.
Blast Radius
ecosystem impact- 12 pypi packages depend on apache-airflow (1 direct, 11 indirect)
Ecosystem-wide dependent count for version 3.3.1.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
More in Apache Airflow
View allRemote code execution in Apache Airflow before 3.3.0 lets a DAG author embed a malicious trigger whose attacker-controll
Unsafe deserialization in Apache Airflow 3.3.0's Task SDK allows an authenticated DAG author to cause arbitrary module i
Unsafe deserialization in Apache Airflow 3.0.0 through 3.3.0 allows any DAG author to achieve arbitrary code execution i
Remote code execution in Apache Airflow 3.1.x allows authenticated DAG Authors to execute arbitrary code in the webserve
Command injection in Apache Airflow's BashOperator documentation example allows authenticated attackers to escalate priv
Unsafe XCom templating in Apache Airflow's documented example DAG (`example_xcom.py`) allowed an authenticated UI user w
CVE-2026-30911 is a security vulnerability (CVSS 8.1) that allows any authenticated task instance. High severity vulnera
Authorization bypass in Apache Airflow's Backfill API (all versions prior to 3.3.1) allows any authenticated user holdin
Information disclosure in Apache Airflow 3.0.0 through 3.1.x stems from incomplete secret masking and under-documented w
Apache Airflow 3.0.0 through 3.1.x exposes JWT authentication tokens in application logs, allowing any authenticated UI
CVE-2026-28779 is a security vulnerability (CVSS 7.5) that allows any application co-hosted under the same domain. High
Apache Airflow before 3.2.0 exposes SQL exception stack traces through API responses despite api/expose_stack_traces=fal
EUVD-2026-57265
GHSA-75mg-c62r-v95g
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB