AAP 2.7 Patch Release June 17, 2026: Metrics Backup, 18 CVE Fixes, FIPS Receptor, and Bug Fixes
By Luca Berton · Published 2026-06-30 · Category: installation
AAP 2.7 patch release June 17 2026: Metrics Service backup/restore, 18 CVE fixes (PyJWT, urllib3, SQL injection), FIPS Receptor, case-insensitive auth maps always on.
Red Hat released the Ansible Automation Platform 2.7 patch on June 17, 2026 (version 2.7.20260617), delivering backup and restore support for the Metrics Service, 18 CVE remediations across components, FIPS-compliant Receptor builds, case-insensitive authentication map matching as a permanent feature, and a broad set of bug fixes across the controller, gateway, Hub, and EDA.
Component Versions
| Component | Version |
|---|---|
| Automation controller | 4.8.1 |
| Automation Hub | 4.12.2 |
| Event-Driven Ansible | 1.3.2 |
| Container-based installer (bundle) | 2.7-2 |
| Container-based installer (online) | 2.7-2 |
| Receptor | 1.6.5 |
| Operator (namespace scoped) | aap-operator.v2.7.0-0.1781122804 |
| Operator (cluster scoped) | aap-operator.v2.7.0-0.1781122780 |
Highlights
Metrics Service Backup and Restore
The June 17 patch delivers full backup and restore support for the Metrics Service and its operator. This closes a gap that affected disaster recovery scenarios: previously, a Metrics Service reinstall lost historical automation metrics data. With this patch, the Metrics Operator can back up and restore the Metrics Service database as part of your standard AAP backup/restore workflow.
This means the Metrics Service is now a first-class component in your DR runbooks — treat it the same as the controller database when planning backup schedules and recovery procedures.
18 CVE Remediations
This patch addresses 18 CVEs across automation hub, execution environments, Ansible Lightspeed, and Event-Driven Ansible. Four distinct vulnerability classes are patched:
- CVE-2026-48526 — PyJWT authentication bypass via forged JSON Web Tokens
- CVE-2026-44432 — urllib3 denial of service via excessive HTTP response decompression
- CVE-2026-44431 — urllib3 information disclosure via cross-origin redirect header forwarding
- CVE-2026-39892 — Cryptography library buffer overflow via non-contiguous buffer
- EDA SQL injection — PGNotify SQL injection via dollar-quote escape in eda-controller
Case-Insensitive Authentication Map Matching Now Always On
The FEATURE_CASE_INSENSITIVE_AUTH_MAPS_ENABLED feature flag is removed. Case-insensitive matching for authenticator maps is now permanently enabled with no way to revert to case-sensitive behavior. If your LDAP groups or SAML attribute values differ only in case, they now match correctly without any configuration change — but review your authenticator maps to ensure no unintended case-insensitive matches create unexpected access.
FIPS-Compliant Receptor
Receptor 1.6.5 is now built FIPS-compliant. Teams running AAP in FIPS-enforced environments (RHEL with fips=1 kernel parameter) no longer need a workaround for Receptor's crypto operations. This is a prerequisite for AAP on FIPS-mode RHEL in regulated industries (FedRAMP, DoD, financial services).
See also: Ansible Automation Platform AI Skills for Platform Operations: Health, Security, and Intelligence
CVE Fixes
Automation Hub
CVE-2026-48526 — PyJWT: Authentication bypass via forged JSON Web Tokens An attacker could forge JWT tokens to bypass authentication. This is a critical security fix. Upgrade Hub to 4.12.2 immediately in internet-facing deployments.
CVE-2026-44432 — urllib3: Denial of service via excessive HTTP response decompression
A malicious HTTP response with a crafted Content-Encoding header could cause urllib3 to decompress data excessively, exhausting memory and causing the process to crash.
CVE-2026-44431 — urllib3: Information disclosure via cross-origin redirect header forwarding
urllib3 forwarded sensitive headers (including Authorization) across cross-origin redirects, potentially leaking credentials to third-party endpoints.
CVE-2026-39892 — Cryptography: Buffer overflow via non-contiguous buffer The cryptography library had a buffer overflow vulnerability triggered by non-contiguous buffer objects in certain API calls.
Execution Environments
CVE-2026-48526 — PyJWT: Authentication bypass via forged JSON Web Tokens
Affects ee-supported-rhel9 for AAP 2.7. Rebuild any custom EEs based on ee-supported to pick up the fixed PyJWT version.
Ansible Lightspeed
CVE-2026-48526 — PyJWT: Authentication bypass via forged JSON Web Tokens
Affects lightspeed-rhel9, mcp-tools-rhel9, and lightspeed-chatbot-rhel9. All three images are patched in this release.
Event-Driven Ansible
CVE-2026-44432 — urllib3: Denial of service
Affects eda-controller-rhel9 and de-minimal-rhel9.
SQL Injection — EDA PGNotify SQL Injection via Dollar-Quote Escape
A SQL injection vulnerability in the EDA controller's PGNotify implementation allowed injection via dollar-quote escape sequences. This was patched in eda-controller-rhel9 (EDA 1.3.2).
> If you use Event-Driven Ansible with PostgreSQL LISTEN/NOTIFY sources, treat this patch as urgent — ensure EDA is updated to 1.3.2.
Enhancements
Gateway: Case-Insensitive Auth Maps Always Enabled
As noted above, the FEATURE_CASE_INSENSITIVE_AUTH_MAPS_ENABLED flag is removed. No action required for teams that already had it enabled. Teams that had it disabled should audit authenticator maps for any case-sensitive distinctions that were load-bearing.
Controller: Collection and Ansible Version Tracking for All Jobs
Installed collections and the Ansible version are now recorded for every job run, regardless of whether the FEATURE_INDIRECT_NODE_COUNTING_ENABLED feature flag is active. Previously, this metadata was only collected with that flag enabled. This improves auditability and troubleshooting — you can now always see which collection versions ran for any job in your history.
Hub: Moved Health and Metrics Endpoints
Hub healthcheck and Prometheus metrics endpoints moved to avoid root-level path conflicts:
| Before | After |
|---|---|
/healthz | /api/galaxy/status/healthz |
/metrics (Prometheus) | /api/galaxy/status/metrics |
# Prometheus scrape config — updated for Hub 4.12.2
scrape_configs:
- job_name: "aap-hub"
static_configs:
- targets: ["aap.corp.example.com:443"]
metrics_path: "/api/galaxy/status/metrics"
scheme: https
tls_config:
ca_file: /etc/prometheus/ca.crtMetrics Service: Logarithmic Backoff for Task Retries
The Metrics Service now uses logarithmic backoff when retrying failed tasks, reducing retry storms during database connectivity issues or temporary outages.
Platform Operator: Proxy Variables for Hub and Lightspeed
The platform operator now supports proxy environment variables (HTTP_PROXY, HTTPS_PROXY, NO_PROXY) for Hub and Lightspeed operator deployments. Previously, proxy settings were only supported for the controller and gateway operators. Teams in environments with mandatory HTTP proxies can now configure proxy passthrough for all AAP components via the operator.
Receptor: FIPS-Compliant Build
Receptor 1.6.5 is compiled against FIPS-validated cryptographic modules. No configuration change is required — the FIPS-compliant build is the default binary for all deployments.
See also: AAP 2.7: Removing Direct API Access — Migration Guide and aap-detect-direct-component-access Tool
Bug Fixes
Authenticator Map "Allow" Override Fix
Fixed a regression where an authenticator map of type allow could not restore access once a deny-all rule had set the result to False. This affected multi-rule authenticator map chains where an allow rule followed a deny rule for the same user.
AAP UI Fixes
- Platform roles with "System" resource type — fixed a save failure when editing permissions on roles that used the
Systemcontent type. - Health checks on managed instances — fixed an issue where users with the correct permissions could not run health checks on managed instances.
- Credential plugin test modal — fixed a missing job template dropdown in the credential plugin test modal for plugins that require a job template selection.
- Workflow template job template updates — fixed an intermittent issue where saving a job template update within a workflow template was not persisted.
- Automation Hub collection documentation tab — fixed a crash on the collection documentation tab when the API response included large unnecessary fields, causing the page to fail to render.
Automation Controller Fixes
Execution Nodes in Control Plane — fixed incorrect inclusion of execution nodes in the control plane node list, which could cause mis-routing of jobs.
Jobs stuck in Waiting state — fixed a deadlock where jobs assigned to a controller node that was subsequently deprovisioned would remain in Waiting indefinitely instead of being rescheduled.
Azure Key Vault credential plugin TypeError — the Azure Key Vault plugin failed with TypeError because the cloud_name field was dropped when explicit typed parameters replaced kwargs. Fixed in 4.8.1.
Schedule rrule interval=0 dispatcher hang — fixed a hang in the task dispatcher when a schedule's RRULE had INTERVAL=0.
Workload identity token injection for inventory cloud credentials — populate_workload_identity_tokens() was not accepting additional credential lists, causing workload identity injection to fail for inventory update cloud credentials.
Workflow node update failure on labeled job templates — fixed a serializer that re-validated all persisted prompt state on every update instead of limiting validation to the fields in the request. This caused workflow node updates to fail when job templates had labels without "Prompt on Launch" enabled.
Gateway session cookie for as_user() — the as_user() mechanism failed to switch authenticated users when requests came through the AAP gateway because the gateway_sessionid cookie was not checked as a fallback.
Thycotic/Delinea credential plugin HTTP 500 — the Delinea Secret Server credential plugin returned HTTP 500 when resolving credentials from Delinea Platform URLs.
Fact cache query performance — expensive fact cache queries degraded performance at scale. The queries are now optimized with appropriate index hints.
Analytics API proxy respect — analytics API requests now honor HTTP_PROXY/HTTPS_PROXY environment variables, fixing DNS resolution failures in proxy-enforced environments.
GET /api/v2/hosts/ performance at scale — fixed slow response times on the hosts endpoint caused by loading the full ansible_facts JSON column and an unnecessary JOIN in RBAC permission evaluation queries.
Schedule RRULE BYHOUR parsing — fixed a parser that rejected valid RRULE expressions containing certain BYHOUR constraints.
Event-Driven Ansible Fixes
Fixed a general EDA functionality regression (AAP-77441).
Execution Environment Fixes
Updated the ansible.platform collection inside ee-supported to v2.7.20260604.
Automation Hub Fixes
DAB role sync managed flag — fixed incorrect locked (managed) values when syncing roles from DAB to Hub (pulp).
Hub pod memory leak under idle conditions — fixed progressive memory growth in pulpcore worker processes triggered by health probe requests under idle load. This was causing unnecessary HPA scaling events in OCP deployments.
Lightspeed Fixes
Fixed two instances where the containerized installer for Ansible Lightspeed chatbot did not display the image used for BYOK configuration.
Metrics Service Fixes
- Fixed a failure in the Gateway Operator to recreate the Metrics Service read user after a database rebuild.
- Fixed a failure in the Metrics Operator reinstall/restore process.
Platform Operator Fixes
Hub nginx/gunicorn timeout from gateway annotation — Hub nginx and gunicorn timeouts were not derived from the gateway client_request_timeout annotation, causing 502 errors on long-running operations (large collection uploads, Collections as Code workflows). Now the timeouts propagate correctly.
Gateway OAuth2 token stale after HA/DR failback — fixed a case where the gateway operator failed to reconcile after HA/DR failback due to a stale OAuth2 token that was neither validated nor regenerated on reconnect.
Lightspeed status URL not reported for ingress/none — fixed the Lightspeed status URL not being surfaced when using ingress or none as the ingress type, which caused the gateway operator to wait indefinitely for Lightspeed readiness during installation or upgrade.
Dev Tools: tzdata missing from devspaces container — fixed a missing tzdata package in the dev tools devspaces container that caused ansible-navigator to crash on startup with ZoneInfoNotFoundError.
Applying the Patch
Containerized Deployments
# Download the 2.7-2 bundle installer
curl -O https://registry.redhat.io/ansible-automation-platform/aap-setup-bundle-rhel9:2.7-2
# Apply the patch against your existing inventory
./setup.sh --upgrade --inventory /etc/ansible-automation-platform/inventoryOpenShift Operator Deployments
The operator upgrade is handled by the OLM subscription. If you are on the stable-2.7 channel, the patch is delivered automatically. To trigger it manually:
# Check current CSV version
oc get csv -n ansible-automation-platform | grep aap-operator
# Approve the InstallPlan if set to Manual approval
oc get installplan -n ansible-automation-platform
oc patch installplan <install-plan-name> \
-n ansible-automation-platform \
--type merge \
-p '{"spec":{"approved":true}}'Post-Patch Validation
# Verify component versions
curl -sk https://aap.corp.example.com/api/controller/v2/ping/ | python3 -m json.tool
# Confirm Hub metrics endpoint is on new path
curl -sk https://aap.corp.example.com/api/galaxy/status/healthz | python3 -m json.tool
# Verify Receptor FIPS build
receptor --version | grep fipsSee also: AAP 2.7 Workload Identity: Configure OIDC Credential Types for HashiCorp Vault (Step-by-Step)
Action Items by Role
Security teams:
Operations teams:
Development teams:**
/api/galaxy/status/healthz, /api/galaxy/status/metrics)
- Rebuild custom EEs based on
ee-supportedto pick up the PyJWT fix awxkitpackaging fix (packagingmodule) resolves import errors on Python 3.12 — update if hittingModuleNotFoundError
Related Articles
Category: installation