Skip to main content

Apache Airflow SSH Provider CVE-2026-111422

| EUVDEUVD-2026-110536 LOW
OS Command Injection (CWE-78)
2026-10-26 apache GHSA-v5m9-m7pg-q8f3
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Authenticate as trigger-capable Airflow user
  2. Delivery
    Trigger Dag supplying malicious params/dag_run.conf
  3. Exploit
    Inject $(...) into templated environment value
  4. Execution
    Remote wrapper shell expands injected payload
  5. Impact
    Execute 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 environment parameter; (2) that Dag wiring trigger-time, user-controlled input (params or dag_run.conf) into one of those environment values; and (3) an attacker holding Airflow authorization to trigger that specific Dag. Key limiting factors: the attacker need NOT be able to author Dags (a lower-privileged trigger role suffices, which is the core of the issue), but the vulnerable Dag design above is non-default and must already exist; the injected command runs only with the privileges of the SSH connection's user on the remote host; and only apache-airflow-providers-ssh versions 4.3.0 through <7.0.1 are affected.

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 environment parameter, that Dag must route trigger-time input (params/dag_run.conf) into those values, and the attacker must already hold Airflow permission to trigger that specific Dag. This is therefore a real but moderate priority: high worst-case impact offset by non-default prerequisites, an authenticated trigger role, low exploitation probability, and an available patch. It is a patch-on-normal-cycle item, not a drop-everything emergency, consistent with the 'monitor' decision label.

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 x$(id > /tmp/pwn) through params or dag_run.conf, which the Dag passes into SSHRemoteJobOperator's environment. Because each value was single-quoted only once yet spliced into an already single-quoted wrapper script, the $(...) is expanded and executed on the remote SSH host as the connection's user. No public exploit code is identified at time of analysis; the fix PR (#74810) does include regression tests demonstrating that command substitution, backticks, and semicolons in values are neutralized after the fix.

Monitor Track and reassess. Why: LOW severity (CVSS 0.1-3.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

Apache Airflow SSH provider 4.3.0 <7.0.1

Affected Packages

euvd apache_airflow_ssh_provider fix: 7.0.1

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

Vendor (apache) PRIMARY LOW
vuln.today AI 8.5 HIGH

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.

3.1 AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:H/A:H
4.0 AV:N/AC:H/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H

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

EPSS Score
0.3%
Top 80% exploitable
Prevalence
Medium
common Airflow provider, but niche operator and non-default Dag design required
Social Media
2
Sightings
Data Quality
4 sources
Confidence: Medium

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.

SignalValue
Severity LOW
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
LOW severity (CVSS 0.1-3.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

Attack Technique

OS command injection occurs when an application passes unsanitized user input directly into system shell commands.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy