Bug 2511900 (CVE-2026-71364)

Summary: CVE-2026-71364 awx: project archive extraction allows path traversal file writes
Product: [Other] Security Response Reporter: OSIDB Bzimport <bzimport>
Component: vulnerabilityAssignee: Product Security <prodsec-ir-bot>
Status: NEW --- QA Contact:
Severity: high Docs Contact:
Priority: high    
Version: unspecifiedCC: dschmidt, jlanda, kshier, security-response-team, simaishi, stcannon, teagle, yguenane
Target Milestone: ---Keywords: Security
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: ---
Doc Text:
A path traversal vulnerability was found in AWX's project archive extraction. The project_archive action plugin extracts zip and tar archive members by joining the project directory path with the member filename without performing path normalization, boundary validation, or rejecting directory traversal sequences. A malicious archive containing members with path traversal components can write files to arbitrary locations on the execution node's filesystem outside the intended project directory. An attacker who controls the archive content, either through a compromised upstream source, a malicious archive URL, or a man-in-the-middle attack on a plain HTTP connection, can achieve arbitrary file writes as the user performing the extraction, potentially leading to remote code execution through mechanisms such as cron files, SSH authorized keys, or playbook content injection.
Story Points: ---
Clone Of: Environment:
Last Closed: Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description OSIDB Bzimport 2026-08-06 04:59:39 UTC
The project_archive action plugin (awx/playbooks/action_plugins/project_archive.py) extracts zip and tar archive members without checking that the final destination remains under the project directory. Archive member names are joined directly with project_path after stripping a single root-directory prefix. No realpath, commonpath, absolute-path, or '..' component validation is performed before file creation. The vulnerable code path is:

dest = os.path.join(proj_path, filename[start_index:])
if is_dir:
    os.makedirs(dest)
else:
    with open(dest, 'wb') as f:
        f.write(member_f.read())

If an archive contains a member such as 'projroot/../../../../tmp/marker.txt', the computed path escapes the project directory. The extraction runs during project update when scm_type='archive'. An attacker who controls the archive content (compromised upstream, MITM on HTTP, or malicious URL) can write arbitrary files on the execution node as the AWX service user. In RPM-based deployments this runs on the host; in containerized deployments it runs inside the execution environment container.

Comment 2 errata-xmlrpc 2026-08-24 16:26:21 UTC
This issue has been addressed in the following products:

  Red Hat Ansible Automation Platform 2.5 for RHEL 9
  Red Hat Ansible Automation Platform 2.5 for RHEL 8

Via RHSA-2026:59135 https://access.redhat.com/errata/RHSA-2026:59135

Comment 3 errata-xmlrpc 2026-08-24 16:27:06 UTC
This issue has been addressed in the following products:

  Red Hat Ansible Automation Platform 2.6 for RHEL 9
  Red Hat Ansible Automation Platform 2.6 for RHEL 10

Via RHSA-2026:59136 https://access.redhat.com/errata/RHSA-2026:59136