All vulnerabilities
CVE-2026-58076BIT-airflow-2026-58076GHSA-8prw-8m6x-8w6fPYSEC-2026-3991

apache-airflow: Apache Airflow exception-node deserialization permits arbitrary callable execution

Apache Software Foundation apache-airflowpipLibraries & packages
CVSS
8.8High
ExploitationNo known exploitationNot in CISA KEV, which does not prove it is unexploitedCISA KEV
Exploit odds (EPSS)0.48%Chance of exploitation activity in the next 30 days, higher than 40% of CVEs. Scored 23 Oct 2026FIRST EPSS
Fixed in3.3.1Fixed versionGitHub
Published12 Aug 2026Updated 2 Oct 2026CVE List

What fixes it

  • 3.3.1apache-airflow, pipGitHub
  • 3.3.1Apache AirflowCVE List
  • 3.3.1apache-airflow, PyPIOSVpip install "apache-airflow>=3.3.1"

A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.

Description

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 executor_config reaches that branch, so a Dag author could place a value there that causes an arbitrary callable to be imported and invoked -- for example subprocess.check_output, or builtins.eval on the builtins-prefixed variant. The code runs in the Scheduler, which reconstructs serialized Dags in its normal loop with no request involved, and in the API server, on any authenticated read of the Dag such as GET /api/v2/dags/{dag_id}/details. Both are components the Airflow security model states must never execute Dag-author code, and both hold the metadata database credentials and the JWT signing secret. No non-default configuration is required. This is a different sink from CVE-2026-33264, which covered only the trigger branch of the same deserializer: deployments that upgraded in response to that advisory are still affected through the exception branch and must upgrade again. Users are advised to upgrade to apache-airflow 3.3.1 or later, which restricts the imported class to a subclass of BaseException.

Text from CVE List

Affected versions 6

  • apache-airflow, pip>= 3.3.0, < 3.3.1GitHub
  • Apache Airflowaffected: 3.0.0 before 3.3.1CVE List
  • apache-airflow, PyPIfrom 3.3.0, fixed in 3.3.1OSV
  • apache-airflow, PyPI3.3.0OSV
  • apache-airflow, PyPI3.3.1rc1OSV
  • apache-airflow, PyPI3.3.1rc2OSV

References 9