Safeguard
Vulnerability Analysis•

CVE-2026-58076: High Code Execution via Dag Deserialization in Airflow

CVE-2026-58076 lets a Dag author run code in Airflow's Scheduler and API server through exception deserialization. Upgrade to Airflow 3.3.1 or later.

Safeguard Security Team
3 min read

CVE-2026-58076 is a high severity unsafe deserialization flaw in Apache Airflow. A Dag author can make the Scheduler and API server import and call an arbitrary callable through the executor_config exception branch. Upgrade to apache-airflow 3.3.1 or later, even if you already patched CVE-2026-33264.

What's affected

  • Product: Apache Airflow, serialization layer.
  • Fixed: apache-airflow 3.3.1 or later, which restricts the imported class to a subclass of BaseException, per the record.
  • Affected range: the record does not list the first affected version. Check the Apache Airflow security advisories for the exact range.
  • Already upgraded for CVE-2026-33264? That fix covered only the trigger branch of the same deserializer. The record says those deployments are still affected through the exception branch and must upgrade again.
  • No non-default configuration is required.

How to check if you're exposed

Check the installed version.

pip show apache-airflow
airflow version

Compare it with 3.3.1. Do this on every component, not only the web service: the Scheduler and the API server are the components that deserialize Dags, so both need the fix.

Then review who can write Dags. The attack needs a Dag author, so list the people and automation that can commit to your Dag repository or upload Dag files.

What to do now

  1. Upgrade every Airflow component to apache-airflow 3.3.1 or later.
  2. If you upgraded earlier for CVE-2026-33264, upgrade again. That fix did not cover this branch.
  3. Tighten who can add or change Dag files, and review recent changes for unexpected executor_config values.
  4. Rotate the metadata database credentials and the JWT signing secret if you have reason to think an untrusted Dag author had access.
  5. Keep the Scheduler and API server on least privilege network access, because both hold those secrets.
  6. Run the free in-browser dependency scan on your lockfile or manifest to see every affected package in one pass.

Why it matters

The weakness is CWE-502 (Deserialization of Untrusted Data). The serialization layer rebuilt exception nodes by calling import_string() on a class name from the stored blob and instantiating it with arguments from the same blob, with no limit on what could be imported. An operator's executor_config reaches that branch.

What makes it serious is where the code runs. The record says it runs in the Scheduler as part of its normal loop, and in the API server on any authenticated read of the Dag. Airflow's own security model says neither should run Dag author code, and both hold database credentials and the signing secret. The pull request fixes it by resolving exception classes against classes already in memory instead of importing the stored name. The record scores it 8.8 (High) and does not mark it as exploited in the wild.

Try it yourself

Many Airflow flaws only matter if the vulnerable path is reachable in your deployment. This demo shows how reachability analysis separates reachable findings from the rest.

Click through it at your own pace, or open it full screen.

Quick check

I fixed CVE-2026-33264. Am I covered?

Not according to the record. CVE-2026-33264 covered the trigger branch. This CVE is a different sink in the same deserializer, so upgrade to 3.3.1 or later.

Sources

Last reviewed: 18 October 2026.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.