Описание
A flaw was found in the AWX GitHub webhook integration. When processing GitHub pull_request webhooks, the controller stores the pull_request.statuses_url 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 webhook_key can redirect the callback to an attacker-controlled URL and exfiltrate the configured GitHub PAT.
Отчет
Red Hat rates this issue as Moderate impact. This flaw affects AWX controller deployments that enable GitHub webhooks with status callback configured (webhook_service=github and a GitHub Personal Access Token configured as webhook_credential on the job template). The controller intentionally uses the configured GitHub PAT to post commit status updates back to GitHub; however, it fails to restrict the callback destination to trusted GitHub API endpoints. When a forged webhook with a valid HMAC signature supplies a malicious statuses_url, the PAT may be sent to an attacker-controlled URL on job completion. Exploitation requires knowledge of the per-job-template webhook_key used to validate incoming webhook requests. This secret is not controllable by arbitrary GitHub contributors through normal GitHub webhook delivery; it must be obtained through privileged access to the automation controller or compromise/disclosure of the configured shared secret. Additional preconditions include network reachability to the webhook endpoint and network reachability from the controller to the attacker-specified callback URL. AWX is typically deployed as internal infrastructure management tooling, which may limit practical exposure in many environments, but does not eliminate the issue where GitHub webhook integration with status callback is enabled.
Меры по смягчению последствий
The following practices may reduce exposure to this flaw until a fix is available:
- Restrict network access to controller webhook endpoints so only trusted GitHub egress IPs or an approved reverse proxy can reach them.
- Protect job template webhook keys as secrets; restrict Job Template admin access; rotate webhook keys if compromise is suspected.
- If commit status callback to GitHub is not required, configure GitHub webhooks without a webhook_credential on the job template (this disables PAT transmission on job completion).
- Monitor controller logs and outbound connections for unexpected callback destinations following webhook-triggered jobs.
Затронутые пакеты
| Платформа | Пакет | Состояние | Рекомендация | Релиз |
|---|---|---|---|---|
| Red Hat Ansible Automation Platform 2 | ansible-automation-platform-26/controller-rhel9 | Fix deferred | ||
| Red Hat Ansible Automation Platform 2 | ansible-automation-platform-27/controller-rhel9 | Fix deferred | ||
| Red Hat Ansible Automation Platform 2 | automation-controller | Fix deferred |
Показывать по
Дополнительная информация
Статус:
EPSS
6.3 Medium
CVSS3
Связанные уязвимости
A flaw was found in the AWX GitHub webhook integration. When processing GitHub pull_request webhooks, the controller stores the pull_request.statuses_url 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 webhook_key can redirect the callback to an attacker-controlled URL and exfiltrate the configured GitHub PAT.
A flaw was found in the AWX GitHub webhook integration. When processing GitHub pull_request webhooks, the controller stores the pull_request.statuses_url 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 webhook_key can redirect the callback to an attacker-controlled URL and exfiltrate the configured GitHub PAT.
EPSS
6.3 Medium
CVSS3