{ "dataType": "CVE_RECORD", "dataVersion": "5.2", "cveMetadata": { "cveId": "CVE-2026-66902", "assignerOrgId": "9b29abf9-4ab0-4765-b253-1875cd9b441e", "state": "PUBLISHED", "assignerShortName": "CPANSec", "dateReserved": "2026-07-28T08:28:27.249Z", "datePublished": "2026-08-04T20:49:43.171Z", "dateUpdated": "2026-08-04T22:24:41.647Z" }, "containers": { "cna": { "affected": [ { "collectionURL": "https://cpan.org/modules", "defaultStatus": "unaffected", "packageName": "Google-Auth", "product": "Google::Auth", "programFiles": [ "lib/Google/Auth/ExternalAccountCredentials/Pluggable.pm" ], "programRoutines": [ { "name": "Google::Auth::ExternalAccountCredentials::Pluggable::retrieve_subject_token" } ], "repo": "https://github.com/GoogleCloudPlatform/google-auth-library-perl", "vendor": "CJCOLLIER", "versions": [ { "lessThan": "0.06", "status": "affected", "version": "0", "versionType": "custom" } ] } ], "descriptions": [ { "lang": "en", "value": "Google::Auth versions before 0.06 for Perl run a command named in an external_account credentials JSON via an ungated system call.\n\nThe Pluggable subclass reads credential_source.executable.command from the credentials JSON and runs it as `system($command)`, a single argument call that passes the whole string to /bin/sh -c. The executable's environment_variables map from the same JSON is copied into %ENV first. No opt-in gate guards the call. make_creds selects the Pluggable subclass whenever credential_source.executable is present, so the path is reached from the standard Application Default Credentials flow, including a \"type\": \"external_account\" configuration read from the file named by GOOGLE_APPLICATION_CREDENTIALS. Configurations without credential_source.executable do not select this subclass and do not reach the call.\n\nAny caller that builds credentials from a configuration it does not fully control runs the embedded command with the privileges of the application process." } ], "problemTypes": [ { "descriptions": [ { "cweId": "CWE-78", "description": "CWE-78 Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection')", "lang": "en", "type": "CWE" } ] }, { "descriptions": [ { "cweId": "CWE-829", "description": "CWE-829 Inclusion of Functionality from Untrusted Control Sphere", "lang": "en", "type": "CWE" } ] } ], "providerMetadata": { "orgId": "9b29abf9-4ab0-4765-b253-1875cd9b441e", "shortName": "CPANSec", "dateUpdated": "2026-08-04T20:49:43.171Z" }, "references": [ { "tags": [ "patch" ], "url": "https://github.com/GoogleCloudPlatform/google-auth-library-perl/commit/c95c77e70bec94f17e239d88050f843ea1cade95.patch" }, { "url": "https://metacpan.org/release/CJCOLLIER/Google-Auth-0.06/diff/CJCOLLIER/Google-Auth-0.05" } ], "solutions": [ { "lang": "en", "value": "Upgrade to Google-Auth 0.06 or later, which throws unless the environment variable GOOGLE_EXTERNAL_ACCOUNT_ALLOW_EXECUTABLES is set to 1." } ], "source": { "discovery": "UNKNOWN" }, "timeline": [ { "lang": "en", "time": "2026-07-28T00:00:00.000Z", "value": "Version 0.06 released with fix, which is not noted in the changelog." } ], "title": "Google::Auth versions before 0.06 for Perl run a command named in an external_account credentials JSON via an ungated system call", "workarounds": [ { "lang": "en", "value": "For deployments that cannot upgrade to 0.06, apply the upstream fix commit, or ensure that every credentials configuration reaching the Application Default Credentials flow comes from a trusted source." } ], "x_generator": { "engine": "cpansec-cna-tool 0.1" } }, "adp": [ { "title": "CVE Program Container", "references": [ { "url": "http://www.openwall.com/lists/oss-security/2026/08/04/35" } ], "providerMetadata": { "orgId": "af854a3a-2127-422b-91ae-364da2661108", "shortName": "CVE", "dateUpdated": "2026-08-04T22:24:41.647Z" } } ] } }