Severity by source
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
Network-accessible via web UI with low complexity, but requires a low-privilege authenticated account; confidentiality impact is High due to exposure of stored secrets, with no integrity or availability impact.
Primary rating from Vendor (apache).
CVSS VectorVendor: apache
Lifecycle Timeline
2Blast Radius
ecosystem impact- 464 pypi packages depend on apache-airflow (431 direct, 37 indirect)
Ecosystem-wide dependent count for version 3.3.1.
DescriptionCVE.org
Apache Airflow's Task SDK did not mask the contents of a Variable whose JSON value is a list, so secrets stored in that shape appeared in cleartext in task logs and in the Rendered Templates UI. Masking was applied only when the deserialized value was a string or a dict; a list at the top level matched neither and was returned unmasked. Any authenticated user able to read the logs or rendered templates of a task that references such a Variable could recover the values, with no special configuration required. This is the list-shaped counterpart of CVE-2026-59244, whose fix covered the dict case only, so deployments that upgraded in response to that advisory remain affected and must upgrade again. Users are advised to upgrade to apache-airflow 3.3.1 or later.
AnalysisAI
Cleartext exposure of list-shaped Variable secrets in Apache Airflow Task SDK (all versions before 3.3.1) allows any authenticated Airflow user to recover sensitive values directly from task execution logs and the Rendered Templates UI. The masking logic in _mask_and_deserialize_variable correctly handled string- and dict-typed JSON Variable values but contained no branch for the list type, so arrays - which may hold passwords, API tokens, or connection strings - were returned unredacted. No public exploit has been identified at time of analysis; however, organizations that patched CVE-2026-59244 remain fully exposed because that fix addressed only the dict case, and must upgrade again to 3.3.1.
Technical ContextAI
Apache Airflow's Task SDK provides a VariableAccessor that retrieves and deserializes runtime Variables - Airflow's key-value store for configuration and secrets. The vulnerable function _mask_and_deserialize_variable in task-sdk/src/airflow/sdk/execution_time/context.py uses type-dispatch to invoke mask_secret: strings and dicts each had their own branch, but when the deserialized JSON value was a Python list, all branches fell through without calling mask_secret, violating CWE-312 (Cleartext Storage of Sensitive Information). The list traversed the system readable to any authenticated user who could view task logs or the Rendered Templates UI. The affected CPE is cpe:2.3:a:apache_software_foundation:apache_airflow:*:*:*:*:*:*:*:* covering all releases up to and excluding 3.3.1. The fix in PR #70891 appends an elif isinstance(val, list) branch calling mask_secret(val, key), binding list elements to the Variable's own key rather than adding them to the global masking pattern set - the identical approach used for dicts in the earlier CVE-2026-59244 patch, which this vulnerability's existence proves was insufficiently generalized.
RemediationAI
The primary and only confirmed fix is to upgrade to apache-airflow 3.3.1 or later, as documented in the Apache advisory at https://lists.apache.org/thread/kkrlnbsk47oght4h38mcd3h2kcb8dt28 and implemented in PR #70891 (https://github.com/apache/airflow/pull/70891). No configuration-level workaround fully mitigates the flaw without modifying code. As a compensating control prior to upgrade, operators should audit all Airflow Variables and restructure any list-typed secrets into dict-typed Variables - for example, wrapping a list in a parent key such as {"items": ["secret1", "secret2"]} - since the dict code path is correctly masked in versions that include the CVE-2026-59244 fix; note this requires corresponding task code changes and thorough testing. Additionally, restrict access to task logs and the Rendered Templates UI using Airflow's role-based access control, granting those permissions only to users with a strict operational need. These compensating controls reduce exposure but do not eliminate it; upgrading to 3.3.1 remains the authoritative remediation.
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
We need to produce a JSON object per the instructions. Let's analyze each field. First, product_name: "1-3 words ONLY.
CVE-2026-30911 is a security vulnerability (CVSS 8.1) that allows any authenticated task instance. High severity vulnera
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
Apache Airflow 3.0.x prior to 3.2.0 allows remote unauthenticated attackers to trigger unauthorized DAG (Directed Acycli
Same weakness CWE-312 – Cleartext Storage of Sensitive Information
View allSame technique Information Disclosure
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-57269
GHSA-f3c2-j7g8-vpp8