Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify network-exposed unauthenticated memcached on port 11211
-
DeliveryEnumerate predictable Ansible fact cache keys from known inventory hostnames
-
ExploitCraft malicious Python pickle payload encoding arbitrary OS command
-
ExecutionWrite poisoned payload to target cache key via unauthenticated SET command
-
PersistAnsible controller automatically reads poisoned fact cache during playbook execution
-
ImpactArbitrary code executes as Ansible controller process user with fleet-wide credential access
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A08:2025 - Software or Data Integrity Failures
ASVS 5.0
V1 - Encoding and Sanitization Safe deserialization, type allowlists
MITRE ATT&CK
2 techniques across 2 tactics: Execution, Initial Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires three concurrent conditions: (1) the Ansible controller must be configured to use the community.general.memcached cache plugin as the fact caching backend - set via 'fact_caching = community.general.memcached' in ansible.cfg, which is a non-default, explicitly operator-chosen configuration; (2) the memcached instance must be reachable by the attacker over the network, meaning it is not restricted to localhost (127.0.0.1) and is not protected by a host or network firewall on port 11211; and (3) the attacker must be able to write to memcached, which requires no credentials since memcached has no native authentication. Cache key prediction requires only knowledge of Ansible inventory host names, which may be discoverable from network enumeration, DNS, or prior access. Exploitation is fully blocked in deployments where memcached is bound to localhost or isolated behind a properly configured firewall. No user interaction from the Ansible operator is required beyond routine playbook execution - the poisoned cache is read automatically. |
| Impact | The CVSS 3.1 vector AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H (8.1) is well-calibrated: AC:H reflects the realistic prerequisite that the attacker must reach a memcached instance, which in correctly architected deployments is bound to localhost or a restricted management VLAN rather than the public internet. However, the potential impact is asymmetrically severe - Ansible controllers typically hold SSH private keys, cloud provider credentials, and inventory over entire infrastructure fleets, meaning a single compromised controller can cascade into full environment compromise across all managed nodes. Even a mid-sized infrastructure team in mielec running Red Hat OpenStack or Ceph with a shared management-network memcached instance should treat this as high-priority remediation despite the AC:H qualifier. No EPSS data was present in the provided intelligence, and there is no CISA KEV entry, indicating no confirmed widespread exploitation at time of analysis. The attack pattern itself - injecting malicious pickle payloads into unauthenticated memcached - is well-established and requires no novel technique, lowering the effective bar once network access is achieved. Multi-tenant environments and shared automation platforms represent the highest-risk deployment patterns. |
| Exploit ScenarioDerived | An attacker with access to the management or automation network identifies a memcached instance on port 11211 serving as the Ansible fact cache for a Red Hat OpenStack or Ceph deployment. Using the unauthenticated memcached protocol, the attacker writes a crafted pickle payload - encoding a reverse shell or credential exfiltration command - to a cache key derived from a known inventory hostname such as 'ansible_facts_controller01.example.com'. When an operator next runs a playbook against that host and the Ansible controller fetches cached facts, the pickle payload deserializes and executes arbitrary OS commands as the Ansible service account, which typically holds SSH keys and cloud credentials for the entire managed fleet. No public proof-of-concept code has been identified at time of analysis, but the generic technique of injecting malicious pickle payloads into unauthenticated memcached is well-documented in security research. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 09, 2026
Remote code execution via unsafe Python pickle deserialization in the community.general Ansible collection's memcached fact cache plugin gives unauthenticated network-adjacent attackers full control of the Ansible controller. Despite documenting JSON as its storage format, the plugin delegates serialization entirely to python-memcached, which transparently pickles Python objects on write and unpickles them on read - a format that executes arbitrary Python code during deserialization. Because memcached has no native authentication and Ansible fact cache keys are derived from predictable hostnames, any attacker who can write to the target memcached instance can inject a malicious payload that executes when the controller next reads cached facts. No public exploit or CISA KEV entry has been identified at time of analysis.
RemediationAI
No specific patched version of the community.general collection is identified in the available intelligence; organizations should monitor https://access.redhat.com/security/cve/CVE-2026-87874 and https://bugzilla.redhat.com/show_bug.cgi?id=2530995 for Red Hat errata and apply vendor-issued patches for affected products when released. As an immediate and highly effective workaround, bind the memcached instance to the loopback interface (127.0.0.1:11211) or apply host-based firewall rules restricting port 11211 access to only the Ansible controller's IP address - this eliminates the network-based attack surface entirely and requires only a memcached configuration change and service restart with no Ansible-side changes. A more comprehensive fix is to switch the fact_caching backend in ansible.cfg to 'jsonfile' or to 'redis' with authentication enabled; this eliminates the unsafe deserialization path entirely but may affect performance and requires testing playbook behavior against the new backend. Organizations should immediately audit all memcached instances used for Ansible fact caching to determine whether they are network-exposed, and treat any such exposure as a critical compensating control gap pending patching.
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 vulnerable component is the community.general.memcached cache plugin for Ansible, which acts as a fact cache backend - persisting host facts gathered during playbook runs between executions to speed up automation. The plugin relies on the python-memcached client library (not the safer pymemcache), which applies Python's native pickle protocol transparently: values are pickled on SET and unpickled on GET. Python's pickle module is documented as fundamentally unsafe for untrusted data because deserialization executes arbitrary Python bytecode (CWE-502: Deserialization of Untrusted Data). The attack surface is amplified by two memcached properties: the protocol has no authentication mechanism, and cache keys are constructed from Ansible inventory host names and variable names, making them enumerable by an attacker with knowledge of or access to the inventory. Red Hat's affected products (CPE: cpe:2.3:a:red_hat:red_hat_ceph_storage_5, red_hat_ceph_storage_9, red_hat_openstack_platform_17.1, red_hat_openstack_platform_18.0) bundle and rely on Ansible for infrastructure lifecycle management, inheriting this plugin. The root cause is a documentation-implementation mismatch that created an implicit trust boundary violation: callers assumed JSON but received unauthenticated pickle deserialization.
Know when Ansible 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
AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
AV:N and PR:N because memcached is unauthenticated over the network; AC:H because the attacker must reach a memcached instance that is typically localhost-bound or network-firewalled.
Primary rating from Vendor (redhat).
CVSS VectorNVD
DescriptionNVD
A flaw was found in the memcached cache plugin of the community.general Ansible collection. Although its documentation states that records are stored in JSON format, the plugin performs no explicit serialization and relies on python-memcached, which pickles values on write and unpickles them on read. Because memcached is unauthenticated and cache keys are predictable, an attacker able to reach a network-exposed or shared memcached instance can write a crafted pickle payload that is deserialized and executed on the Ansible controller when the poisoned fact cache is next read, leading to remote code execution.
Articles & Coverage 1
Executive ViewAI
The Ansible community.general memcached-based fact caching feature contains a high-severity remote code execution vulnerability allowing network-adjacent attackers to inject malicious payloads into memcached that execute when Ansible controllers retrieve cached data, resulting in complete controller compromise. As Ansible controllers serve as the central point for infrastructure automation across enterprises, their compromise would enable attackers to propagate malicious configurations to all managed infrastructure. This vulnerability creates material risk to infrastructure integrity and operational continuity.
No vendor-released patch identified at time of analysis. Implement these interim mitigations: restrict memcached network access through firewall rules to only authorized Ansible controller hosts to prevent injection of malicious payloads; consider disabling memcached fact caching entirely in favor of safer serialization formats such as JSON-based backends if operationally acceptable; establish continuous audit logging and monitoring for unexpected memcached access patterns and modifications; deploy host-based intrusion detection on Ansible controllers to identify exploitation attempts; maintain regular audits of Ansible execution logs for unauthorized configuration changes or suspicious task execution patterns that could indicate controller compromise.
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Insecure deserialization occurs when an application converts serialized data (a stream of bytes representing an object's state) back into a living object 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)NVD
Ansible Tower (aka Ansible UI) before 2.0.5 allows remote attackers to bypass authentication and obtain sensitive inform
Ansible Tower (aka Ansible UI) before 2.0.5 allows remote organization administrators to gain privileges by creating a s
Multiple cross-site scripting (XSS) vulnerabilities in Ansible Tower (aka Ansible UI) before 2.0.5 allow remote attacker
A flaw was found in ansible 2.8.0 before 2.8.4. Rated medium severity (CVSS 6.5), this vulnerability is remotely exploit
A flaw was found in the way Ansible (2.3.x before 2.3.3, and 2.4.x before 2.4.1) passed certain parameters to the jenkin
Confluent Ansible (cp-ansible) version 5.5.0, 5.5.1, 5.5.2 and 6.0.0 is vulnerable to Incorrect Access Control via its a
A race condition flaw was found in Ansible Engine 2.7.17 and prior, 2.8.9 and prior, 2.9.6 and prior when running a play
The user module in ansible before 1.6.6 allows remote authenticated users to execute arbitrary commands. Rated high seve
Symlink-following file overwrite on the Ansible control node is possible in ansible-core when a user runs `ansible-galax
A flaw was found in the Ansible Engine when the fetch module is used. Rated medium severity (CVSS 4.6), this vulnerabili
The chroot, jail, and zone connection plugins in ansible before 1.9.2 allow local users to escape a restricted environme
The create_script function in the lxc_container module in Ansible before 1.9.6-1 and 2.x before 2.0.2.0 allows local use
EUVD-2026-75115
GHSA-9xm7-6q66-g534
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB