What is Apache Airflow's Experimental API?
Apache Airflow is a widely-used workflow orchestration platform for scheduling and monitoring data pipelines. Airflow's Experimental REST API (/api/experimental/) provides programmatic access to Airflow functions including triggering DAG runs, pausing/unpausing DAGs, and querying task status. DAGs (Directed Acyclic Graphs) in Airflow are Python code files that define workflows — a DAG can execute arbitrary Python code, run shell commands, call external APIs, or trigger any automated process. Because Airflow DAGs execute Python code and can run shell commands, triggering a DAG run is equivalent to executing code on the Airflow worker systems. The Experimental API defaults determined whether triggering DAGs required authentication.
Overview
CVE-2020-13927 is a missing authentication vulnerability (CWE-306) in Apache Airflow's Experimental API. In Airflow 1.10.10 and earlier, the /api/experimental/ endpoints allowed all API requests without authentication by default — the configuration setting api.auth_backend defaulted to airflow.api.auth.backend.default which permits all requests. An unauthenticated remote attacker could trigger DAG runs, execute arbitrary code on Airflow workers, and access sensitive workflow configuration. Fixed in Airflow 1.10.11 by changing the default to deny all. CISA added it to KEV in January 2022.
Affected Versions
| Product | Vulnerable | Fixed |
|---|---|---|
| Apache Airflow 1.10.10 and earlier (with default API config) | Yes | 1.10.11 (default changed to deny-all) |
Any Airflow version with auth_backend = airflow.api.auth.backend.default |
Yes | Change auth_backend to require authentication |
Technical Details
- Root cause: Missing authentication (CWE-306) — Airflow's experimental API's default
auth_backendsetting wasairflow.api.auth.backend.default, which implements no authentication and allows all requests; operators who did not explicitly configure authentication were unknowingly running an unauthenticated API endpoint - DAG trigger → code execution: Airflow DAGs are Python code files; triggering a DAG run via
/api/experimental/dags/{dag_id}/dag_runscauses Airflow workers to execute the Python functions defined in the DAG, including ShellOperator, PythonOperator, or BashOperator tasks; an attacker who can trigger a DAG run can execute code if any DAG contains shell or system commands - Airflow worker access scope: Airflow workers typically have access to cloud credentials (AWS, GCP, Azure), database connection strings, API keys, and data pipeline source/destination systems stored in Airflow's connections and variables store; code execution on Airflow workers provides access to all of these
- Data pipeline exfiltration: Beyond code execution, an attacker can query DAG configurations, task logs, and Airflow variable/connection stores to exfiltrate credentials and configuration for all data pipelines — a particularly high-value target in data-rich environments
- Exposure patterns: Organizations that deployed Airflow on cloud infrastructure with internet-accessible webservers or that failed to configure network access controls for the Airflow API endpoint were directly vulnerable; Airflow deployments on Kubernetes or cloud-managed services (MWAA, Cloud Composer) with public endpoints were at risk
Discovery
Identified by security researchers and documented in CVE-2020-13927. Apache fixed the default in Airflow 1.10.11 by changing api.auth_backend to airflow.api.auth.backend.deny_all. CISA's January 2022 KEV addition reflects active exploitation of internet-accessible Airflow deployments with default authentication settings.
Exploitation Context
Apache Airflow is widely deployed in data engineering teams at technology companies, financial institutions, and media companies. Internet-exposed Airflow instances with unauthenticated APIs are discovered regularly via Shodan and similar tools — data engineers frequently expose Airflow webservers for external scheduling triggers without configuring authentication. The combination of Python code execution via DAG triggers and access to all data pipeline credentials makes Airflow a high-value target for data exfiltration and cloud credential theft.
Remediation
- Upgrade Apache Airflow to 1.10.11 or later — the default API authentication is changed to deny-all
- If running 1.10.10 or earlier: explicitly set
auth_backend = airflow.api.auth.backend.deny_allinairflow.cfgto block unauthenticated API access immediately - For production deployments: configure
auth_backend = airflow.api.auth.backend.basic_author a proper OAuth/OIDC backend — not just deny-all — to enable legitimate authenticated API access - Restrict network access to Airflow webserver and API to authorized internal networks only — the Airflow webserver should not be directly internet-accessible
- Audit Airflow connections and variables store for credentials that may have been exposed via unauthenticated API access; rotate any potentially exposed secrets
- Enable Airflow audit logging to detect unexpected DAG triggers, API access, or variable/connection queries that may indicate exploitation
Key Details
| Property | Value |
|---|---|
| CVE ID | CVE-2020-13927 |
| Vendor / Product | Apache — Airflow's Experimental API |
| NVD Published | 2020-11-10 |
| NVD Last Modified | 2025-10-23 |
| CVSS 3.1 Score | 9.8 |
| CVSS 3.1 Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Severity | CRITICAL |
| CWE | CWE-306 find similar ↗ |
| CISA KEV Added | 2022-01-18 |
| CISA KEV Deadline | 2022-07-18 |
| Known Ransomware Use | No |
CVSS 3.1 Breakdown
Required Action
Timeline
| Date | Event |
|---|---|
| 2020-11-10 | CVE published for Airflow experimental API authentication bypass |
| 2020-11-11 | Apache Airflow 1.10.12 released, changing default experimental API auth to deny-all |
| 2022-01-18 | Added to CISA Known Exploited Vulnerabilities catalog |
| 2022-07-18 | CISA BOD 22-01 remediation deadline |
References
| Resource | Type |
|---|---|
| Apache Airflow — API Security Documentation | Vendor Advisory |
| NVD — CVE-2020-13927 | Vulnerability Database |
| CISA KEV Catalog Entry | US Government |