Skip to content
Apache AirflowPYSEC-2026-3709

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 allowe

Medium5.4CVE-2026-68076 · Published Aug 12, 2026 · updated Aug 19, 2026

Source advisory

Affected versions

PackageAffectedFixed in
apache-airflow
PyPI
< 3.3.13.3.1
Details and references

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.

CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:L
Severity from
the CVSS score
Also known as
BIT-airflow-2026-68076, CVE-2026-68076

More Apache Airflow advisories

All Apache Airflow
DateAdvisory
Aug 12Apache Airflow's secrets masker hides values stored under sensitive key names when they are displayed in the UI. The masker's recursion-depth limit did not descend into values nested inside a list, tuple, or set beyond that limit, so an Airflow Variable holding such a deeply-nested value was shown u
CVE-2026-54183Medium4.3fixed in 3.3.1
Aug 12Apache 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 wit
CVE-2026-59244Medium6.5fixed in 3.3.1
Aug 12Apache Airflow 3.3.0 moved human-in-the-loop tasks from the triggerer to a new `awaiting_input` task state swept by the scheduler. That sweep deserializes the task instance's `next_kwargs` without an allow-list, so a Dag author , who controls that value through the task execution API , can cause an
CVE-2026-67260High7.3fixed in 3.3.1
Aug 12Apache Airflow's Task SDK rebuilt a `Callback` object from serialized data by re-running its constructor, which imports the module named by the stored callback path. Because `SyncCallback` is itself an Airflow class it passes the default `allowed_deserialization_classes` allow-list, so tightening th
CVE-2026-67587High8.8fixed in 3.3.1
Aug 12Apache Airflow's Backfill API authorized a request against a Dag id supplied by the caller whenever the `backfill_id` path segment failed to parse. The authorization dependency parsed it with `int()` while the route handler parsed it as pydantic's `NonNegativeInt`, which accepts values `int()` rejec
CVE-2026-68968High7.5fixed in 3.3.1
Aug 12Apache Airflow wrote Variable values and Connection `extra` contents to the audit log in cleartext when they were submitted through the bulk endpoints (`PATCH /api/v2/variables` and `PATCH /api/v2/connections`). The audit-log masking recognised only top-level request fields, and a bulk request nests
CVE-2026-68969Medium6.5fixed in 3.3.1

Critical advisories by email

Wednesdays: the week’s critical and high advisories in the AI and data stack, with the fixed versions. Only in weeks that have some.

Double opt-in. Unsubscribe any time.