The flaw is in caller resolution for the Airflow core API in the apache-airflow-core package. JWTRefreshMiddleware resolves a user from the _token cookie alone and places that user on request.state with a trust sentinel. Before the fix, get_user() returned this cached user before checking the bearer or OAuth2 token, so a request carrying both a session cookie and Authorization: Bearer used the cookie principal instead of the explicitly supplied credential.
At a high level, the affected flow is:
- An attacker places a valid session cookie belonging to the attacker into a victim's browser or client.
- The client sends a request to the Airflow core API with both that cookie and an explicit credential.
- Airflow processes the request as the cookie principal and records the audit event under the wrong identity.
The advisory identifies cookie tossing from a sibling subdomain, cross-site scripting in another application sharing a parent domain, and a shared workstation as example ways to place the cookie. Deployments hosting the Airflow UI on a domain shared with other applications are therefore more exposed. The available evidence confirms the precedence error and incorrect audit attribution, but does not establish a direct privilege-escalation path or that every cookie-placement method applies to every deployment.