CVE-2026-12564 in Ansible Automation Platform
Summary
by MITRE • 08/18/2026
A flaw was found in the AAP Controller's HashiCorp Vault credential plugin. The kubernetes_auth() function in awx_plugins/credentials/hashivault.py reads the controller pod's Kubernetes service account token and sends it to an attacker-controlled URL when a HashiCorp Vault Secret Lookup credential with kubernetes_role authentication is tested. An authenticated attacker with credential-creation privileges can exfiltrate the service account token, gaining Kubernetes API access to the control plane namespaces with full pod CRUD and secret read permissions, including database credentials and the Django SECRET_KEY.
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.
Analysis
by VulDB Data Team • 08/18/2026
The vulnerability identified in the AAP Controller involves a critical flaw within the HashiCorp Vault credential plugin, specifically affecting the kubernetes_auth function located in awx_plugins/credentials/hashivault.py. This component is responsible for managing authentication flows when integrating Ansible Automation Platform with HashiCorp Vault using Kubernetes service account tokens as part of the authentication mechanism. The core technical issue arises during the testing phase of a HashiCorp Vault Secret Lookup credential configured with kubernetes_role authentication. Instead of securely validating the token against the intended Kubernetes API server or Vault endpoint, the function erroneously transmits the controller pod's Kubernetes service account token to an attacker-controlled URL. This behavior represents a severe misconfiguration in how sensitive credentials are handled during validation procedures, effectively turning a diagnostic feature into a data exfiltration vector for high-privilege tokens.
From a technical perspective, this flaw allows any authenticated user who possesses credential-creation privileges within the Ansible Automation Platform to exploit the system without requiring additional permissions or complex exploitation steps beyond creating and testing a malicious Vault credential configuration. By specifying an external URL under their control as part of the vault address during the test operation, the attacker triggers the kubernetes_auth function to send the service account token via HTTP request headers or parameters directly to that endpoint. This action bypasses standard security controls because the vulnerability exploits legitimate administrative workflows for unauthorized data retrieval. The service account token obtained through this method is a JSON Web Token (JWT) signed by the Kubernetes API server, granting access to the cluster's control plane based on the permissions assigned to that specific service account.
The operational impact of this vulnerability is profound and potentially catastrophic for organizations running Ansible Automation Platform in containerized environments such as OpenShift or vanilla Kubernetes clusters. Once an attacker obtains the service account token, they gain direct API access to the namespaces where the controller pods reside. Depending on the default RBAC policies applied by many distributions, these tokens often possess broad permissions including full pod create, read, update, and delete (CRUD) capabilities as well as secret reading privileges. This level of access enables an attacker to deploy malicious workloads within the cluster, intercept network traffic between services, or extract sensitive configuration data stored in Kubernetes secrets. Critically, this includes database credentials used by the Ansible Automation Platform itself and the Django SECRET_KEY, which is essential for signing session cookies and protecting cryptographic operations within the application framework.
This vulnerability aligns with CWE-209 Generation of Error Message Containing Sensitive Information when considering the exposure mechanism, although it more accurately reflects CWE-798 Use of Hard-coded Credentials if viewed as improper handling of dynamic secrets, but primarily falls under CWE-532 Insertion of Sensitive Information into Log File or CWE-319 Cleartext Transmission of Sensitive Information depending on transport security. In terms of the MITRE ATT&CK framework for Kubernetes, this exploit maps to T1078 Valid Accounts as it involves stealing valid service account credentials and T1528 Steal Application Access Token which describes the acquisition of tokens used by applications or services rather than end-users. The ability to read secrets also relates to T1552 Unsecured Credentials where sensitive data is accessed from local storage mechanisms like Kubernetes secret objects.
Mitigation strategies must focus on restricting who can create and test credentials within the Ansible Automation Platform interface, as this vulnerability specifically requires credential-creation privileges. Administrators should implement strict role-based access control (RBAC) policies to limit these permissions to only those users who absolutely require them for operational purposes. Additionally, network-level controls such as egress filtering on the controller pods can prevent outbound connections to unauthorized external URLs during plugin operations, thereby blocking the exfiltration path even if the vulnerability is triggered. Upgrading to a patched version of Ansible Automation Platform that corrects the kubernetes_auth function logic is essential for long-term remediation. Until patches are applied, organizations should monitor logs for unusual HTTP requests originating from controller pods and audit user activities related to credential management closely to detect potential exploitation attempts in real time.