{"id":"CVE-2026-111422","kind":"vulnerability","aliases":["CVE-2026-111422"],"related":[],"title":"Airflow SSH provider: templated environment values run shell commands remotely","description":"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.","summary":"In apache-airflow-providers-ssh before 7.0.1, the SSHRemoteJobOperator quotes its templated environment values only once inside an already-quoted wrapper script, so shell syntax such as $(...) in a value executes on the remote SSH host. A user who can trigger a Dag with trigger-time input like params or dag_run.conf, but cannot author Dags, can run arbitrary commands as the SSH connection's user.","severity":"high","cvss":null,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["airflow","package","python","ssh"],"not_affected_if":["no-sshremotejoboperator","no-trigger-time-environment-input"],"how_to_check":"- Check the installed version with `pip show apache-airflow-providers-ssh` and see whether it is below `7.0.1`.\n- Search Dags for `SSHRemoteJobOperator` with an `environment` argument that uses `params` or `dag_run.conf` templates.","fix":"- Upgrade `apache-airflow-providers-ssh` to `7.0.1` or later.","status":"open","published_at":"2026-10-27T00:17:09+00:00","first_seen_at":"2026-10-27T00:25:55+00:00","triaged_at":"2026-10-27T00:26:45+00:00","updated_at":"2026-10-27T00:26:45+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-10-27T00:26:45Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade `apache-airflow-providers-ssh` to `7.0.1` or later.","reach":"network","title":"Airflow SSH provider: templated environment values run shell commands remotely","impact":"high","summary":"In apache-airflow-providers-ssh before 7.0.1, the SSHRemoteJobOperator quotes its templated environment values only once inside an already-quoted wrapper script, so shell syntax such as $(...) in a value executes on the remote SSH host. A user who can trigger a Dag with trigger-time input like params or dag_run.conf, but cannot author Dags, can run arbitrary commands as the SSH connection's user.","category":"package","nicknames":[],"who_cares":["airflow","ssh","python"],"confidence":0.7,"needs_auth":"yes","worst_case":"Arbitrary commands run on the remote SSH host as the connection user.","analyst_note":"Check the NVD page or the Airflow provider release notes for the exact affected range and whether a backport exists for other release lines.","how_to_check":"- Check the installed version with `pip show apache-airflow-providers-ssh` and see whether it is below `7.0.1`.\n- Search Dags for `SSHRemoteJobOperator` with an `environment` argument that uses `params` or `dag_run.conf` templates.","needs_analyst":true,"not_affected_if":["no-sshremotejoboperator","no-trigger-time-environment-input"],"who_is_affected":"Teams running Airflow with the SSH provider before 7.0.1 that use SSHRemoteJobOperator and pass trigger-time input such as params or dag_run.conf into its environment parameter. Deployments without that operator or without user-supplied values in environment are not exposed by this description.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"high"},"cost_usd":0.00066,"input_tokens":3433,"output_tokens":634,"severity_before":"unknown"},"analyst_status":null,"analyst_note":null,"search":"'-111422':13A,16A '-2026':12A,15A '7.0.1':28B,96C,186C 'advis':177C 'airflow':1A,17B,24B,92C,182C 'alreadi':41B,115C 'already-quot':40B,114C 'although':108C 'apach':23B,91C,181C 'apache-airflow-providers-ssh':22B,90C,180C 'arbitrari':81B,163C 'author':77B,159C 'cannot':76B,158C 'command':9A,82B,164C 'connect':86B,172C 'could':161C 'cve':11A,14A 'dag':65B,78B,136C,156C,160C 'dag_run.conf':74B,147C 'environ':5A,34B,104C,149C 'execut':53B,128C 'host':58B,133C,168C 'input':70B,142C 'insid':38B,112C 'later':188C 'like':71B 'packag':18B 'param':72B,145C 'paramet':105C 'pass':138C 'place':111C 'provid':3A,25B,93C,183C 'python':19B 'quot':31B,42B,98C,116C 'remot':10A,56B,131C,167C 'run':7A,80B,162C 'script':44B,118C 'shell':8A,46B,120C 'ssh':2A,20B,26B,57B,85B,94C,132C,171C,184C 'sshremotejoboper':30B,97C 'syntax':47B,121C 'templat':4A,33B,103C 'time':69B,141C 'trigger':63B,68B,140C,154C 'trigger-tim':67B,139C 'upgrad':179C 'user':60B,88B,151C,174C,175C 'valu':6A,35B,52B,100C,126C 'wrapper':43B,117C","nicknames":[],"mitigations":[],"who_affected":"Teams running Airflow with the SSH provider before 7.0.1 that use SSHRemoteJobOperator and pass trigger-time input such as params or dag_run.conf into its environment parameter. Deployments without that operator or without user-supplied values in environment are not exposed by this description.","tier":"B","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-27T00:17:09+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-111422","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-111422","severity":null,"published_at":"2026-10-27T00:17:09+00:00","modified_at":"2026-10-27T00:17:09+00:00","first_seen_at":"2026-10-27T00:25:55+00:00","fetched_at":"2026-10-27T00:25:55+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}