CVE-2026-26929 Overview
CVE-2026-26929 is an authorization bypass vulnerability in Apache Airflow versions 3.0.0 through 3.1.7. The FastAPI DagVersion listing API fails to apply per-DAG authorization filtering when requests are made with the dag_id parameter set to ~ (a wildcard representing all DAGs). This allows authenticated users to retrieve version metadata for DAGs they are not authorized to access, potentially exposing sensitive workflow information and organizational data.
Critical Impact
Authenticated users can bypass per-DAG authorization controls to access version metadata of all DAGs in the system, including those they should not have visibility into, leading to potential information disclosure of sensitive workflow configurations and operational data.
Affected Products
- Apache Airflow versions 3.0.0 through 3.1.7
- Apache Airflow FastAPI DagVersion listing API endpoint
- Systems using per-DAG access control policies
Discovery Timeline
- 2026-03-17 - CVE-2026-26929 published to NVD
- 2026-03-17 - Last updated in NVD database
Technical Details for CVE-2026-26929
Vulnerability Analysis
This vulnerability represents a broken access control flaw (CWE-732: Incorrect Permission Assignment for Critical Resource) in Apache Airflow's FastAPI implementation. The issue stems from the DagVersion listing API's failure to properly validate authorization when processing wildcard queries.
When an authenticated user sends a request to the DagVersion API with dag_id=~, the system interprets this as a request for all DAGs but bypasses the per-DAG authorization checks that would normally filter results based on the requester's permissions. This allows users with access to at least one DAG to enumerate and retrieve version metadata for all DAGs in the system, regardless of their actual authorization level.
The vulnerability requires network access and authenticated credentials, but exploitation is straightforward once an attacker has basic system access. The impact is primarily confidentiality-focused, as attackers can view DAG version information but cannot modify or execute unauthorized workflows.
Root Cause
The root cause lies in the FastAPI DagVersion listing endpoint's handling of the wildcard character (~) for the dag_id parameter. When processing this special character, the authorization middleware fails to iterate through and filter each DAG based on the requester's permissions. Instead, it returns all DAG version metadata without applying the per-DAG access control policies that are enforced for specific dag_id queries.
This represents an inconsistency between how authorization is handled for single-DAG requests versus bulk/wildcard requests, creating a privilege escalation path through the wildcard functionality.
Attack Vector
The attack vector is network-based and requires low-privilege authenticated access to the Apache Airflow instance. An attacker with valid credentials and access to at least one DAG can exploit this vulnerability by:
- Authenticating to the Apache Airflow web interface or API
- Sending a request to the DagVersion listing API with dag_id set to ~
- Receiving version metadata for all DAGs in the system, including those outside their authorization scope
The vulnerability can be exploited through standard HTTP requests to the FastAPI endpoint. The attacker sends a crafted API request where the dag_id parameter contains the wildcard character, causing the server to return unfiltered results. For detailed technical implementation, refer to the GitHub Pull Request containing the fix.
Detection Methods for CVE-2026-26929
Indicators of Compromise
- API requests to the DagVersion listing endpoint containing dag_id=~ from users who should not have access to all DAGs
- Unusual patterns of DAG metadata queries from single user accounts
- Access logs showing wildcard queries followed by targeted actions on previously unknown DAGs
Detection Strategies
- Monitor API access logs for requests to /api/v1/dags/~/dagVersions or similar endpoints containing the wildcard character
- Implement alerting on API requests where dag_id=~ is used by non-administrative users
- Audit user access patterns to detect reconnaissance activities involving bulk DAG enumeration
- Review application logs for discrepancies between user permissions and accessed DAG metadata
Monitoring Recommendations
- Enable detailed logging for all FastAPI DagVersion API requests including parameters and requester identity
- Configure SIEM rules to detect wildcard character usage in dag_id parameters
- Implement user behavior analytics to identify anomalous DAG access patterns
- Monitor for increased API activity that may indicate systematic enumeration of DAG resources
How to Mitigate CVE-2026-26929
Immediate Actions Required
- Upgrade Apache Airflow to version 3.1.8 or later immediately
- Audit access logs for any historical exploitation attempts using the wildcard dag_id parameter
- Review DAG access control configurations to ensure proper per-DAG authorization policies are in place
- Verify that sensitive DAG configurations have not been accessed by unauthorized users
Patch Information
Apache has released version 3.1.8 which resolves this authorization bypass vulnerability. The fix ensures that per-DAG authorization filtering is properly applied even when wildcard queries are used. Organizations should upgrade to Apache Airflow 3.1.8 or later as soon as possible.
For technical details on the fix implementation, see the GitHub Pull Request. Additional information is available in the Apache Mailing List Thread and the OpenWall OSS-Security Post.
Workarounds
- Implement network-level access controls to restrict API access to trusted users and systems pending upgrade
- Deploy a web application firewall (WAF) rule to block or alert on requests containing dag_id=~ to the DagVersion API
- Restrict user accounts to minimum necessary privileges while the vulnerability remains unpatched
- Consider temporarily disabling the DagVersion listing API if not operationally required
# Example: Nginx configuration to block wildcard dag_id requests pending upgrade
location /api/v1/dags/ {
if ($args ~* "dag_id=~") {
return 403;
}
proxy_pass http://airflow_backend;
}
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.


