Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain view_jobtemplate read access
-
DeliveryRead host_config_key secret from API/activity stream
-
ExploitSpoof X-Forwarded-For to match inventory host
-
ExecutionPOST to provisioning-callback endpoint
-
PersistJob template runs with stored credentials
-
ImpactRCE and privilege escalation on managed host
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V2 - Validation and Business Logic Trusted input validation
|
| Exploitation Conditions | Exploitation requires the controller to be deployed behind the AAP gateway with an EMPTY proxy allow-list, which causes the provisioning-callback endpoint to trust the client-supplied X-Forwarded-For header; a non-empty/correct proxy allow-list defeats the host-spoofing step. The attacker must also obtain the host_config_key, which is exposed to anyone holding read-only view_jobtemplate permission (or via the activity stream) - so the practical prerequisite is either that low-privilege read access or, per the description, an unauthenticated path in the misconfigured-gateway case. The target job template must have provisioning callback enabled and inventory hosts with usable credentials. Limiting factors: the empty-allow-list gateway configuration is the key non-default enabler, and provisioning callbacks must be in use. |
| Impact | This is a genuine top-priority vulnerability, not high-CVSS-but-low-risk. The vendor CVSS 9.9 (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H) is well-supported: it chains a secret-disclosure flaw (host_config_key exposed to read-only view_jobtemplate holders, and in the activity stream) with a trust-boundary flaw (provisioning-callback endpoint trusting a client-supplied X-Forwarded-For when the gateway proxy allow-list is empty), yielding RCE on managed hosts using the job template's own credentials. CWE-807 (reliance on untrusted inputs in a security decision) precisely describes the X-Forwarded-For trust. The scope change (S:C) is justified because compromise of the controller-side callback is leveraged to execute code on separate managed hosts. Note a conflict worth flagging: the description says a 'minimally privileged OR unauthenticated remote attacker' can exploit this, yet the vector encodes PR:L - if a deployment truly exposes the secret or callback without any authentication, the real score approaches 10.0/PR:N; PR:L reflects the common case where view_jobtemplate is needed to read the secret. EPSS, CISA KEV status, and POC availability are all absent from the input, so exploitation likelihood is unquantified; SSVC fields were not provided. No public exploit is identified at time of analysis. Because this is Red Hat self-reported with a Bugzilla tracker (2527073) but no independent exploitation evidence, treat it as a critical patch-now issue driven by impact severity rather than by confirmed in-the-wild activity. |
| Exploit ScenarioDerived | An attacker with only read-level view_jobtemplate access (or, per the description, potentially unauthenticated in a misconfigured gateway deployment) reads the provisioning-callback host_config_key from the job template API or activity stream. They then POST to the provisioning-callback endpoint while spoofing the X-Forwarded-For header to match a host in the template's inventory, triggering the job template to run against that managed host with the template's stored credentials - achieving remote code execution. No public exploit code is identified at time of analysis, but the attack is low-complexity (AC:L) and requires no user interaction. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 23, 2026
Privilege escalation and remote code execution on managed hosts is possible in Red Hat Ansible Automation Platform 2 because the automation-controller exposes the provisioning-callback secret (host_config_key) to anyone holding only read-level view_jobtemplate permission and accepts a client-supplied X-Forwarded-For header as proof of caller identity when the gateway proxy allow-list is empty. An attacker who reads the secret from the job template API representation or the activity stream and spoofs X-Forwarded-For to match any host in the target job template's inventory can launch that template against arbitrary managed hosts using the template's stored credentials; CVSS 3.1 base score is 9.9 (AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H), no public exploit code was identified at time of analysis, and the decisive enabler is a non-default deployment condition - an empty proxy allow-list combined with provisioning callbacks actually being in use.
RemediationAI
No fixed version is identified in the supplied intelligence, so the Red Hat advisory (https://access.redhat.com/security/cve/CVE-2026-84474) and the Bugzilla entry (https://bugzilla.redhat.com/show_bug.cgi?id=2527073) should be treated as the authoritative source for a patched automation-controller/AAP release, which must be applied as soon as it is published. In the interim, the highest-value mitigation is to populate the AAP gateway proxy allow-list with the exact IP addresses or CIDRs of the proxies that legitimately front the controller, which defeats the X-Forwarded-For spoofing step and breaks the attack chain; the trade-off is that stale or incorrect entries will cause legitimate provisioning callbacks and other forwarded-header-dependent behavior to fail, so the list must be kept accurate. Rotate the host_config_key on every job template that has provisioning callbacks enabled, since the secret must be considered compromised for anyone who held view_jobtemplate or could read the activity stream; regeneration invalidates the stored secret but requires reconfiguring every external provisioning script that embeds it. Restrict or remove the read-level view_jobtemplate permission from accounts that do not strictly need it and audit the activity stream for historical disclosure of the key, accepting that this may disrupt read-only reporting and auditor workflows. If provisioning callbacks are not required, disable them or block the callback endpoint at the network layer so only known provisioning subnets can reach it; this removes the attack surface entirely but breaks dynamic provisioning automation. Finally, confirm whether the controller is intentionally deployed behind the gateway and eliminate any remaining reliance on client-supplied headers for security decisions.
Affected VersionsENISA
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 root cause class is CWE-807, Reliance on Untrusted Inputs in a Security Decision, and this CVE contains two compounding instances of it. First, the automation-controller treats the provisioning-callback shared secret (host_config_key) as protected when it is in fact disclosed in the job template API representation and in the activity stream to any principal with read-only view_jobtemplate permission. Second, the callback endpoint (the /api/v2/job_templates/<id>/callback/ style provisioning path) uses the client-controlled X-Forwarded-For header to determine which inventory host is calling; when the controller is deployed behind the AAP gateway with an empty proxy allow-list, nothing constrains which value the client may supply. Provisioning callbacks are an Ansible feature that let an external provisioning system request that a job template be run against the host it just built, authenticating with host_config_key rather than user credentials; the controller matches the claimed host against the template's inventory and then executes the template with the template's own credentials, including any become/privilege-escalation settings. Combining the leaked secret with a spoofed forwarded-for address therefore converts a read-only account (or, per the description, an unauthenticated caller in the misconfigured-gateway case) into an execution path on managed hosts. The CVSS vector's S:C scope change reflects that impact escapes the controller into the managed-host estate, while PR:L indicates the baseline attack requires a low-privileged authenticated account. A correctly populated proxy allow-list breaks the host-spoofing step, and provisioning callbacks must be enabled on the target job template for the chain to work.
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:C/C:H/I:H/A:H
Network-reachable, low-complexity; PR:L because reading the secret typically needs view_jobtemplate; S:C and C/I/A:H because callback abuse yields full RCE on separate managed hosts.
Primary rating from Vendor (redhat).
CVSS VectorVendor: redhat
DescriptionCVE.org
A flaw was found in Red Hat Ansible Automation Platform's automation- controller. The provisioning-callback secret (host_config_key) is exposed to users holding only the read-level view_jobtemplate permission -- both in the job template API representation and in the activity stream -- and the provisioning callback endpoint trusts a client-supplied X-Forwarded-For header to determine the calling host when the controller is deployed behind the AAP gateway with an empty proxy allow-list. By reading the secret and spoofing X-Forwarded-For to match any host in the job template's inventory, a minimally privileged or unauthenticated remote attacker can launch the job template against arbitrary managed hosts using the job template's credentials, resulting in privilege escalation and remote code execution on managed hosts.
Articles & Coverage 1
Executive ViewAI
Red Hat Ansible Automation Platform 2 contains a critical privilege escalation and remote code execution flaw that allows an authenticated attacker with read-only job template access to take control of managed hosts. This puts organizations at risk of widespread infrastructure compromise, data breaches, and operational downtime, making immediate mitigation a top priority for security leadership.
Populate the gateway proxy allow-list (non-empty) and restrict view_jobtemplate permissions to trusted users; disable provisioning callbacks if they are not operationally required.
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
Privilege escalation occurs when an attacker leverages flaws in access control mechanisms to gain permissions beyond what they were originally granted.
Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.
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-85555
GHSA-2mcj-95p4-49mv
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB