CVE-2026-12726: Awx: automation-controller: awx: github webhook second-order ssrf via unvalidated statuses_url exfiltrates pat credential

Published Jun 19, 2026
·
Updated

A flaw was found in the AWX GitHub webhook integration. When a GitHub pullrequest webhook is received, GithubWebhookReceiver.geteventstatusapi() in awx/api/views/webhooks.py returns pullrequest.statusesurl from the request body without validation. The value is stored in job extra variables as awxwebhookstatusapi and later used by WebhookMixin.updatewebhookstatus() in awx/main/models/mixins.py as the callback URL when posting job status updates. If a job template is configured with webhookservice=github and a GitHub Personal Access Token credential as webhookcredential, the controller sends that token in the Authorization header when POSTing to the stored callback URL on job completion. Although the controller is designed to post commit status updates back to GitHub, it does not restrict the callback URL to trusted GitHub API endpoints. An attacker who can submit a forged webhook request with a valid HMAC-SHA1 signature for the target job template's webhookkey can supply an attacker-controlled statusesurl and cause exfiltration of the configured GitHub PAT when the triggered job completes. Normal GitHub webhook deliveries do not allow arbitrary contributors to control statusesurl; exploitation requires knowledge of the per-template webhook shared secret or privileged access to retrieve it from the controller. Upstream: https://github.com/ansible/awx Affected files: - awx/api/views/webhooks.py (GithubWebhookReceiver.geteventstatusapi) - awx/main/models/mixins.py (WebhookMixin.updatewebhookstatus)

Other sources

A flaw was found in the AWX GitHub webhook integration. When processing GitHub pullrequest webhooks, the controller stores the pullrequest.statusesurl value from the webhook payload without validating that it points to a trusted GitHub API endpoint. If a job template is configured with a GitHub Personal Access Token as its webhook credential, the controller later POSTs that token to the stored callback URL when posting job status updates. An attacker who can submit a correctly signed forged webhook using the job template's webhookkey can redirect the callback to an attacker-controlled URL and exfiltrate the configured GitHub PAT.

MITRE

Affected Software

1 affected component
Ansible AWX

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Configuration

    Validate pull_request.statuses_url from the incoming webhook payload and reject or ignore values that are not trusted GitHub API endpoints before returning/storing the value (do not accept arbitrary callback URLs).

    awx/api/views/webhooks.py (GithubWebhookReceiver.get_event_status_api) statuses_url validation = restrict to trusted GitHub API endpoints
  2. Configuration

    Before POSTing job status updates and including the webhook_credential (GitHub PAT) in the Authorization header to the stored awx_webhook_status_api callback URL, verify the callback URL is a trusted GitHub API endpoint and refuse to POST to non-GitHub URLs.

    awx/main/models/mixins.py (WebhookMixin.update_webhook_status) awx_webhook_status_api usage = only POST to validated GitHub API endpoints
  3. Compensating control

    Audit job templates for webhook_service=github that have webhook_credential set to a GitHub Personal Access Token; remove or replace PATs used as webhook credentials where feasible and restrict who can view/configure per-template webhook_key and webhook credentials to trusted administrators.

  4. Operational

    Identify job templates that used a GitHub Personal Access Token as their webhook_credential and assume possible exposure: rotate those GitHub PATs and, where applicable, rotate the per-template webhook shared secret (webhook_key).

Event History

Jun 19, 2026
Data Sourced
via Red Hat·03:10 PM
DescriptionSeverityAffected Software
CVE Published
via MITRE·06:49 PM
Data Sourced
via MITRE·06:49 PM
DescriptionSeverityWeakness
Data Sourced
via NVD·07:16 PM
DescriptionSeverityWeakness
Free Weekly Intel

Don't miss critical vulnerabilities

Join thousands of security professionals who receive our weekly digest of trending CVEs, zero-days, and exploited vulnerabilities.

No spam. Unsubscribe anytime.

Frequently Asked Questions

1

What is the severity of CVE-2026-12726?

CVE-2026-12726 has a medium severity rating of 6.3.

2

How do I fix CVE-2026-12726?

To mitigate CVE-2026-12726, ensure that the statuses_url in GitHub webhook payloads is validated against trusted GitHub API endpoints.

3

What type of vulnerability is CVE-2026-12726?

CVE-2026-12726 is classified as a Server-Side Request Forgery (SSRF) vulnerability.

4

What impact does CVE-2026-12726 have on AWX automation-controller?

CVE-2026-12726 allows for the exfiltration of personal access token credentials via unvalidated GitHub webhook URLs.

5

When was CVE-2026-12726 published?

CVE-2026-12726 was published on June 19, 2026.

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