Skip to main content

Ansible Runner CVE-2026-103754

| EUVDEUVD-2026-90788 MEDIUM
Path Traversal (CWE-22)
2026-10-01 redhat GHSA-3h4x-374r-8hhc
5.9
CVSS 3.1 · Vendor: redhat
View

Attack ChainAIDerived

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

  1. Access
    Gain low-priv foothold to influence worker input
  2. Delivery
    Craft malicious zip (symlink + write-through + traversal members)
  3. Exploit
    Deliver via transmit/worker stream
  4. Execution
    unstream_dir recreates symlink and writes outside target dir
  5. Persist
    chmod/utime on out-of-root paths
  6. Impact
    Leverage toward code execution

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V5 - File Handling Path canonicalization, traversal prevention
MITRE ATT&CK

2 techniques across 2 tactics: Discovery, Collection

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Requires a worker running the ansible-runner transmit/worker protocol that consumes attacker-influenced streamed archive input - i.e. the unstream_dir() code path must process a zip archive whose member names and symlink targets an attacker can control. Exploitation is limited by the need to supply crafted archive content into this specific protocol (PR:L - the attacker must have a foothold or role that lets them inject job/stream data, not arbitrary internet access), and by AC:H reflecting the crafting of valid archive members plus reliance on the worker extracting them. There is no required victim user interaction (UI:N). Affected: ansible-runner as shipped in Red Hat Ansible Automation Platform 2 (and AWX/upstream) on versions prior to the PR #1550 fix.

Impact

CVSS 3.1 base score is 5.9 (Red Hat vendor-assigned) with vector AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:H/A:L - a network-reachable but high-complexity, low-privilege integrity-focused flaw. No EPSS score, no CISA KEV listing, and no standalone public exploit were provided; however, the fixing PR (#1550) ships four adversarial unit tests that construct crafted transmit streams demonstrating symlink write-through, parent-traversal chmod/utime, absolute-member write, and unsafe symlink targets - this is functional proof-of-concept extraction code embedded in the patch, which materially lowers the barrier to weaponization even though it is not an actively-distributed exploit. The real-world risk is moderate and gated by a meaningful precondition: the worker side of the ansible-runner transmit/worker protocol must consume attacker-influenced archive content. This is not a mass-exploitable internet-facing bug; it is a priority primarily for environments where ansible-runner workers (e.g. execution nodes / automation mesh in AAP 2 or AWX) process streamed job data whose origin is not fully trusted. The AC:H and PR:L qualifiers correctly temper the otherwise-network vector. The 'RCE' tag reflects the description's 'can be leveraged toward code execution,' but the CVSS impact set models that as I:H/A:L with C:N rather than full CIA, so treat RCE as a plausible escalation outcome, not a confirmed single-step remote-code-execution primitive - verify exploitability-to-RCE path with vendor.

Exploit ScenarioDerived

An attacker who can influence the content streamed to an ansible-runner worker crafts a malicious zip archive containing a symlink member pointing outside the target directory (e.g. '../outside') followed by a file member written through that symlink, plus '..'-prefixed members whose names drive chmod()/utime() on paths outside the extraction root. When the worker's unstream_dir() extracts the archive, it recreates the symlink and writes/alters files outside the intended directory, enabling file creation or permission changes on sensitive paths that can be chained toward code execution. The patch's own test suite (PR #1550) demonstrates each of these primitives, so working trigger code effectively exists even though no weaponized exploit or KEV entry is reported.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
No patch listed yet 0.3% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Oct 01, 2026

Path traversal and symlink-validation flaws in ansible-runner's unstream_dir() (CVE-2026-103754) let an authenticated, low-privilege actor who can inject crafted archive content into the transmit/worker protocol create files, create symlinks, or change permissions outside the intended extraction directory, which can be leveraged toward code execution. The issue affects ansible-runner as shipped in Red Hat Ansible Automation Platform 2 (and upstream/AWX deployments) prior to the PR #1550 fix and carries a vendor-assigned CVSS 3.1 base score of 5.9 (AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:H/A:L). No public exploit code or confirmed active exploitation was identified at time of analysis, and exploitation is constrained by the need to supply crafted archive members into this specific worker protocol path.

RemediationAI

The primary remediation is to apply the upstream ansible-runner fix from PR #1550 (https://github.com/ansible/ansible-runner/pull/1550) or upgrade to the first ansible-runner release that includes it - upstream fix available (PR/commit); released patched version not independently confirmed. For Red Hat Ansible Automation Platform 2, track the vendor advisory at https://access.redhat.com/security/cve/CVE-2026-103754 and Bugzilla 2544510 for the patched AAP build. Until a patched build is deployed, reduce the low-privilege foothold assumed by the vector (PR:L) by restricting which accounts or roles can submit jobs or otherwise inject archive content into the worker's transmit/worker protocol, and treat all worker input as untrusted. Run workers in a sandboxed container or unprivileged account with no host-path mounts and a dedicated extraction directory, so that path traversal or symlink writes cannot reach sensitive files (trade-off: this can break jobs that legitimately rely on host filesystem access). Where archives originate from external sources, pre-validate or re-pack them to strip '..' members and symlinks before they reach unstream_dir(), and monitor for unexpected file/symlink creation or permission changes outside the worker's working directory.

Affects your stack

Find out whether the stacks and servers you run are on an affected version.

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The ansible-runner transmit/worker protocol streams zip archives from a controller to a worker, where unstream_dir() in src/ansible_runner/utils/streaming.py extracts the archive. The vulnerable code re-created symbolic links from archive content without validating the link target and then applied os.chmod() and os.utime() to a path built by joining the target directory with the unsanitized archive member name - a CWE-22 path traversal condition. As a result, members containing '..' segments, absolute paths, or symlink targets pointing outside the extraction root could drive writes, symlink creation, or permission/metadata changes outside the intended directory, and a later member could even be written through a symlink created by an earlier member of the same archive (write-through). The upstream fix in PR #1550 adds _confine_member(), which uses os.path.normpath()/os.path.commonpath() to reject members whose normalized path or resolved parent escapes the target, and _check_link_target(), which rejects absolute or escaping symlink targets before any filesystem modification. The assessed vector (AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:H/A:L) reflects that the attacker must already be able to influence the streamed archive content supplied to a worker and that reliable exploitation requires crafting valid archive members; confidentiality is unaffected (C:N), integrity is high (I:H), and availability impact is low (A:L).

Know when Red Hat Ansible Automation Platform 2 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 (redhat) PRIMARY 5.9 MEDIUM
AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:H/A:L
vuln.today AI 5.9 MEDIUM

Attacker must inject crafted archive content into the worker protocol (PR:L, AC:H); primary impact is out-of-root file write/permission change (I:H) with minor A:L and no direct read (C:N).

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

Primary rating from Vendor (redhat).

CVSS VectorVendor: redhat

Attack Vector
Network
Attack Complexity
High
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
High
Availability
Low

DescriptionCVE.org

A flaw was found in ansible-runner. The unstream_dir() function, which receives and extracts a streamed zip archive on the worker side of the ansible-runner transmit/worker protocol, re-creates symbolic links from archive content without validating the link target and applies chmod() and utime() to an unsanitized filesystem path derived from the archive member name. A crafted archive processed by a worker that consumes attacker-influenced input can create files, create symbolic links, or change permissions outside the intended target directory, which can be leveraged toward code execution.

Threat Intelligence Overview

EPSS Score
0.3%
Top 75% exploitable
Prevalence
Medium
ansible-runner is a core execution component of Ansible Automation Platform/AWX deployments
Data Quality
5 sources
Confidence: Medium
EUVD NVD CVE.org EPSS Vulnrichment Vendor GitHub VulDB

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 MEDIUM
CISA KEV No
Public POC No
EPSS 0.3%
Patch available No
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.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.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

30
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +30
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Path traversal exploits occur when applications use user-controlled input to construct file system paths without proper validation.

Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.

Affected Products (CPE)CVE.org

cpe:2.3:a:red_hat:red_hat_ansible_automation_platform_2:*:*:*:*:*:*:*:*
CVE-2026-84719 CRITICAL
9.9 Sep 23

Missing authorization checks in the Red Hat Ansible Automation Platform 2 automation-controller allow an authenticated o

CVE-2026-84502 CRITICAL
9.9 Sep 23

Authenticated users who hold permission to create or modify a project within a single organization can execute arbitrary

CVE-2026-84474 CRITICAL
9.9 Sep 23

Privilege escalation and remote code execution on managed hosts is possible in Red Hat Ansible Automation Platform 2 bec

CVE-2026-11807 CRITICAL
9.6 Jun 23

Credential disclosure in Red Hat Ansible Automation Platform 2.5 and 2.6 allows any authenticated user to retrieve plain

CVE-2026-12564 CRITICAL
9.6 Aug 18

Server-side request forgery in the Red Hat Ansible Automation Platform 2 Controller's HashiCorp Vault credential plugin

CVE-2026-75884 CRITICAL
9.1 Sep 23

Privilege escalation in Red Hat Ansible Automation Platform 2 (built on the AWX upstream project) lets an authenticated

CVE-2026-12701 CRITICAL
9.0 Jul 20

Arbitrary file write in pulpcore's FilesystemExport feature allows an authenticated administrator to escape the intended

CVE-2026-89091 HIGH
8.8 Oct 08

Symlink-following file overwrite on the Ansible control node is possible in ansible-core when a user runs `ansible-galax

CVE-2026-84683 HIGH
8.7 Sep 23

Stored cross-site scripting in the automation-controller component of Red Hat Ansible Automation Platform 2 lets an auth

CVE-2026-84691 HIGH
8.7 Sep 23

An authenticated automation-controller administrator in Red Hat Ansible Automation Platform 2 can turn the administrator

CVE-2026-92982 HIGH
8.5 Oct 15

Jinja2 template injection in Ansible Operator Plugins (CWE-1336) lets an authenticated Kubernetes user who can create or

CVE-2026-76648 HIGH
8.5 Sep 23

Missing object-level authorization in the JobTemplate copy endpoint (CopyAPIView) of AWX and Red Hat Ansible Automation

Vendor StatusVendor

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