{"id":"CVE-2026-115522","kind":"vulnerability","aliases":["CVE-2026-115522"],"related":[],"title":"Google ADK: shared file artifact root lets apps read each other's artifacts","description":"Exposure of Resource to Wrong Sphere (CWE-668) in FileArtifactService in Google Agent Development Kit (ADK) for Python (google-adk) versions 1.19.0 before 1.39.1 and 2.0.0a1 before 2.7.0 allows a caller in one application to list, read, overwrite, or delete artifacts belonging to another application when both applications share a FileArtifactService root directory and use the same user_id (and session_id for session-scoped artifacts). FileArtifactService accepted app_name across its public API methods but omitted app_name when constructing on-disk paths (root/users/{user_id}/... instead of root/apps/{app_name}/users/{user_id}/...). Version 2.6.0 scoped writes by app_name but retained a legacy root/users/{user_id} fallback for reads and deletes; version 2.7.0 and the 1.x backport in version 1.39.1 removed the fallback and enforce full per-app path scoping.","summary":"Google's Agent Development Kit for Python stores file artifacts without the app name in the path, so two apps sharing one storage root and the same user_id can list, read, overwrite or delete each other's artifacts. An attacker who controls one such app gets access to the other app's stored files.","severity":"medium","cvss":5.3,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["ai-agents","ai-tooling","google-adk","python"],"not_affected_if":["non-shared-root","other-artifact-service","single-app-deployment"],"how_to_check":"- Run `pip show google-adk` and compare the version against the fixed releases.\n- Look for `FileArtifactService` in your code and check whether more than one application points at the same root directory.\n- On disk, check whether artifacts sit under `root/users/{user_id}/` rather than `root/apps/{app_name}/users/{user_id}/`.","fix":"- Upgrade google-adk 1.x to `1.39.1` or later.\n- Upgrade google-adk 2.x to `2.7.0` or later; 2.6.0 still reads the legacy `root/users/{user_id}` path.\n- Give each application its own FileArtifactService root directory until upgraded.","status":"open","published_at":"2026-10-28T05:16:59+00:00","first_seen_at":"2026-10-28T05:31:15+00:00","triaged_at":"2026-10-28T05:32:19+00:00","updated_at":"2026-10-28T05:32:19+00:00","category":"ai-tooling","confidence":0.8,"triage":{"at":"2026-10-28T05:32:19Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade google-adk 1.x to `1.39.1` or later.\n- Upgrade google-adk 2.x to `2.7.0` or later; 2.6.0 still reads the legacy `root/users/{user_id}` path.\n- Give each application its own FileArtifactService root directory until upgraded.","reach":"local","title":"Google ADK: shared file artifact root lets apps read each other's artifacts","impact":"medium","summary":"Google's Agent Development Kit for Python stores file artifacts without the app name in the path, so two apps sharing one storage root and the same user_id can list, read, overwrite or delete each other's artifacts. An attacker who controls one such app gets access to the other app's stored files.","category":"ai-tooling","nicknames":[],"who_cares":["python","google-adk","ai-agents"],"confidence":0.8,"needs_auth":"yes","worst_case":"Another application reads, overwrites or deletes artifacts stored for the same user","analyst_note":"","how_to_check":"- Run `pip show google-adk` and compare the version against the fixed releases.\n- Look for `FileArtifactService` in your code and check whether more than one application points at the same root directory.\n- On disk, check whether artifacts sit under `root/users/{user_id}/` rather than `root/apps/{app_name}/users/{user_id}/`.","needs_analyst":false,"not_affected_if":["single-app-deployment","other-artifact-service","non-shared-root"],"who_is_affected":"Teams running google-adk 1.19.0 through before 1.39.1, or 2.0.0a1 through before 2.7.0, that use FileArtifactService with a root directory shared by more than one application. Exposure also needs the applications to use the same user_id, and session_id for session-scoped artifacts. Single-app deployments and those using other artifact services can skip it.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"medium"},"cost_usd":0.00069,"input_tokens":3553,"output_tokens":670,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-115522':16A,19A '-2026':15A,18A '-668':92C '/users':181C '1':207C '1.19.0':107C '1.39.1':109C,212C '2.0.0':111C '2.6.0':185C '2.7.0':114C,204C 'a1':112C 'accept':155C 'access':77B 'across':158C 'adk':2A,28B,100C,105C 'agent':22B,32B,97C 'ai':21B,24B 'ai-ag':20B 'ai-tool':23B 'allow':115C 'anoth':130C 'api':161C 'app':8A,42B,49B,75B,81B,156C,165C,179C,189C,221C 'applic':120C,131C,134C 'artifact':5A,13A,39B,68B,127C,153C 'attack':70B 'backport':209C 'belong':128C 'caller':117C 'construct':168C 'control':72B 'cve':14A,17A 'cwe':91C 'delet':64B,126C,202C 'develop':33B,98C 'directori':139C 'disk':171C 'enforc':217C 'exposur':85C 'fallback':198C,215C 'file':4A,38B,84B 'fileartifactservic':94C,137C,154C 'full':218C 'get':76B 'googl':1A,27B,30B,96C,104C 'google-adk':26B,103C 'id':58B,145C,148C,175C,183C,197C 'instead':176C 'kit':34B,99C 'legaci':194C 'let':7A 'list':60B,122C 'method':162C 'name':43B,157C,166C,180C,190C 'omit':164C 'on-disk':169C 'one':51B,73B,119C 'overwrit':62B,124C 'path':46B,172C,222C 'per':220C 'per-app':219C 'public':160C 'python':29B,36B,102C 'read':9A,61B,123C,200C 'remov':213C 'resourc':87C 'retain':192C 'root':6A,53B,138C 'root/apps':178C 'root/users':173C,195C 'scope':152C,186C,223C 'session':147C,151C 'session-scop':150C 'share':3A,50B,135C 'sphere':90C 'storag':52B 'store':37B,83B 'tool':25B 'two':48B 'use':141C 'user':57B,144C,174C,182C,196C 'version':106C,184C,203C,211C 'without':40B 'write':187C 'wrong':89C 'x':208C","nicknames":[],"mitigations":[],"who_affected":"Teams running google-adk 1.19.0 through before 1.39.1, or 2.0.0a1 through before 2.7.0, that use FileArtifactService with a root directory shared by more than one application. Exposure also needs the applications to use the same user_id, and session_id for session-scoped artifacts. Single-app deployments and those using other artifact services can skip it.","tier":"B","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-28T05:16:59+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","cvss_by":"cve-coordination@google.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-115522","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-115522","severity":null,"published_at":"2026-10-28T05:16:59+00:00","modified_at":"2026-10-28T05:16:59+00:00","first_seen_at":"2026-10-28T05:31:15+00:00","fetched_at":"2026-10-28T05:31:15+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}