Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as trigger-capable Airflow user
-
DeliveryTrigger Dag supplying malicious params/dag_run.conf
-
ExploitInject $(...) into templated environment value
-
ExecutionRemote wrapper shell expands injected payload
-
ImpactExecute arbitrary commands as SSH connection user
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization OS command sanitization, avoid shell exec
MITRE ATT&CK
2 techniques across 1 tactic: Execution The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Not remotely exploitable against default configurations. Exploitation requires ALL of: (1) a Dag that uses SSHRemoteJobOperator and sets its templated |
| Impact | No CVSS score or vector is provided in the input (NVD/vendor show N/A), so severity signals must be weighed qualitatively. The technical impact is serious - arbitrary OS command execution (CWE-78) on the remote SSH host as the connection's user - but every other signal points to a contained, lower-urgency issue. EPSS is 0.27% (20th percentile), there is no CISA KEV listing (not actively exploited), no public exploit identified, and the vuln.today Decision label is 'monitor' rather than act_now/emergency. Exploitation is gated behind three conditions that are not default: a Dag must use SSHRemoteJobOperator's templated |
| Exploit ScenarioDerived | An Airflow user who can trigger a specific Dag - but is not permitted to author Dags - triggers it while supplying a crafted value such as |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 28, 2026
Command injection in apache-airflow-providers-ssh 4.3.0 through 7.0.1 lets a user who can trigger a Dag, but who cannot author Dags, run arbitrary shell commands on the remote SSH host as the SSH connection's user. SSHRemoteJobOperator quoted templated environment values only once even though they were embedded in an already-quoted wrapper script, so payloads such as $(...) or backticks were evaluated by the remote shell; the exposed path is a Dag that feeds trigger-time input (params or dag_run.conf) into environment. Exploitation is not possible against a default installation - it requires that non-default Dag design to already exist plus Airflow authorization to trigger that specific Dag - and no public exploit has been identified at time of analysis, with EPSS at 0.27% (20th percentile) and a vuln.today decision label of monitor. The vendor-released fix is version 7.0.1.
RemediationAI
Vendor-released patch: apache-airflow-providers-ssh 7.0.1 or later - upgrade the provider package on every Airflow deployment and redeploy workers, since the fix lives in the provider code that builds the remote wrapper (https://github.com/apache/airflow/pull/74810, changelog https://airflow.apache.org/docs/apache-airflow-providers-ssh/7.0.1/changelog.html, advisory https://lists.apache.org/thread/k159xrq1tbgmkvl24j63g12qh0mczk79). Note the behavioural side effect of upgrading: environment values are now passed as literal strings, so $VAR, ~ and $(...) inside environment no longer expand on the remote host and any Dag depending on that expansion must move it into command (for example command="PATH=$PATH:/opt/tools/bin python process_data.py") or it will silently change behaviour. Where upgrading must wait, the compensating controls are configuration-level: remove environment entries that interpolate params or dag_run.conf in Dags using SSHRemoteJobOperator, or pass such values through command with explicit quoting instead, accepting that this requires editing the affected Dags; and restrict Airflow authorization to trigger those specific Dags to trusted roles, which reduces but does not eliminate exposure because the trigger role is precisely the privilege the flaw crosses. The remote SSH account's privileges bound the impact of any successful injection, so running those connections as an unprivileged account limits blast radius.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The flaw is CWE-78 OS command injection arising from layered quoting in the POSIX remote-job wrapper builder (providers/ssh/src/airflow/providers/ssh/utils/remote_job.py). SSHRemoteJobOperator generated export KEY='value' lines by single-quoting each environment value with a '"'"' escape and then splicing the whole exports-plus-command body into a single-quoted job_script literal, applying the same escape a second time on the command but leaving the export lines effectively unescaped for the outer literal. Because the value's own quotes were consumed by the wrapper's quoting layer, shell metacharacters in the value survived to the remote shell and were executed when the wrapper ran, matching the command-substitution, backtick and semicolon test cases added in the fix. The patch replaces hand-rolled escaping with shlex.quote(value) and applies one additional escape pass over the combined env_exports + command body before insertion, and the accompanying documentation now states that environment values are passed as literal strings and that $VAR, ~ and $(...) are no longer expanded - Dags that relied on such expansion must build values inside command instead. Only POSIX wrapper construction is shown in the supplied source evidence; the input does not state whether any non-POSIX deployment mode shares the same quoting path, so that is unverified. The assessed vector CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:H/A:H reflects a scope change into the remote host, high confidentiality and integrity impact there, and a high attack-complexity rating driven by the prerequisite Dag design rather than by any timing or race condition.
Know when Apache Airflow Ssh Provider gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
Triggered over the Airflow API/UI (AV:N) by a low-privileged trigger-capable user (PR:L); requires a non-default Dag piping params into environment (AC:H); RCE on the remote host crosses to another system (S:C) with full impact.
Primary rating from Vendor (apache).
DescriptionCVE.org
In apache-airflow-providers-ssh before 7.0.1, SSHRemoteJobOperator quoted the values of its templated environment parameter only once, although they are placed inside an already-quoted wrapper script, so shell syntax such as $(...) in a value was executed on the remote SSH host. In a Dag that passes trigger-time input such as params or dag_run.conf into environment, a user who can trigger that Dag but cannot author Dags could run arbitrary commands on the remote host as the SSH connection's user. Users are advised to upgrade apache-airflow-providers-ssh to 7.0.1 or later.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
Attack Technique
OS command injection occurs when an application passes unsanitized user input directly into system shell commands.
EUVD-2026-110536
GHSA-v5m9-m7pg-q8f3
CVE.org
EPSS
Exploit-DB