One-Click Google SSO Takeover via Device-Code Bug

InfoSec Write-ups · High sophistication
Last updated July 30, 2026

A researcher found two bugs in Google’s “device code” sign-in flow that could let an attacker get a valid Google sign-in token for a victim by getting them to open a single crafted link. In the most dangerous version, the victim sees no consent screen and no extra 2FA prompt, yet the attacker can log into third-party sites that use “Sign in with Google.” Google fixed the issue after an initial “won’t fix” response and later paid a bug bounty.

How the attack worked

A researcher identified two related flaws in Google's device code sign-in flow, the mechanism used when signing into devices like smart TVs or consoles by entering a code shown on screen. The first flaw allowed a device code session to be transferred by copying a Google challenge URL, containing a TL parameter, into a second browser. Logging in on that second browser could complete the sign-in for the original device. The second flaw was more serious: Google did not verify server-side that the client_id and scope in the authorization URL matched what the device_code was originally issued for. This meant an attacker could swap in a different application's client_id and request different scopes after the flow had already started.

Why it succeeded

Combining the two flaws with prompt=none and common scopes such as openid email profile created a flow that required only one click. The victim opened a single crafted link and the sign-in completed silently, with no consent screen and no button to press. Because the resulting token could be replayed against any third-party app using Sign in with Google, the researcher noted that account takeover was possible on virtually any application relying on that login method. In a variant aimed at higher-value targets, the attacker swapped the client_id for Google's own Cloud SDK client and changed the scope to cloud-platform, compute, and appengine.admin, producing a consent screen with elevated permissions instead of a silent flow.

What to watch for

  • An unexpected Google Accounts or sign-in link that you did not initiate yourself
  • A sign-in flow that completes with no consent screen, even though it relates to account access
  • A consent screen naming an application that does not match the context, such as Google Cloud SDK appearing during what should be a TV or console sign-in
  • Scopes that look unusually powerful, like cloud-platform or appengine.admin, requested for an everyday login

How to build resistance

Because the login itself is genuinely rendered by Google, awareness training should stress that a normal-looking sign-in step does not guarantee a safe outcome. Employees should be encouraged to pause on unexpected sign-in links, even ones on legitimate Google domains, and to actually read the application name and requested permissions on any consent screen before proceeding. Periodic review of the connected apps list on Google accounts can also help, since traces of this kind of abuse may appear as an unusual scope tied to an unexpected app entry rather than as an obvious error.

Key findings

  • A device-code sign-in session could be “transferred” by copying a Google challenge URL (with a TL parameter) into another browser, letting the second browser’s login complete the first device’s sign-in.
  • Google did not bind the device_code to the original client_id and scope server-side, allowing an attacker to swap these values in the URL after the device flow started.
  • By adding prompt=none and using common scopes (openid email profile), a victim only had to open a single link; the flow could complete silently with “no consent screen, no button to press.”
  • The resulting token could be replayed against a third-party app’s own “Sign in with Google” endpoint, enabling account takeover on many sites.
  • Victim visibility was limited: the connections page could show the original device client rather than the substituted one, and the login step could look like a normal Google sign-in.

Who’s being targeted

  • Commonly targeted roles: All employees, IT, Engineering, Cloud administrators, Security awareness training participants.
  • Affected industries: Technology (identity providers / SSO), Any organization using third-party apps with “Sign in with Google”.
  • Attack channels: website.
  • Impersonated: A legitimate site using “Sign in with Google” (third-party client), Google sign-in / device authorization flow, Google OAuth consent for a different application (e.g., Google Cloud SDK).

Red flags to watch for

  • Unexpected Google Accounts link that you didn’t initiate
  • No consent screen appears even though the link relates to account access
  • URL parameters (client_id/scope/prompt=none) in a sign-in link
  • Being asked to sign in via a forwarded ‘challenge’ URL you didn’t generate
  • Login is tied to setting up a TV/console/CLI you are not actively using
  • Unusual accounts.google.com/v3/signin/challenge/ link with a TL parameter
  • Consent screen shows an unexpected application name (e.g., Google Cloud SDK)
  • Requested permissions don’t match the context (e.g., cloud admin scopes during a TV app sign-in)
  • Scopes look unusually powerful (cloud-platform/compute/appengine.admin)
Try Mirage

Mirage safely runs attacks like this one against your own team, so you find out what happens before a real adversary does.

Get a demo

Frequently asked questions

What was the Google device code flow vulnerability?

Google did not bind the device_code to the original client_id and scope on the server side, so an attacker could swap those values in the authorization URL after the flow started, redirecting a victim's sign-in to a different application.

Did the victim have to approve anything for the attack to work?

In the most dangerous version, no. By adding prompt=none and using common scopes like openid email profile, the flow completed silently after the victim opened a single link, with no consent screen and no button to press.

How could a victim detect this attack after the fact?

The Google connections page could show the original device client, such as YouTube TV, rather than the substituted application, so a victim would need to notice an unusual scope request tied to an unexpected app name to catch it.

Was this issue fixed?

Yes. Google initially responded with a won't fix decision but later fixed the issue and paid a bug bounty for the report.

Read the video transcript

One link. You open it, and without a consent screen or 2FA prompt, someone else can log in as you with “Sign in with Google.” Researchers found a bug in Google’s device-code sign-in. They could start a login on one device, copy a challenge link with a TL parameter into another browser, and your normal Google sign-in silently completed their session. With prompt=none and common scopes like openid, email, profile, any crafted Google Accounts link you open could silently hand over a valid token for a third-party site’s 'Sign in with Google', no consent screen, no button to press. If you ever get a Google sign-in or accounts.google.com link you didn’t start yourself, don’t open it, go to google.com or the app directly and sign in from there instead.

Similar attacks

LogoKit Builds Real-Time Fake Login Pages

LogoKit Builds Real-Time Fake Login Pages

Researchers observed LogoKit phishing campaigns that create a unique fake login page for each recipient in real time. The kit pulls a live screenshot of the…

July 29, 2026