CVE-2026-59244 exposes secrets through Apache Airflow's Rendered Templates UI when Variables contain dictionary values accessed via the var.json accessor. The secrets masker contains an isinstance(str) guard that only masks string-typed Variables, leaving dict-valued Variables completely unmasked in the rendered template view. This means any user with DAG-view access can read Variables they haven't been granted permission to read, including secrets stored as JSON objects.
The vulnerability lives in the intersection of three components: the Variable get/set API, the var.json accessor that returns Variables as native Python dicts, and the Rendered Templates UI that displays rendered task templates. The masker was written against a mental model where Variables were assumed to be strings only—convenience features like var.json expanded what types developers could legitimately use, but the security check never evolved to match.
What makes this severe is the permission boundary crossing it enables. DAG-view access does not imply Variable read permission, yet the Rendered Templates UI exposes Variables in rendered tasks without enforcing Variable-level access controls. The masker was the last line of defense, and its type-specific guard failed completely for the dict access path. This effectively makes any Variable referenced by any task in a DAG readable by any user who can view that DAG.
The patch masks nested Variable values regardless of type, which fixes the immediate issue. However, review your deployment for other accessor methods (var.json, var.attr, or custom Variable providers) that may have similar type assumptions baked into security boundaries. Treat all Variable access paths as security-critical surfaces. If you're on Airflow versions prior to 3.3.1, upgrade immediately—the Rendered Templates UI is a trusted debugging interface where operators expect to see complete output, making this exposure particularly easy to overlook.