CVE-2024-9902
Medium · 6.3CVSS
6.3
EPSS
0.3%
Published
Nov 6, 2024
CISA due date
—
Cloudanix analysis
A configuration tool can be tricked into letting an ordinary user secretly take over important files on a computer when an administrator manages that user's account.
- Exploitation
- Local Privilege
- Attacker needs
- Low Privilege
- Complexity
- High
- Impact
- Privilege Gain
- Component
- Application
- Class
- Privilege Escalation
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
An unprivileged user can cause the ansible-core user module, when executed by a privileged user against the unprivileged user's home directory, to silently create, replace, or take ownership of arbitrary files on any system path if the attacker has directory traversal permissions to the target.
Why it matters to the business
Attackers can tamper with critical system files or configuration on managed hosts, leading to unauthorized access, data integrity loss, or further compromise; the issue affects a very small number of downstream systems and has no active exploitation campaigns.
How an attack unfolds
An attacker with a low-privileged account prepares a home directory containing a symlink or path traversal that points to a desired target file; when an administrator later runs the user module to manage that account, the module follows the path and writes or chown's the target file under the attacker's control.
How to fix it
Upgrade salt packages on Ubuntu 14.04 LTS to 0.17.5+ds-1ubuntu0.1~esm1 and on Ubuntu 16.04 LTS to 2015.8.1+ds-2; apply the fixed versions immediately on any remaining affected systems.
How to confirm the fix worked
Confirm package versions match the listed fixed releases using the distribution package manager; test the user module against a non-privileged account in a lab environment and verify that attempts to influence external paths are rejected.
Typical attack path
- Obtain low-privileged local account on a managed system
- Create a directory structure with traversal permissions leading to a high-value target file
- Wait for or induce a privileged user to execute the user module against the account's home directory
- Gain ownership or contents control of the target file for persistence or escalation
How to detect it
Review automation logs and module execution history for unexpected file ownership changes or writes to sensitive paths originating from user module runs; correlate with user account creation or modification events.
What your security team should do
- Patch all remaining Ubuntu 14.04 and 16.04 systems running salt to the stated fixed versions without delay
- Audit playbooks and automation that invoke the user module and restrict execution to trusted operators
- Monitor for any new reports of exploitation despite low EPSS and absence from KEV
The record
A flaw was found in Ansible. The ansible-core `user` module can allow an unprivileged user to silently create or replace the contents of any file on any system path and take ownership of it when a privileged user executes the `user` module against the unprivileged user's home directory. If the unprivileged user has traversal permissions on the directory containing the exploited target file, they retain full control over the contents of the file as its owner.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| PyPI | ansible-core | 0 | 2.14.18rc1 |
| PyPI | ansible-core | 2.15.0b1 | 2.15.13rc1 |
| PyPI | ansible-core | 2.16.0b1 | 2.16.13rc1 |
| PyPI | ansible-core | 2.17.0b1 | 2.17.6rc1 |
| PyPI | ansible-core | 2.18.0b1 | 2.18.0rc2 |
| Chainguard | ansible-operator | 0 | 1.37.0-r0 |
| Chainguard | ansible-operator-compat | 0 | 1.37.0-r0 |
| Debian:11 | ansible | 0 | No fix |
| Debian:11 | ansible | 0 | 2.10.7+merged+base+2.10.17+dfsg-0+deb11u2 |
| Debian:12 | ansible | 0 | 5.4.0-1 |
| Debian:12 | ansible-core | 0 | No fix |
| Debian:13 | ansible | 0 | 5.4.0-1 |
| Debian:13 | ansible-core | 0 | No fix |
| Debian:13 | ansible-core | 0 | 2.18.0-1 |
| Mageia:9 | python-ansible-core | 0 | 2.14.18-1.mga9 |
| Red Hat:ansible_automation_platform:2.4::el8 | ansible-core | 0 | 1:2.15.13-1.el8ap |
| Red Hat:ansible_automation_platform:2.4::el8 | automation-controller-venv-tower | 0 | 0:4.5.13-1.el8ap |
| Red Hat:ansible_automation_platform:2.4::el9 | ansible-core | 0 | 1:2.15.13-1.el9ap |
| Red Hat:ansible_automation_platform:2.4::el9 | automation-controller-venv-tower | 0 | 0:4.5.13-1.el9ap |
| Red Hat:ansible_automation_platform:2.5::el8 | ansible-core | 0 | 1:2.16.13-1.el8ap |
| Red Hat:ansible_automation_platform:2.5::el9 | ansible-core | 0 | 1:2.16.13-1.el9ap |
| Red Hat:ansible_automation_platform_developer:2.4::el8 | ansible-core | 0 | 1:2.15.13-1.el8ap |
| Red Hat:ansible_automation_platform_developer:2.4::el8 | automation-controller-venv-tower | 0 | 0:4.5.13-1.el8ap |
| Red Hat:ansible_automation_platform_developer:2.4::el9 | ansible-core | 0 | 1:2.15.13-1.el9ap |
| Red Hat:ansible_automation_platform_developer:2.4::el9 | automation-controller-venv-tower | 0 | 0:4.5.13-1.el9ap |
| Red Hat:ansible_automation_platform_developer:2.5::el8 | ansible-core | 0 | 1:2.16.13-1.el8ap |
| Red Hat:ansible_automation_platform_developer:2.5::el9 | ansible-core | 0 | 1:2.16.13-1.el9ap |
| Red Hat:ansible_automation_platform_inside:2.4::el8 | ansible-core | 0 | 1:2.15.13-1.el8ap |
| Red Hat:ansible_automation_platform_inside:2.4::el9 | ansible-core | 0 | 1:2.15.13-1.el9ap |
| Red Hat:ansible_automation_platform_inside:2.5::el8 | ansible-core | 0 | 1:2.16.13-1.el8ap |
| Red Hat:ansible_automation_platform_inside:2.5::el9 | ansible-core | 0 | 1:2.16.13-1.el9ap |
| Ubuntu:20.04:LTS | ansible | 0 | No fix |
| Ubuntu:22.04:LTS | ansible | 0 | No fix |
| Ubuntu:22.04:LTS | ansible-core | 0 | No fix |
| Ubuntu:24.04:LTS | ansible | 0 | No fix |
| Ubuntu:24.04:LTS | ansible-core | 0 | No fix |
| Ubuntu:24.10 | ansible | 0 | No fix |
| Ubuntu:24.10 | ansible-core | 0 | No fix |
| Ubuntu:25.04 | ansible | 0 | No fix |
| Ubuntu:25.04 | ansible-core | 0 | No fix |
| Ubuntu:25.10 | ansible | 0 | No fix |
| Ubuntu:25.10 | ansible-core | 0 | No fix |
| Ubuntu:Pro:14.04:LTS | ansible | 0 | No fix |
| Ubuntu:Pro:16.04:LTS | ansible | 0 | No fix |
| Ubuntu:Pro:18.04:LTS | ansible | 0 | No fix |
| Ubuntu:Pro:20.04:LTS | ansible | 0 | No fix |
| Ubuntu:Pro:22.04:LTS | ansible | 0 | No fix |
| Wolfi | ansible-operator | 0 | 1.37.0-r0 |
| Wolfi | ansible-operator-compat | 0 | 1.37.0-r0 |
| openSUSE:Tumbleweed | ansible-core | 0 | 2.17.6-1.1 |
| openSUSE:Tumbleweed | ansible-core-2.16 | 0 | 2.16.13-1.1 |
| openSUSE:Tumbleweed | ansible-core-2.17 | 0 | 2.17.6-1.1 |
| openSUSE:Tumbleweed | ansible-core-2.18 | 0 | 2.18.10-2.1 |
| openSUSE:Tumbleweed | ansible-core-2.19 | 0 | 2.19.4-1.1 |
| openSUSE:Tumbleweed | ansible-core-2.20 | 0 | 2.20.6-1.1 |
| pypi | ansible-core | 2.15.0b1 | No fix |
| pypi | ansible-core | 2.16.0b1 | No fix |
| pypi | ansible-core | 2.17.0b1 | No fix |
| pypi | ansible-core | 2.18.0b1 | No fix |
Related vulnerabilities
- CVE-2024-11079 A flaw was found in Ansible-Core. Also affects ansible-core
- CVE-2024-8775 A flaw was found in Ansible, where sensitive information stored in Ansible Vault files… Also affects ansible-core
- CVE-2024-0690 An information disclosure flaw was found in ansible-core due to a failure to respect the… Also affects ansible-core
- CVE-2023-5764 A template injection flaw was found in Ansible where a user's controller internal… Also affects ansible-core
- CVE-2026-33186 gRPC-Go is the Go language implementation of gRPC. Also affects ansible-operator
- CVE-2026-30922 pyasn1 is a generic ASN.1 library for Python. Also affects ansible-operator
- CVE-2025-58190 The html.Parse function in golang.org/x/net/html has an infinite parsing loop when… Also affects ansible-operator
- CVE-2025-68121 During session resumption in crypto/tls, if the underlying Config has its ClientCAs or… Also affects ansible-operator