---
id: "CVE-2026-101031"
page: "https://infrastack.ai/live/CVE-2026-101031"
kind: "vulnerability"
aliases: ["CVE-2026-101031"]
title: "Apache Airflow: example DAG lets a crafted URL run shell commands"
severity: "high"
cvss: null
epss: null
exploited: false
status: "open"
category: "runtime"
products: []
ecosystems: []
tags: ["apache-airflow", "python", "runtime", "self-hosted"]
not_affected_if: ["load-examples-disabled", "managed-hosting"]
published_at: "2026-11-09T10:17:02+00:00"
first_seen_at: "2026-11-09T10:25:47+00:00"
updated_at: "2026-11-09T10:26:55+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-101031", "first_seen_at": "2026-11-09T10:25:47+00:00"}]
exploit_sources: []
---

# Apache Airflow: example DAG lets a crafted URL run shell commands

Link for people: https://infrastack.ai/live/CVE-2026-101031 (this .md is for agents)

The bundled example_dag_decorator DAG validates an HTTP-fetched IP address with Python's ipaddress module and then puts it into a shell command, but ipaddress accepts IPv6 zone identifiers with arbitrary characters. A user who can trigger that DAG with a custom url parameter can have a malicious server's response inject shell commands that run on the Airflow worker.

_Summary, check and fix written by a model from the sources; labelled as such._

## How to check

- Check whether example DAGs are loaded: look for `load_examples = True` in airflow.cfg or `AIRFLOW__CORE__LOAD_EXAMPLES` set to true.
- Check the installed version with `airflow version` and compare against `3.4.0`.
- Look for the example_dag_decorator DAG in the DAG list.

## Fix

- apache-airflow: upgrade to `3.4.0` or later, per the advisory; users who upgraded for CVE-2025-54941 must upgrade again.
- Alternatively, set `load_examples = False`, which the advisory recommends for production.

## Timeline

- 2026-11-09T10:25:47+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-101031

## From the sources

The `example_dag_decorator` example Dag shipped with Apache Airflow validated an IP address fetched over HTTP with Python's `ipaddress` module and then placed it into a shell command. `ipaddress` accepts IPv6 zone identifiers containing arbitrary characters, so when example Dags are loaded (`load_examples` enabled), a user who can trigger that Dag with a custom `url` parameter could point it at a server whose response injects shell commands run on the worker. This is an incomplete fix for CVE-2025-54941; users who upgraded for CVE-2025-54941 should upgrade again. Users are advised to upgrade to apache-airflow 3.4.0 or later, or to disable example Dags (`load_examples = False`), which is recommended for production.

---

_Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai_
