CVE-2026-66901

Source
https://cve.org/CVERecord?id=CVE-2026-66901
Import Source
https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-66901.json
JSON Data
https://api.osv.dev/v1/vulns/CVE-2026-66901
Published
2026-08-04T20:49:27.643Z
Modified
2026-08-07T03:30:16.900967294Z
Severity
  • 7.5 (High) CVSS_V3 - CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N CVSS Calculator
Summary
Google::Auth versions before 0.09 for Perl allow server side request forgery and credential exfiltration via unvalidated URLs taken from the credentials JSON
Details

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 token_uri 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 service_account 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.

Database specific
{
    "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/66xxx/CVE-2026-66901.json",
    "cna_assigner": "CPANSec",
    "unresolved_ranges": [
        {
            "extracted_events": [
                {
                    "fixed": "0.09"
                }
            ],
            "source": "AFFECTED_FIELD"
        },
        {
            "extracted_events": [
                {
                    "fixed": "0.09"
                }
            ],
            "source": "DESCRIPTION"
        }
    ],
    "cwe_ids": [
        "CWE-201",
        "CWE-918"
    ]
}
References

Affected packages

Git / github.com/googlecloudplatform/google-auth-library-perl

Affected ranges

Type
GIT
Repo
https://github.com/googlecloudplatform/google-auth-library-perl
Events
Database specific
{
    "source": "REFERENCES"
}

Database specific

source
"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-66901.json"