---
id: "CVE-2026-74760"
kind: "vulnerability"
aliases: ["CVE-2026-74760"]
title: "Google::Auth for Perl: login callback accepts any local authorization code"
severity: "medium"
cvss: null
epss: null
exploited: false
status: "open"
category: "package"
products: []
ecosystems: []
tags: ["developer-workstations", "gcloud", "google-cloud", "package", "perl"]
not_affected_if: ["no-gcloud-login", "not-perl", "single-user-machine"]
published_at: "2026-11-01T17:16:34+00:00"
first_seen_at: "2026-11-01T17:21:03+00:00"
updated_at: "2026-11-01T17:22:58+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-74760", "first_seen_at": "2026-11-01T17:21:03+00:00"}]
---

# Google::Auth for Perl: login callback accepts any local authorization code

Google::Auth versions 0.11 through 0.12 for Perl do not check the OAuth state value on the gcloud login callback. A local process can submit its own Google authorization code, so the stored credentials end up belonging to the attacker's account.

_Summary, check and fix written by a model from the sources; labelled as such._

## How to check

- Check the installed Google::Auth version with `perl -MGoogle::Auth -e 'print $Google::Auth::VERSION'`
- Look for gcloud-auth or application-default login flows run on shared or multi-user machines
- Search lockfiles and cpanfiles for `Google::Auth` pinned to 0.11 or 0.12

## Fix

- Google::Auth versions 0.11 through 0.12 are affected; the sources do not name a fixed version

## Timeline

- 2026-11-01T17:21:03+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-74760

## From the sources

Google::Auth versions from 0.11 through 0.12 for Perl accept an authorization code from any local process because the gcloud-auth login callback does not check the OAuth state.

The gcloud-auth login and application-default login commands send a state parameter with the authorization request, then take the code from the first request to reach their loopback listener without comparing the returned state.

A local attacker can submit an authorization code for their own Google account. The CLI exchanges it and stores the refresh token as the user's credentials, so the user's tools then act as the attacker's account.

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
