Fedora Account System
Red Hat Associate
Red Hat Customer
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.
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
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