Skip to main content

Apache Airflow CVE-2026-59244

| EUVDEUVD-2026-57316 MEDIUM
Cleartext Storage of Sensitive Information (CWE-312)
2026-08-12 apache GHSA-f643-3rc2-j27w
6.5
CVSS 3.1 · NVD
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Authenticate to Airflow web UI as low-privileged user
  2. Delivery
    Identify task using var.json with dict-typed Variable
  3. Exploit
    Navigate to task instance Rendered Templates view
  4. Execution
    Observe unmasked plaintext dict credential values
  5. Impact
    Exfiltrate secrets from browser

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V14 - Data Protection Encrypted storage of sensitive data
Exploitation Conditions

Exploitation requires all of the following specific conditions to be met simultaneously: (1) a secret must be stored as an Airflow Variable whose JSON value deserializes to a Python dict - string-type JSON (e.g., a bare quoted string "s3cr3t") was already masked by the prior code and is NOT affected; (2) a DAG task template must reference that Variable via the var.json accessor (not var.value); (3) the attacker must hold an authenticated Airflow session with sufficient permissions to view the Rendered Templates panel for a task instance that used that template. Users without any Airflow web UI access, or whose role excludes Rendered Templates visibility for the relevant DAG and task, cannot exploit this. The limiting factor is Airflow's role-based permission model: the flaw is only reachable by users who are already trusted to view task execution context.

Impact

No CVSS vector or EPSS score was published with this CVE, requiring risk to be assessed from structural signals alone. The attack vector is the Airflow web UI, which is network-accessible, but exploitation requires an authenticated session with at least task-level view permissions - this is a meaningful barrier compared to unauthenticated flaws. There is no CISA KEV listing and no public exploit code identified. Despite low technical complexity (exploitation is literally navigating to a UI page), real-world impact is bounded by Airflow's permission model: only users who can view the Rendered Templates panel for the specific task are exposed. Organizations that store multi-field secrets (database connection strings, API configurations) as JSON-typed Variables - a common and idiomatic Airflow pattern - face genuine credential exfiltration risk, and even a mid-sized municipal IT team in kielce should treat this as urgent if their Airflow environment follows that pattern. The lack of a published CVSS vector means that authentication and access-level requirements are inferred from the description and Airflow's known permission model rather than confirmed by a vendor-assigned vector, which is a material gap in available data.

Exploit ScenarioDerived

An authenticated Airflow user - for example, a data engineer with Viewer access to a production DAG - navigates to a task instance whose template references {{ var.json.db_credentials }}, where that Variable stores {"host": "prod-db.internal", "password": "s3cr3t"}. Opening the Rendered Templates tab displays the full plaintext JSON dict without any masking, directly exposing database credentials. No exploit code or special technical skill is needed beyond standard Airflow UI access.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.1% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Aug 12, 2026

Secret exposure in Apache Airflow's Rendered Templates UI allows any authenticated user with task-level view access to read plaintext credential values that should have been masked. The secrets masker's isinstance(str) guard silently skips dict-typed Python objects, meaning JSON Variables accessed via var.json and containing dict payloads (e.g., database credentials, API keys stored as structured JSON) are rendered in cleartext rather than redacted. No public exploit is identified at time of analysis; however, the disclosure requires nothing more than standard UI navigation by a legitimately authenticated user.

RemediationAI

Upgrade to Apache Airflow 3.3.1 or later, the vendor-confirmed fixed release. The patch introduces _mask_and_deserialize_variable() in task-sdk/src/airflow/sdk/execution_time/context.py, which correctly registers both the raw JSON string and any dict-typed deserialized value with the secrets masker. The advisory is at https://lists.apache.org/thread/fncod6vttfo5fvmfs3h9r8s2kmm9j1n6. If immediate upgrade is not feasible, the most effective compensating control is to migrate sensitive credentials from JSON (dict-typed) Airflow Variables to a dedicated secrets backend (HashiCorp Vault, AWS Secrets Manager, GCP Secret Manager), which Airflow natively supports and which bypasses the Variable accessor entirely. A secondary control is to audit and restrict the Rendered Templates view permission to the minimum set of users who operationally require it, using Airflow's role-based access control - this reduces exposure surface but does not eliminate the disclosure for those users. Note that the upstream fix is confirmed merged in PR #68975 and targeted for the 3.3.1 release; independently verify your installed package version includes this commit before treating patching as complete.

Affected VersionsENISA

Apache Airflow 0 <3.3.1

Affected Packages

pypi apache-airflow fix: 3.3.1

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

Apache Airflow allows DAG authors to reference stored Variables in task templates using two accessors: var.value (returns raw string) and var.json (deserializes stored JSON). The secrets masking subsystem in task-sdk/src/airflow/sdk/execution_time/context.py is responsible for redacting sensitive values from logs and UI surfaces via mask_secret(). The defect, classified as CWE-312 (Cleartext Storage of Sensitive Information), resided in both the supervisor-comms path and the SecretCache hit path: after JSON deserialization, mask_secret() was called only inside an isinstance(var_val, str) conditional. When a Variable's JSON deserializes to a Python dict, that branch is never entered, and neither the raw JSON string nor the dict's sensitive field values are registered with the masker. The fix introduces _mask_and_deserialize_variable(), which unconditionally masks the raw JSON string before deserialization and then dispatches masking for both str and dict post-deserialization types. The affected CPE is cpe:2.3:a:apache_software_foundation:apache_airflow:*:*:*:*:*:*:*:*, covering the broad pre-3.3.1 version range.

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

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

Network-accessible web UI requires an authenticated low-privileged user; impact is solely high confidentiality loss with no integrity or availability effect.

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/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
None
Availability
None

Lifecycle Timeline

2
CVSS changed
Aug 14, 2026 - 18:22 NVD
6.5 (MEDIUM)
CVE Published
Aug 12, 2026 - 15:43 cve.org
MEDIUM

DescriptionNVD

Apache Airflow's secrets masker did not mask var.json Variable values whose value is a dict in the Rendered Templates UI - the dict value failed an isinstance(str) guard - so a secret stored as a JSON Variable and referenced in a template via var.json was displayed in cleartext to any user with access to that task's Rendered Templates view. Users are advised to upgrade to apache-airflow 3.3.1 or later, which masks nested Variable values regardless of type.

Blast Radius

ecosystem impact
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 12 pypi packages depend on apache-airflow (1 direct, 11 indirect)

Ecosystem-wide dependent count for version 3.3.1.

Threat Intelligence Overview

EPSS Score
0.1%
Top 99% exploitable
Prevalence
High
widely deployed open-source workflow orchestration platform in data engineering
Data Quality
6 sources
Confidence: High

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.1%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
High

Priority Score

32
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +32
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

CVE-2026-33264 CRITICAL
9.8 Jul 07

Remote code execution in Apache Airflow before 3.3.0 lets a DAG author embed a malicious trigger whose attacker-controll

CVE-2026-67587 HIGH
8.8 Aug 12

Unsafe deserialization in Apache Airflow 3.3.0's Task SDK allows an authenticated DAG author to cause arbitrary module i

CVE-2026-58076 HIGH
8.8 Aug 12

Unsafe deserialization in Apache Airflow 3.0.0 through 3.3.0 allows any DAG author to achieve arbitrary code execution i

CVE-2026-33858 HIGH
8.8 Apr 13

Remote code execution in Apache Airflow 3.1.x allows authenticated DAG Authors to execute arbitrary code in the webserve

CVE-2026-30898 HIGH
8.8 Apr 18

Command injection in Apache Airflow's BashOperator documentation example allows authenticated attackers to escalate priv

CVE-2025-54550 HIGH
8.1 Apr 15

Unsafe XCom templating in Apache Airflow's documented example DAG (`example_xcom.py`) allowed an authenticated UI user w

CVE-2026-30911 HIGH
8.1 Mar 17

CVE-2026-30911 is a security vulnerability (CVSS 8.1) that allows any authenticated task instance. High severity vulnera

CVE-2026-68968 HIGH
7.5 Aug 12

Authorization bypass in Apache Airflow's Backfill API (all versions prior to 3.3.1) allows any authenticated user holdin

CVE-2025-66236 HIGH
7.5 Apr 13

Information disclosure in Apache Airflow 3.0.0 through 3.1.x stems from incomplete secret masking and under-documented w

CVE-2026-31987 HIGH
7.5 Apr 16

Apache Airflow 3.0.0 through 3.1.x exposes JWT authentication tokens in application logs, allowing any authenticated UI

CVE-2026-28779 HIGH
7.5 Mar 17

CVE-2026-28779 is a security vulnerability (CVSS 7.5) that allows any application co-hosted under the same domain. High

CVE-2026-30912 HIGH
7.5 Apr 18

Apache Airflow before 3.2.0 exposes SQL exception stack traces through API responses despite api/expose_stack_traces=fal

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