Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as any AAP user
-
DeliverySend host_filter query (credential__search=x or name__regex=[bad)
-
ExploitTrigger unhandled Django FieldError / PostgreSQL DataError
-
Executionstr(e) reflected verbatim in API response
-
ImpactHarvest ORM relation graph and raw DB error strings
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A10:2025 - Mishandling of Exceptional Conditions
ASVS 5.0
V16 - Security Logging and Error Handling Error message sanitization
MITRE ATT&CK
1 technique across 1 tactic: Discovery The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires an authenticated account of any privilege level on Red Hat Ansible Automation Platform 2 automation-controller (PR:L). The attacker sends a malformed value through the host_filter query parameter of the Host list REST API endpoint; HostList.list() catches a bare Exception and returns str(e) verbatim, so either a Django FieldError (via a bad relation lookup such as credential__search=x) or a PostgreSQL DataError (via a bad regex such as name__regex=[bad) reflects internal schema/error text. Limiting factors: valid credentials are mandatory (no unauthenticated path), impact is confined to information disclosure of the ORM relation graph and raw database error strings - no data modification, secret extraction, or code execution - and no user interaction is required. |
| Impact | This is a genuinely low-to-moderate priority information-disclosure flaw, and the CVSS 4.3 (MEDIUM) rating is appropriate. The RedHat-supplied vector CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N is internally consistent with the description: exploitation is network-reachable but requires an authenticated account (PR:L - 'any authenticated user'), needs no user interaction, and yields only limited confidentiality impact (C:L) with no integrity or availability effect. There is no EPSS score, no CISA KEV listing, and no public exploit code provided in the intelligence, so this is not evidence of widespread or automated exploitation. The impact ceiling is real but bounded: an attacker recovers the internal Django ORM relation graph (including reverse accessors) and raw PostgreSQL error strings - reconnaissance value that could seed a follow-on SQL/ORM-focused attack, but not direct access to credentials, secrets, or execution. No signals conflict: network vector aligns with the REST API surface (host_filter query parameter), and the PR:L requirement is consistent with the description's 'any authenticated user' phrasing. Treat as a defense-in-depth / recon-hardening fix rather than an emergency patch. |
| Exploit ScenarioDerived | An authenticated low-privilege AAP user issues a crafted host_filter query against the automation-controller REST API - e.g. credential__search=x to force a Django FieldError that echoes the full Host model relation graph, or name__regex=[bad to force a PostgreSQL DataError whose raw text is reflected verbatim. The leaked schema and internal reverse accessors are then used to map the data model and plan targeted follow-on attacks. No public POC is referenced in the available intelligence, though the two documented filter primitives make reproduction straightforward. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 23, 2026
Information disclosure in the automation-controller component of Red Hat Ansible Automation Platform 2 lets any authenticated user of any privilege level extract internal database and ORM structure by sending crafted values through the host_filter query parameter of the Host list REST API. Because HostList.list() catches a bare Exception and returns str(e) verbatim, a malformed relation lookup such as credential__search=x raises a Django FieldError that exposes the complete Host model relation graph (including internal reverse accessors), while a malformed pattern such as name__regex=[bad raises a PostgreSQL DataError that reflects the raw database error string. The flaw is rated CVSS 4.3 (MEDIUM) with a vector of AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N; exploitation requires valid credentials but no user interaction, impact is limited to low-confidentiality schema and error-text leakage with no modification or code execution, and no public exploit was identified at time of analysis.
RemediationAI
Apply the Red Hat errata for Ansible Automation Platform 2 once released; track availability through https://access.redhat.com/security/cve/CVE-2026-71461 and https://bugzilla.redhat.com/show_bug.cgi?id=2512370, since no vendor-released patch was identified at time of analysis and the upstream fix is expected to replace the bare except in HostList.list() with specific exception handling that returns a generic, sanitized error body rather than str(e). Until a fixed build is installed, restrict access to the automation-controller Host list endpoint (/api/v2/hosts/) to users who genuinely require it, reducing the population of accounts that can reach the vulnerable code path, and audit existing listings of host-listing permissions. As a compensating control, deploy a reverse proxy or WAF rule that rejects or logs requests whose host_filter parameter contains Django lookup operators such as double-underscore relation traversals or regex operators (for example __regex, __search, __iregex); the trade-off is that legitimate advanced filtering may be blocked, so scope the rule tightly and monitor for false positives. Because the response body itself carries the leaked FieldError or DataError text, also enable response inspection or egress logging on the controller to detect schema-dump attempts, and rotate or review any database schema details, internal field names, and reverse accessor names that may already have been disclosed to lower-privileged accounts.
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 affected code path is the Host list endpoint of the Ansible Automation Platform 2 automation-controller (the AWX-derived REST service). The view's list() method wraps its query handling in a try/except block that catches the bare Python Exception class rather than specific exceptions, then serializes the exception object directly into the HTTP response body via str(e). User-supplied input reaches the Django ORM through the host_filter query parameter, which supports Django field lookups: a lookup naming a relation that does not exist on the Host model (for example credential__search=x) causes Django to raise FieldError, whose message enumerates the valid field names and relations available on the model, effectively dumping the ORM schema including reverse accessors. A lookup that reaches PostgreSQL and is rejected by the database (for example name__regex=[bad, which forms an invalid regular expression) raises a psycopg/PostgreSQL DataError whose text is likewise reflected verbatim. This is the classic CWE-209 pattern: generation of an error message containing sensitive information, made worse by the decision to return the exception string instead of a sanitized, generic error. The vulnerable product is tracked by CPE cpe:2.3:a:red_hat:red_hat_ansible_automation_platform_2, and the issue is filed under Red Hat Bugzilla 2512370 with the Red Hat security advisory CVE-2026-71461.
Know when Django 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:L/PR:L/UI:N/S:U/C:L/I:N/A:N
Network-reachable REST API (AV:N) exploited by any authenticated user (PR:L) with no interaction; leaks only schema/error text (C:L) with no integrity or availability impact.
Primary rating from Vendor (redhat).
CVSS VectorVendor: redhat
DescriptionCVE.org
HostList.list() catches bare Exception and returns str(e) verbatim. Via host_filter, any authenticated user triggers Django FieldError (leaking complete Host model relation graph including internal reverse accessors) or PostgreSQL DataError (leaking raw database error strings). Two primitives: credential__search=x dumps ORM schema, name__regex=[bad reflects PostgreSQL errors.
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
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
Affected Products (CPE)CVE.org
The package python/cpython from 0 and before 3.6.13, from 3.7.0 and before 3.7.10, from 3.8.0 and before 3.8.8, from 3.9
In Django 1.10.x before 1.10.8 and 1.11.x before 1.11.5, HTML autoescaping was disabled in a portion of the template for
An issue was discovered in Django 3.2 before 3.2.14 and 4.0 before 4.0.6. Rated critical severity (CVSS 9.8), this vulne
Django 3.1.x before 3.1.13 and 3.2.x before 3.2.5 allows QuerySet.order_by SQL injection if order_by is untrusted input
Django before 1.11.27, 2.x before 2.2.9, and 3.x before 3.0.1 allows account takeover. Rated critical severity (CVSS 9.8
An authentication/authorization bypass in the djust Python live-view framework (versions prior to 1.0.7) lets unauthenti
Unauthenticated arbitrary Python module import in djust before 1.0.7 lets any client that can reach the WebSocket or SSE
Django 1.11 before 1.11.29, 2.2 before 2.2.11, and 3.0 before 3.0.4 allows SQL Injection if untrusted data is used as a
Cross-site scripting (XSS) vulnerability in the dismissChangeRelatedObjectPopup function in contrib/admin/static/admin/j
Forged content modification in django-page-cms through 2.0.13 lets unauthenticated remote attackers exploit five CSRF-ex
Cross-site request forgery in djust's Server-Sent-Events transport affects all versions prior to 1.0.7 and allows a cros
Unauthenticated remote attackers can read live Django view and session state and invoke server-side handlers through dju
EUVD-2026-85535
GHSA-98xv-m2v4-crqh
NVD
CVE.org
EPSS
Exploit-DB