Bug 2527154 (CVE-2026-84692) - CVE-2026-84692 automation-controller: automation-controller-container: automation-controller: workflow job template node execute permission check bypassed by creating a node with a null unified_job_template and then patching it, allowing a single work ...
Summary: CVE-2026-84692 automation-controller: automation-controller-container: automa...
Keywords:
Status: NEW
Alias: CVE-2026-84692
Deadline: 2026-10-01
Product: Security Response
Classification: Other
Component: vulnerability
Version: unspecified
Hardware: All
OS: Linux
high
high
Target Milestone: ---
Assignee: Product Security
QA Contact:
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2026-09-01 23:25 UTC by Thomas Eagle
Modified: 2026-09-23 21:07 UTC (History)
8 users (show)

Fixed In Version:
Clone Of:
Environment:
Last Closed:
Embargoed:


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
Red Hat Product Errata RHSA-2026:71113 0 None None None 2026-09-23 20:51:18 UTC
Red Hat Product Errata RHSA-2026:71114 0 None None None 2026-09-23 21:07:55 UTC

Description Thomas Eagle 2026-09-01 23:25:54 UTC
A flaw was found in automation-controller (AWX). In
WorkflowJobTemplateNodeAccess (awx/main/access.py), can_change() delegates the
execute-permission check on a node's unified_job_template to ujt_execute(), which
returns True unconditionally when the node's current obj.unified_job_template is
None, without ever validating the incoming data['unified_job_template'] against
execute_role. can_add() does not mark unified_job_template as mandatory, so a node
can be created with unified_job_template=null (HTTP 201). PATCHing that empty node
to any UnifiedJobTemplate id then succeeds (HTTP 200) with no execute_role check
on the new value. The direct-create path (POST a node with unified_job_template
set) is correctly denied (403) via can_add -> check_related(role_field=
'execute_role'); the create-empty-then-PATCH sequence bypasses that guard.
Consequently a user with admin_role on any single WorkflowJobTemplate (an
organization admin, an Organization Workflow Admin, or an object-level WFJT
admin) can bind and execute any Job Template, Project update, Inventory Source
sync, System Job Template, or nested Workflow Job Template belonging to any other
organization/tenant -- even ones for which direct GET/launch returns 403 --
running the victim template with the victim's attached credentials, inventory and
project. The PATCH response summary_fields additionally leaks the victim
template's name and description. Discovered internally (pentest-aap); verified
live on AAP 2.7 / automation-controller 4.8.x (victim WFJT executed end-to-end,
launched_by attacker); still present on devel.
    Upstream: github.com/ansible/awx (awx/main/access.py:
              WorkflowJobTemplateNodeAccess.ujt_execute / can_add / can_change;
              check_related both-None handling).

Comment 2 Jon Orris 2026-09-23 20:51:16 UTC
This issue has been addressed in the following products:

  Red Hat Ansible Automation Platform 2.6 for RHEL 10
  Red Hat Ansible Automation Platform 2.6 for RHEL 9

Via RHSA-2026:71113 https://access.redhat.com/errata/RHSA-2026:71113

Comment 3 Jon Orris 2026-09-23 21:07:54 UTC
This issue has been addressed in the following products:

  Red Hat Ansible Automation Platform 2.5 for RHEL 9
  Red Hat Ansible Automation Platform 2.5 for RHEL 8

Via RHSA-2026:71114 https://access.redhat.com/errata/RHSA-2026:71114


Note You need to log in before you can comment on or make changes to this bug.