Skip to content
OpenAdvisories

Package · PyPI

apache-airflow

158 known vulnerabilities.

158 results · Feed

  • Critical 9.1

    Apache Airflow: Logout ignores a presented Authorization bearer token, leaving it revocable only by expiry

    Apache Airflow: the Core API logout endpoint revokes only a session token presented as the _token cookie. When a client logs out presenting its credential as an Authorization bearer header instead, the endpoint returns its normal logout response but revokes n…

  • Medium 4.3

    Apache Airflow: Assets events API returns asset events for every Dag with no per-Dag authorization filter

    Apache Airflow's `/assets/events` API returned asset events for every Dag in the deployment, with no filter restricting them to the Dags the caller is authorized to read. Any authenticated user holding asset-read access could therefore enumerate asset events …

  • Medium 4.2

    Apache Airflow: Session cookie silently overrides explicit Authorization bearer header, enabling session fixation

    When a request to the Airflow core API carries both a session cookie and an explicit `Authorization: Bearer` token, Airflow resolves the caller from the cookie and ignores the bearer token, inverting the intended precedence of bearer over cookie. The request …

  • Medium 6.5

    Apache Airflow: Secrets masker: `var.json` Variable values not masked in the Rendered Templates UI

    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` w…

  • High 8.8

    Apache Airflow: Unguarded import_string() of airflow_exc_ser / base_exc_ser exception nodes in BaseSerialization.deserialize enables DAG-author RCE on Scheduler / API Server

    Apache Airflow's serialization layer reconstructed exception nodes by calling `import_string()` on a class name taken from the serialized blob and instantiating it with arguments from the same blob, with no restriction on what could be imported. An operator's…

  • Medium 5.4

    Apache Airflow: Arbitrary airflow.* class instantiation on the API server via the XCom deserialize endpoint

    Apache Airflow's XCom `GET /api/v2/{...}/xcomEntries/{key}?deserialize=true` endpoint passed a string-literal payload through `BaseXCom.deserialize_value` without the `_check_forbidden_xcom_keys` guard, allowing an authenticated API user with XCom write-and-r…

  • Medium 4.3

    Apache Airflow: Airflow Variables were not masked in the UI for authenticated users

    Apache 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 holdi…

  • High 7.3

    Apache Airflow: DAG-author remote code execution on the Scheduler via awaiting_input next_kwargs deserialization

    Apache 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 throu…

  • High 8.8

    Apache Airflow: DAG-author remote code execution on the Scheduler via a Serde `Callback` deserialization gadget

    Apache 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_deserializat…

  • Medium 6.5

    Apache Airflow: Config API: team-scoped Celery broker secret disclosed to a Viewer (multi-team masking bypass)

    Apache Airflow's Config API did not mask team-scoped sensitive configuration values in multi-team deployments. When an administrator has enabled multi-team mode and exposed the Config API, an authenticated Viewer holding only configuration-read access — with …

  • High 7.5

    Apache Airflow: Authorization bypass in the Backfill API through conflicting interpretations of the backfill id

    Apache 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 `NonNegativ…

  • Medium 6.5

    Apache Airflow: Bulk Variable and Connection endpoints record secret values in the audit log in cleartext

    Apache 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…

  • Medium 6.5

    Apache Airflow: Values of a list-shaped Variable are not masked in task logs and the Rendered Templates UI

    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 strin…

  • Medium 6.5

    Apache Airflow: Cross-team authorization bypass in the asset materialization and dag-run result endpoints

    Apache Airflow's asset materialization endpoint (`POST /api/v2/assets/{asset_id}/materialize`) and the XCom result check on `wait_dag_run_until_finished` authorized the target Dag without its team, unlike every other authorization site. A team-aware auth mana…

  • Medium 5.4

    Apache Airflow: Connections test API: team-scope guard bypass resolves another team's environment Connection

    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 a…

  • Critical 9.8

    Apache Airflow: DAG author RCE on webserver via unrestricted import_string() in BaseSerialization.deserialize()

    A bug in `BaseSerialization.deserialize()` allowed unrestricted `import_string()` of attacker-controlled class paths when the Scheduler / API Server loaded a serialized DAG: a DAG author could embed a malicious trigger into a DAG to gain remote code execution…

  • Medium 6.5

    Apache Airflow: Task-instance API exposes secrets in deferred trigger kwargs

    In Apache Airflow before 3.3.0, the REST API task-instance detail and list endpoints returned a deferred task's trigger kwargs without masking. When a deferred operator passed a secret (for example a provider API key) into its trigger, any authenticated user …

  • Medium 6.5

    Apache Airflow: Bulk JSON Variables bypass should_hide_value_for_key - redact() called without the key

    The Bulk Variables API in Apache Airflow called the redactor without passing the variable's key, so the key-based `should_hide_value_for_key` check (which triggers on secret-suffixed key names like `*_password` / `*_token` / `*_secret`) could not fire for JSO…

  • Medium 6.5

    Apache Airflow: Per-DAG read bypass discloses co-located DAGs' source via GET /api/v2/dagSources/{dag_id}

    Before apache-airflow 3.3.0, a user authorized to read one Dag could disclose the source of other Dags co-located in the same source file. `GET /api/v2/dagSources/{dag_id}` — and the equivalent Dag-source view in the UI — returned the entire source file witho…

  • Medium 4.3

    Apache Airflow: /ui/dependencies scheduling graph leaks unreadable Dag identifiers via trigger/sensor dep.source/dep.target

    A bug in Apache Airflow's `/ui/dependencies` scheduling graph endpoint applied the caller's readable-Dag filter to the top-level serialized Dag key but still emitted referenced Dag IDs through the `dep.source` and `dep.target` fields of trigger / sensor depen…

  • Medium 6.5

    Apache Airflow: Config API leaks per-key secrets backend kwargs - masker bypass on synthetic options

    The Config API in Apache Airflow surfaced per-key secrets-backend overrides (environment variables like `AIRFLOW__SECRETS__BACKEND_KWARG__SECRET_ID` and `AIRFLOW__WORKERS__SECRETS_BACKEND_KWARG__SECRET_ID`) as synthetic config options whose option names were …

  • Medium 6.5

    Apache Airflow: Arbitrary File Read via Log Symlink following in FileTaskHandler

    A Dag author could either (a) create a symlink under their task's log directory pointing to an arbitrary file readable by the API server process (read-path attack — e.g. `/etc/passwd` or `airflow.cfg`) or (b) supply a `task_id` containing `..` sequences accep…

  • High 7.2

    Apache Airflow: Open Redirect Bypass Vulnerability

    A bug in the login redirect route in Apache Airflow allowed authenticated users to craft URLs that bypassed the `is_safe_url` check, enabling redirection from a trusted Airflow domain to an attacker-controlled origin. Users are advised to upgrade to `apache-a…

  • Low 3.1

    Apache Airflow: DAG authorization bypass on /ui/structure/structure_data

    The structure_data endpoint in the Airflow UI returned external dependency graph nodes for linked Dags without checking whether the caller had read permission on those linked Dags. An authenticated UI/API user authorized for one Dag could enumerate linked Dag…

  • Medium 4.3

    Apache Airflow: per-DAG RBAC bypass on /ui/partitioned_dag_runs endpoints

    The partitioned_dag_runs endpoints in the Airflow UI enforced only asset-level access control, not per-Dag authorization. An authenticated UI/API user with global Asset:read permission could enumerate partition run state, schedule configuration, and asset wir…

  • Medium 5.9

    Apache Airflow: No certificate validation on SMTP STARTTLS connections

    Apache Airflow's EmailOperator and the underlying `airflow.utils.email` helpers established SMTP STARTTLS connections without verifying the remote certificate when the deployment used `[email] smtp_starttls=True` without `[email] smtp_ssl`. An attacker positi…

  • Medium 5.9

    Apache Airflow: JWT cookie missing Secure flag in JWTRefreshMiddleware behind HTTPS-terminating proxy

    Apache Airflow's `JWTRefreshMiddleware` set the JWT auth cookie without the `Secure` flag, so deployments running the Airflow API server behind an HTTPS-terminating reverse proxy (e.g. nginx / Envoy / a managed load balancer that terminates TLS and forwards p…

  • High 7.5

    Apache Airflow: API authorization bypass: bulk TaskInstances allows cross-DAG mutation

    A bug in Apache Airflow's bulk Task Instances API (`PATCH/DELETE /api/v2/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances`) evaluated authorization against the `dag_id` resolved from the URL path while operating on the `dag_id` / `dag_run_id` extracted from r…

  • Critical 9.1

    Apache Airflow: BashOperator Jinja2 injection via dag_run.conf — low-privilege user pattern

    Apache Airflow's official documentation at `core-concepts/dag-run.html` ("Passing Parameters when triggering Dags") showed a verbatim `BashOperator(bash_command="echo value: {{ dag_run.conf['conf1'] }}")` example without any quoting / sanitization warning. Da…

  • Medium 6.5

    Apache Airflow: Rendered template truncation bypasses nested sensitive-key masking

    A bug in Apache Airflow's rendered-template field handling caused nested sensitive-key masking (e.g. nested `password` / `token` / `secret` / `api_key` keys inside a JSON template structure) to be bypassed when the rendered field exceeded `[core] max_template…

  • Medium 6.5

    Apache Airflow: Variable masker depth-limit bypass returns cleartext nested secrets

    A bug in Apache Airflow's Variable response masker caused nested-key redaction (triggered by secret-suffixed key names like `password`, `token`, `secret`, `api_key`) to be bypassed when the JSON value's nesting depth exceeded the shared secrets masker's recur…

  • High 8.8

    Apache Airflow: Authenticated RCE via XCom PATCH endpoint — XComUpdateBody missing FORBIDDEN_XCOM_KEYS validator

    A bug in Apache Airflow's XCom PATCH endpoint `PATCH /api/v2/xcomEntries/{key}` allowed an authenticated UI/API user with XCom write permission on a Dag to set XCom entries under reserved key names (e.g. `return_value`) that the matching POST endpoint already…

  • High 7.3

    Apache Airflow: Arbitrary import in custom deadline-reference deserialization

    Apache Airflow's scheduler-side deadline-reference decoder (`SerializedCustomReference.deserialize_reference`) imported and dispatched arbitrary class paths drawn from DAG-author-controlled serialized state without an allowlist or plugin-registry gate. A DAG …

  • Low 3.1

    Apache Airflow: Log server JWT authorization bypass via Python lstrip() character stripping allows cross-Dag log access

    Exploitation requires the attacker to already be an authenticated Airflow worker holding a valid Log-server JWT issued for at least one Dag. Apache Airflow's Log server authorized JWT tokens against Dag IDs by applying Python's `str.lstrip()` to the requested…

  • Medium 4.3

    Apache Airflow: Event Log detail endpoint bypasses DAG-scoped event log permission filter

    The Event Log detail endpoint `GET /api/v2/eventLogs/{event_log_id}` in Apache Airflow fetched audit-log rows directly by numeric ID after only the generic Audit Log permission check, while the collection endpoint `GET /api/v2/eventLogs` applied per-Dag scopi…

  • Medium 6.5

    Apache Airflow: revoke_token() unreachable in FabAuthManager / KeycloakAuthManager logout path

    A bug in Apache Airflow's auth manager logout handling left previously-issued JWT tokens valid after the user clicked logout in the UI: the logout flow for `FabAuthManager` and `KeycloakAuthManager` did not actually reach the underlying `revoke_token()` call,…

  • Medium 6.5

    Apache Airflow: Incomplete Redaction of Sensitive Fields in Connection Extra API Response

    A bug in the GET `/api/v2/connections/{connection_id}` REST API endpoint in Apache Airflow allowed an authenticated UI/API user with Connection-read permission to retrieve secrets stored in a Connection's `extra` JSON blob under field names not present in the…

  • Medium 4.3

    Apache Airflow: Dags endpoint might provide access to otherwise inaccessible entities

    The authenticated /ui/dags endpoint did not enforce per-DAG access control on embedded Human-in-the-Loop (HITL) and TaskInstance records: a logged-in Airflow user with read access to at least one DAG could retrieve HITL prompts (including their request parame…

  • Medium 4.3

    Apache Airflow: Assets graph view bypasses DAG level access control displaying unrelated topologies and all DAGs names to unauthorized users

    The asset dependency graph did not restrict nodes by the viewer's DAG read permissions: a user with read access to at least one DAG could browse the asset graph for any other asset in the deployment and learn the existence and names of DAGs and assets outside…

  • Low 3.7

    Apache Airflow: 3.x - Nested Variable Secret Values Bypass Redaction via max_depth=1

    Secrets in Variables saved as JSON dictionaries were not properly redacted - in case thee variables were retrieved by the user the secrets stored as nested fields were not masked. If you do not store variables with sensitive values in JSON form, you are not a…