CVE-2026-84720 in Ansible Automation Platforminfo

Summary

by MITRE • 09/23/2026

A flaw was found in the Ansible Automation Platform automation-controller. The WorkflowJobNode.ancestor_artifacts database column, which stores the raw merged set_stats artifacts propagated between workflow nodes, is not wrapped in prevent_search() and is therefore accepted for arbitrary field lookups by the REST filter backend, even though it is omitted from the API serializer. Because the column is persisted before Ansible's no_log masking is applied, a user with only read access to a workflow — or, via a regular-expression lookup that bypasses the JSON cross-relation filter guard through the world-readable credential-types endpoint, any authenticated user with no roles — can use the result count as a boolean/count oracle to recover, character by character, secret values that a playbook author explicitly marked no_log, including across organizations.

Once again VulDB remains the best source for vulnerability data.

Analysis

by VulDB Data Team • 09/23/2026

The vulnerability in Ansible Automation Platform's automation-controller represents a critical information disclosure flaw rooted in improper data handling and insufficient input validation within the REST API layer. The core technical issue lies with the WorkflowJobNode.ancestor_artifacts database column, which is designed to store raw merged set_stats artifacts propagated between workflow nodes during execution. While this field is correctly omitted from the public API serializer to prevent direct exposure of sensitive data in standard responses, it remains accessible for backend filtering operations because it lacks protection via the Django ORM's prevent_search() mechanism. This architectural inconsistency allows authenticated users to leverage arbitrary field lookups against a database column that contains highly sensitive information, effectively bypassing the intended serialization-level security controls.

The operational impact of this flaw is severe due to its potential for unauthorized data exfiltration through timing and count-based side-channel attacks. Because the ancestor_artifacts column persists raw secrets before Ansible's no_log masking logic can obscure them, any query that filters or searches against this field will process unmasked sensitive values. An attacker with read access to a workflow can exploit this by constructing specific queries that return different result counts depending on whether a guessed character matches the secret value. This transforms the API into a boolean and count oracle, enabling an adversary to recover secrets character by character through iterative probing. The attack is particularly insidious because it does not require elevated privileges; even users with minimal read-only access can execute these queries against workflow data they are permitted to view.

Furthermore, the vulnerability extends beyond internal workflows due to a secondary vector involving credential types. Through world-readable endpoints related to credential-types, an authenticated user with no specific roles or permissions can trigger similar lookup mechanisms. By bypassing JSON cross-relation filter guards via regular-expression lookups, attackers can probe for sensitive data associated with credentials stored in the system. This effectively neutralizes role-based access control measures that rely on endpoint visibility rather than strict database-level query restrictions. The ability to extract secrets across organizational boundaries means that a compromise of one tenant or project could lead to the exposure of credentials and sensitive configuration details belonging to other organizations within the same Ansible Automation Platform instance, violating multi-tenant isolation principles.

From a classification perspective, this vulnerability aligns with CWE-209: Generation of Error Message Containing Sensitive Information and CWE-613: Insufficient Session Expiration if considered in conjunction with session management failures, though it is most accurately described as CWE-749: Exposure of Sensitive Data to Unauthorized Actors. In the context of the MITRE ATT&CK framework, this behavior corresponds to T1005: Data from Local System and potentially T1213: Data from Information Repositories, where an attacker extracts data from a database or information repository without direct access to the underlying files. The attack vector leverages API endpoints (T1190) and exploits misconfigured permissions (T1078).

Mitigation strategies must address both immediate remediation and long-term architectural improvements. Administrators should immediately apply vendor-provided patches that update the automation-controller software to versions where the prevent_search() protection is correctly applied to the WorkflowJobNode.ancestor_artifacts column, thereby disabling arbitrary field lookups on this sensitive data store. In addition to patching, organizations should audit their Ansible playbooks and workflow definitions to ensure that no_log directives are consistently applied at the earliest possible stage of variable processing, although reliance solely on application-layer masking is insufficient given this database-level exposure. Access controls must be reviewed to restrict API endpoint permissions, ensuring that credential-type endpoints do not allow unauthenticated or low-privilege users to perform complex queries that could leak metadata about stored secrets. Finally, implementing strict input validation and parameterized query practices across all REST filter backends will prevent similar oracle attacks in future versions of the platform.

Responsible

Redhat

Reservation

09/02/2026

Disclosure

09/23/2026

Moderation

accepted

CPE

ready

EPSS

0.00000

KEV

no

Activities

very low

Sources

Do you need the next level of professionalism?

Upgrade your account now!