CVE-2026-66901: Google::Auth versions before 0.09 for Perl allow server side request forgery and credential exfiltration via unvalidated URLs taken from the credentials JSON
Google::Auth versions before 0.09 for Perl allow server side request forgery and credential exfiltration via unvalidated URLs taken from the credentials JSON.
The URLs the library requests are read from the credentials JSON, and their hosts were not checked against the universe domain before the request. For an externalaccount configuration, retrievesubjecttoken fetched credentialsource.url with headers from the same JSON, and fetchaccesstoken posted the subject token to tokenurl, then sent the STS access token it received to serviceaccountimpersonationurl in an Authorization: Bearer header. The authorizeduser, impersonatedserviceaccount and serviceaccount configurations posted the client secret and refresh token, the source access token, and a signed JWT assertion to their own JSON-supplied tokenuri or impersonation URL.
Any caller that builds credentials from a configuration it does not fully control issues those requests from the application's network position, reaching hosts the configuration names, including internal services and link-local metadata endpoints, and hands them the credentials each request carries. The serviceaccount assertion is bound to aud, so it is not replayable against Google.
Version 0.06 added a validateurl host check to the externalaccount class, keyed on a universedomain read from the same credentials JSON. Version 0.07 gated a JSON-supplied universe domain behind GOOGLEEXTERNALACCOUNTALLOWCUSTOMUNIVERSES=1, deriving the pin flag from arguments that an earlier BUILDARGS pass had already merged on the makecreds path. Version 0.08 passed the pin decision through as an explicit constructor argument and moved validateurl to Google::Auth::Credentials, adding the call to UserRefreshCredentials and ImpersonatedServiceAccountCredentials, and 0.09 added it to ServiceAccountCredentials.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
Google::Auth (Perl)to a version that resolves this vulnerability.Fixed in 0.09 - Configuration
If you must allow universe domains other than googleapis.com, set GOOGLE_EXTERNAL_ACCOUNT_ALLOW_CUSTOM_UNIVERSES=1 (the pin decision is used by the _validate_url host check starting in v0.07).
Google::Auth (Perl) GOOGLE_EXTERNAL_ACCOUNT_ALLOW_CUSTOM_UNIVERSES = 1 - Compensating control
Ensure application-provided universe domain is pinned/validated so that credential_source.url and other JSON-supplied URLs are checked against googleapis.com or a universe domain pinned by the application before any requests are made (host must not be unchecked against the universe domain).