CVE-2026-96285
Apache Airflow: Scheduler: next_kwargs deserialized before the dict check, so resume data still invokes constructors
Apache Airflow 3.3.1 shipped a fix for CVE-2026-67260 that checks the scheduler's decoded next_kwargs value is a dictionary, but performs that check only after deserializing the whole stored payload. Deserialization reconstructs nested objects of classes permitted by the deserialization allow-list — which by default includes Airflow's own classes — and runs their constructors inside the scheduler process before the check can reject the value. A Dag author, who controls a task's next_kwargs through the task execution API, can therefore still trigger constructor execution in the scheduler when the awaiting_input timeout sweep processes the task, and in the API server when the task instance is served to a worker using an older Execution API version; no non-default configuration is required. Versions before 3.3.0 are not affected. This is an incomplete fix for CVE-2026-67260: deployments that upgraded to 3.3.1 for that issue must also upgrade to apache-airflow 3.4.0 or later.
What each source reports
CVE List No score
Apache Airflow: Scheduler: next_kwargs deserialized before the dict check, so resume data still invokes constructors
Apache Airflow 3.3.1 shipped a fix for CVE-2026-67260 that checks the scheduler's decoded next_kwargs value is a dictionary, but performs that check only after deserializing the whole stored payload. Deserialization reconstructs nested objects of classes permitted by the deserialization allow-list — which by default includes Airflow's own classes — and runs their constructors inside the scheduler process before the check can reject the value. A Dag author, who controls a task's next_kwargs through the task execution API, can therefore still trigger constructor execution in the scheduler when the awaiting_input timeout sweep processes the task, and in the API server when the task instance is served to a worker using an older Execution API version; no non-default configuration is required. Versions before 3.3.0 are not affected. This is an incomplete fix for CVE-2026-67260: deployments that upgraded to 3.3.1 for that issue must also upgrade to apache-airflow 3.4.0 or later.
- Record
CVE-2026-96285- Weakness
- CWE-502
- Updated
- 2026-11-09
EUVDEUVD-2026-119900 No score
Apache Airflow 3.3.1 shipped a fix for CVE-2026-67260 that checks the scheduler's decoded next_kwargs value is a dictionary, but performs that check only after deserializing the whole stored payload. Deserialization reconstructs nested objects of classes permitted by the deserialization allow-list — which by default includes Airflow's own classes — and runs their constructors inside the scheduler process before the check can reject the value. A Dag author, who controls a task's next_kwargs through the task execution API, can therefore still trigger constructor execution in the scheduler when the awaiting_input timeout sweep processes the task, and in the API server when the task instance is served to a worker using an older Execution API version; no non-default configuration is required. Versions before 3.3.0 are not affected. This is an incomplete fix for CVE-2026-67260: deployments that upgraded to 3.3.1 for that issue must also upgrade to apache-airflow 3.4.0 or later.
- Record
EUVD-2026-119900- Updated
- 2026-11-09
GitHub AdvisoriesGHSA-h6xc-w3fp-2wwj No score
Apache Airflow 3.3.1 shipped a fix for CVE-2026-67260 that checks the scheduler's decoded ...
Apache Airflow 3.3.1 shipped a fix for CVE-2026-67260 that checks the scheduler's decoded next_kwargs value is a dictionary, but performs that check only after deserializing the whole stored payload. Deserialization reconstructs nested objects of classes permitted by the deserialization allow-list — which by default includes Airflow's own classes — and runs their constructors inside the scheduler process before the check can reject the value. A Dag author, who controls a task's next_kwargs through the task execution API, can therefore still trigger constructor execution in the scheduler when the awaiting_input timeout sweep processes the task, and in the API server when the task instance is served to a worker using an older Execution API version; no non-default configuration is required. Versions before 3.3.0 are not affected. This is an incomplete fix for CVE-2026-67260: deployments that upgraded to 3.3.1 for that issue must also upgrade to apache-airflow 3.4.0 or later.
- Record
GHSA-h6xc-w3fp-2wwj- Weakness
- CWE-502
- Updated
- 2026-11-09
NVD No score
Apache Airflow 3.3.1 shipped a fix for CVE-2026-67260 that checks the scheduler's decoded next_kwargs value is a dictionary, but performs that check only after deserializing the whole stored payload. Deserialization reconstructs nested objects of classes permitted by the deserialization allow-list — which by default includes Airflow's own classes — and runs their constructors inside the scheduler process before the check can reject the value. A Dag author, who controls a task's next_kwargs through the task execution API, can therefore still trigger constructor execution in the scheduler when the awaiting_input timeout sweep processes the task, and in the API server when the task instance is served to a worker using an older Execution API version; no non-default configuration is required. Versions before 3.3.0 are not affected. This is an incomplete fix for CVE-2026-67260: deployments that upgraded to 3.3.1 for that issue must also upgrade to apache-airflow 3.4.0 or later.
- Record
CVE-2026-96285- Weakness
- CWE-502
- Updated
- 2026-11-09
Affected products
History
| Recorded | Changed | Sources |
|---|---|---|
| published | EUVD | |
| published | EUVD | |
| aliases, references | GitHub Advisories, NVD | |
| aliases, published | EUVD | |
| first indexed | CVE List |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-96285 is a vulnerability with no CVSS score yet in Apache Software Foundation Airflow, published November 9, 2026. No source lists public exploit code. No source names a fixed version.