November 3, 2026
[$10,000] Google Jules — The Silent Code Heist - Stealing Github Codes Remotely
Hi everyone!

By Avinash Kumar
2 min read
Today, I want to walk you through a impactful security issue I found recently on Google Jules (jules.google.com) that earned $10,000 bounty on the Google VRP. It's a classic reminder of why security teams should never skip anti-CSRF tokens—especially when dealing with OAuth integrations that control code repositories.
Let's break down how it all worked, step by step, using simple terms.
What is Google Jules?
If you haven't seen it yet, jules.google.com is a platform where developers can write, manage, and push code directly to their repositories. To make this smooth, the platform allows users to link their GitHub accounts so code syncing happens seamlessly.
And that's where the adventure began.
The Discovery: Missing CSRF Protection
While checking out how the GitHub linking process worked, I clicked the "Connect GitHub" button while keeping the Burp Suite running in the background.
When you connect a third-party service via OAuth, the app is supposed to issue a unique, unpredictable CSRF token (like a state parameter bound to your session). This ensures that an attacker can't trick your browser into linking their account instead of yours.
However, when I intercepted the request that tied GitHub to the Jules account, I noticed something interesting:
GET /auth/github?code=6e75932d1de9e0a049&state=currentJulesAuthUser%3D0 HTTP/2
Host: jules.google.comGET /auth/github?code=6e75932d1de9e0a049&state=currentJulesAuthUser%3D0 HTTP/2
Host: jules.google.comNotice that state parameter? It was entirely static (currentJulesAuthUser%3D0) and completely ignored by the server backend! There was no CSRF token validating that the user initiating the link was the one actually authorizing it.
The application was blindly accepting any valid GitHub OAuth code parameter passed via a simple GET request.
The Attack Scenario (Step-by-Step)
Because the request lacked CSRF protection, an attacker could manipulate this flow to quietly link their GitHub account to an unsuspecting victim's Google Jules account.
Here is how the attack chain played out:
1.Capture the Code: The attacker open https://jules.google.com and clicks "Connect GitHub" on his browser, authorizes the app.
-
Intercepts his own generated GitHub OAuth
code. -
Build the Trap: Attacker take that OAuth code and construct a malicious link containing it:
https://jules.google.com/auth/github?code=ATTACKER_OAUTH_CODE&state=currentJulesAuthUser%3D0 -
Send to the Victim: The attacker tricks the victim into opening this link.
-
Silent Linkage: Victim opened that url, And nothing happened It only says to "Sign in to GitHub", victim closed that tab. But here the attacker's GitHub account is now silently linked to the victim's Google Jules profile.
-
Code Heist: Now If the victim later uses Jules to write, edit, or push code, those private source files get pushed straight to the attacker's connected GitHub repository, leaking valuable source code and proprietary commands.
Reply from Google security Team:
Thanks!