REDHAT-BUG-2511901: High severity Ansible AWX vulnerability

Published Aug 6, 2026
·
Updated

For GitHub pullrequest webhooks, geteventstatusapi() in awx/api/views/webhooks.py returns pullrequest.statusesurl from the request body verbatim without any host validation:

def geteventstatusapi(self): if self.geteventtype() != 'pullrequest': return return self.request.data.get('pullrequest', {}).get('statusesurl')

The value is persisted into job extravars and later used by updatewebhookstatus() in awx/main/models/mixins.py:

statusapi = self.extravarsdict.get('awxwebhookstatusapi') headers = {k: v.format(self.webhookcredential.getinput('token')), 'Content-Type': 'application/json'} response = requests.post(statusapi, data=json.dumps(data), headers=headers, timeout=30)

There is no host allowlist for the expected Git provider endpoint and no private-network egress filtering before the request is sent. The webhook receiver relies on an HMAC secret (webhookkey), which is readable by users with the admin role on the job template via /api/v2/jobtemplates/{id}/webhookkey/. This allows a template admin to forge a signed webhook payload with statusesurl pointing to an attacker-controlled endpoint, and AWX will POST status updates including the Git PAT in the Authorization header to that endpoint.

Affected Software

1 affected component
Ansible AWX

Event History

Aug 6, 2026
Data Sourced
via Red Hat·04:59 AM
DescriptionSeverityAffected Software

Frequently Asked Questions

1

Who can exploit this issue?

A user with the admin role on an affected job template can read that template's webhook HMAC secret and use it to forge a signed GitHub pull_request webhook payload. The attacker can set the pull request statuses_url to an endpoint they control.

2

What information can be exposed to an attacker-controlled endpoint?

AWX later sends a status update to the supplied URL and includes the Git personal access token from the webhook credential in the request headers. The missing host validation and private-network egress filtering also permit the request target to be outside the expected Git provider endpoint.

3

How can I determine whether a job template is exposed?

Review job templates that use GitHub pull_request webhooks and identify users with the template admin role, because those users can retrieve the webhook key through the job template webhook_key API endpoint. Also review whether the associated webhook credential contains a Git personal access token.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203