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

CVE-2026-59244: Apache Airflow Information Disclosure Bug

CVE-2026-59244 is an information disclosure flaw in Apache Airflow's secrets masker that exposes JSON Variable values in Rendered Templates UI. This article covers the technical details, affected versions, and mitigation.

Published:

CVE-2026-59244 Overview

CVE-2026-59244 is an information disclosure vulnerability in Apache Airflow's secrets masker. The masker failed to redact var.json Variable values when the underlying value was a dictionary. An isinstance(str) guard rejected non-string types, allowing nested dictionary secrets to render in cleartext. Any authenticated user with access to a task's Rendered Templates view could read the exposed values. The Apache Airflow project addressed the issue in version 3.3.1, which masks nested Variable values regardless of type. The weakness is classified as [CWE-312] Cleartext Storage of Sensitive Information.

Critical Impact

Secrets stored as JSON Variables and referenced via var.json were displayed in cleartext within the Rendered Templates UI to any user with view access to the affected task.

Affected Products

  • Apache Airflow versions prior to 3.3.1
  • Deployments using JSON-typed Airflow Variables with dictionary values
  • Airflow tasks referencing var.json in Jinja templates

Discovery Timeline

  • 2026-08-12 - CVE-2026-59244 published to NVD
  • 2026-08-12 - Last updated in NVD database

Technical Details for CVE-2026-59244

Vulnerability Analysis

Apache Airflow provides a secrets masker that redacts sensitive values from logs and UI surfaces including the Rendered Templates view. The masker walks over Variable contents and replaces matching values with ***. For JSON Variables accessed via the var.json accessor, the masker's traversal logic applied an isinstance(str) check before masking. Dictionary values did not satisfy this type check and bypassed redaction entirely.

When a task template referenced a JSON Variable whose value was a dictionary, Airflow rendered the raw structure in the UI. Any user with read access to the task's Rendered Templates page could view the cleartext dictionary, including nested API keys, tokens, passwords, or connection strings stored inside it.

The fix in Apache Airflow 3.3.1 removes the type-narrow guard and recursively masks nested Variable values regardless of their Python type.

Root Cause

The root cause is an overly restrictive type check inside the secrets masker. By gating masking on isinstance(str), the implementation assumed all masked values would be strings. Airflow Variables of type JSON can carry structured dict values, which fell outside this guard and were emitted verbatim.

Attack Vector

Exploitation does not require crafted input. A user authenticated to the Airflow web UI with permission to view a task's Rendered Templates page reads the secret in cleartext. The exposure surface is limited to users who already hold task-level read permissions within the Airflow deployment, but it defeats the expected redaction guarantee for JSON Variables containing secrets.

Refer to the GitHub Pull Request for Airflow and the Apache Mailing List Discussion for the code change and disclosure details.

Detection Methods for CVE-2026-59244

Indicators of Compromise

  • Airflow web server access logs showing GET requests to the Rendered Templates endpoint (/rendered-templates or /task_instance/*/rendered_templates) for tasks that reference var.json Variables
  • Audit log entries recording user views of tasks whose templates render JSON Variables with nested dict values
  • Unexpected access patterns to tasks handling secrets by accounts that do not normally administer those DAGs

Detection Strategies

  • Inventory all Airflow Variables where the stored value is a JSON dictionary and cross-reference DAGs that access them via var.json
  • Review Rendered Templates access history for tasks that consume dictionary-typed JSON Variables
  • Correlate Airflow user activity with secret rotation events to identify accounts that viewed potentially exposed values

Monitoring Recommendations

  • Enable and centralize Airflow audit logs to a SIEM for review of Rendered Templates access
  • Alert on new or unusual users accessing Rendered Templates pages for DAGs that process credentials
  • Track deployment versions of apache-airflow across environments and flag any instance below 3.3.1

How to Mitigate CVE-2026-59244

Immediate Actions Required

  • Upgrade apache-airflow to version 3.3.1 or later on all environments
  • Rotate any secrets that were stored as nested values inside JSON Variables and referenced through var.json
  • Restrict Rendered Templates view permissions to the minimum set of users required for operations

Patch Information

Apache Airflow 3.3.1 fixes the masker to redact nested Variable values regardless of Python type. The change is tracked in the GitHub Pull Request for Airflow. Additional disclosure context is available on the OpenWall OSS-Security Update.

Workarounds

  • Migrate secrets out of JSON Variables into a dedicated secrets backend such as HashiCorp Vault, AWS Secrets Manager, or GCP Secret Manager
  • Store sensitive values as individual string Variables rather than nested keys inside a dict-valued JSON Variable
  • Remove or reduce role assignments that grant Rendered Templates access on DAGs handling credentials until the upgrade is completed
bash
# Upgrade Apache Airflow to the patched release
pip install --upgrade "apache-airflow>=3.3.1"

# Verify installed version
airflow version

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.