{"id":"CVE-2026-104873","summary":"LangGraph SDK custom auth silently ignores actions= on resource decorators","details":"LangGraph Python SDK is used to connect to running LangGraph API servers, manage assistants, threads and stream runs from Python applications. From 0.1.45 until 0.4.4, the langgraph-sdk resource-scoped authorization decorators @auth.on.threads, @auth.on.assistants, and @auth.on.crons ignore the actions argument and register the selected handler for every action on the resource. Because that wildcard resource handler is selected before broader fallback handlers, an authenticated user may bypass fallback action, ownership, or permission checks and read, update, or delete another user's resource. Only Python deployments using actions on the affected decorators are vulnerable, and a deployment remains protected when the selected handler independently enforces all required checks for every action it receives. This issue is fixed in version 0.4.4.","aliases":["GHSA-fvww-7h3r-vfhp"],"modified":"2026-10-06T02:31:06.950996153Z","published":"2026-10-02T20:06:07.090Z","database_specific":{"cna_assigner":"GitHub_M","cwe_ids":["CWE-863"],"osv_generated_from":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/104xxx/CVE-2026-104873.json"},"references":[{"type":"WEB","url":"https://github.com/langchain-ai/langgraph/releases/tag/sdk==0.4.4"},{"type":"ADVISORY","url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/104xxx/CVE-2026-104873.json"},{"type":"ADVISORY","url":"https://github.com/langchain-ai/langgraph/security/advisories/GHSA-fvww-7h3r-vfhp"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-104873"},{"type":"FIX","url":"https://github.com/langchain-ai/langgraph/commit/5a77be5e8bec1600ad0a865638d88c1368497559"}],"affected":[{"ranges":[{"type":"GIT","repo":"https://github.com/langchain-ai/langgraph","events":[{"introduced":"9291ae864623fef39ad584abe19a13f5b2dd6e60"},{"fixed":"5a77be5e8bec1600ad0a865638d88c1368497559"},{"fixed":"d5f4b2aa960940effc8430165ab3604038e817af"}],"database_specific":{"extracted_events":[{"introduced":"0.1.45"},{"fixed":"0.4.4"}],"source":["AFFECTED_FIELD","REFERENCES"]}}],"versions":["sdk==0.4.3","1.2.11","checkpointpostgres==3.1.2","checkpoint==4.2.0","checkpointsqlite==3.1.1","checkpointpostgres==3.1.1","1.2.10","cli==0.4.31","1.2.9","1.2.8","1.2.7","1.2.6","cli==0.4.30","1.2.5","cli==0.4.29","cli==0.4.28","1.2.4","1.2.3","sdk==0.4.2","sdk==0.4.1","sdk==0.4.0","cli==0.4.27","1.2.2","sdk==0.3.15","checkpoint==4.1.1","1.2.1","prebuilt==1.1.0a2","1.2.0a5","prebuilt==1.1.0","checkpointsqlite==3.1.0","checkpointpostgres==3.1.0","checkpoint==4.1.0","1.2.0","cli==0.4.26","cli==0.4.25","checkpointsqlite==3.1.0a1","sdk==0.3.14","checkpointpostgres==3.1.0a4","checkpoint==4.1.0a4","1.2.0a7","1.2.0a6","prebuilt==1.1.0a1","1.2.0a4","1.2.0a3","checkpointpostgres==3.1.0a3","checkpoint==4.1.0a3","checkpointpostgres==3.1.0a1","1.1.9","prebuilt==1.0.12","1.1.10","checkpoint==4.1.0a1","1.2.0a1","checkpoint==4.0.3","prebuilt==1.0.11","cli==0.4.24","1.1.8","prebuilt==1.0.10","cli==0.4.22","cli==0.4.23","1.1.7","checkpoint==4.0.2","1.1.7a2","1.1.7a1","cli==0.4.21","cli==0.4.20","sdk==0.3.13","1.1.6","prebuilt==1.0.9","1.1.5","1.1.4","cli==0.4.19","sdk==0.3.12","1.1.3","checkpointpostgres==3.0.5","cli==0.4.18","cli==0.4.17","cli==0.4.16","1.1.2","1.1.1","sdk==0.3.11","1.1.0","cli==0.4.15","sdk==0.3.10","cli==0.4.14","checkpoint==4.0.1","1.0.10","checkpoint==4.0.1rc3","checkpoint==4.0.1rc2","checkpoint==4.0.1rc1","1.0.10rc1","sdk==0.3.9","sdk==0.3.8","prebuilt==1.0.8","1.0.9","sdk==0.3.7","sdk==0.3.6","sdk==0.3.5","1.0.8","sdk==0.3.4","checkpointpostgres==3.0.4","cli==0.4.12","prebuilt==1.0.7","1.0.7","checkpointsqlite==3.0.3","sdk==0.3.3","prebuilt==1.0.6","checkpointsqlite==3.0.2","checkpointpostgres==3.0.3","checkpoint==4.0.0","1.0.6","sdk==0.3.2","sdk==0.3.1","cli==0.4.11","cli==0.4.10","1.0.5","sdk==0.3.0","checkpointpostgres==3.0.2","checkpointsqlite==3.0.1","sdk==0.2.15","cli==0.4.9","cli==0.4.8","sdk==0.2.14","sdk==0.2.12","1.0.4","sdk==0.2.10","prebuilt==1.0.5","prebuilt==1.0.4","prebuilt==1.0.3","1.0.3","checkpointpostgres==3.0.1","1.0.2","checkpoint==3.0.1","cli==0.4.6","prebuilt==1.0.2","prebuilt==1.0.1","checkpointsqlite==3.0.0","checkpointpostgres==3.0.0","checkpoint==3.0.0","1.0.1","0.6.10","prebuilt==1.0.0","1.0.0","prebuilt==0.7.0rc1","cli==0.4.4","1.0.0rc1","cli==0.4.3","0.6.9","checkpointpostgres==2.0.25","checkpoint==2.1.2","checkpointpostgres==2.0.24","0.6.8","sdk==0.2.9","0.6.7","sdk==0.2.8","sdk==0.2.7","cli==0.4.2","cli==0.4.1","sdk==0.2.6","sdk==0.2.5","sdk==0.2.4","cli==0.4.0","sdk==0.2.3","cli==0.3.8","cli==0.3.7","0.6.6","sdk==0.2.2","sdk==0.2.1","0.6.5","prebuilt==0.6.4","0.6.4","prebuilt==0.6.3","0.6.3","0.6.2","prebuilt==0.6.2","prebuilt==0.6.1","0.6.1","prebuilt==0.6.0","0.6.0","prebuilt==0.6.0a1","0.6.0a2","checkpointsqlite==2.0.11","sdk==0.2.0a1","0.6.0a1","cli==0.3.6","sdk==0.2.0","0.5.4","sdk==0.1.74","cli==0.3.5","checkpoint==2.1.1","checkpointpostgres==2.0.23","sdk==0.1.73","0.5.3","checkpointpostgres==2.0.22","0.5.2","cli==0.3.4","0.5.1","prebuilt==0.5.2","prebuilt==0.5.1","sdk==0.1.72","prebuilt==0.5.0","0.5.0","sdk==0.1.71","0.5.0rc1","prebuilt==0.5.0rc0","0.5.0rc0","checkpoint==2.1.0","cli==0.3.2","cli==0.3.3","cli==0.3.1","cli==0.2.12","cli==0.2.11","prebuilt==0.2.2","0.4.7","0.4.6","prebuilt==0.2.1","prebuilt==0.2.0","sdk==0.1.70","checkpointsqlite==2.0.10","checkpointsqlite==2.0.9","checkpointsqlite==2.0.8","0.4.5","checkpoint==2.0.26","0.4.4","sdk==0.1.69","cli==0.2.10","cli==0.2.9","0.4.3","0.4.2","checkpointsqlite==2.0.7","cli==0.2.8","sdk==0.1.66","sdk==0.1.65","0.4.1","sdk==0.1.64","0.4.0","checkpoint==2.0.25","0.3.34","0.3.32","cli==0.2.7","cli==0.2.6","sdk==0.1.63","sdk==0.1.62","checkpointpostgres==2.0.21","checkpointpostgres==2.0.20","cli==0.2.5","0.3.31","cli==0.2.4","0.3.30","0.3.29","cli==0.2.3","0.3.28","cli==0.2.2","cli==0.2.1","0.3.27","0.3.26","cli==0.1.89","0.3.25","prebuilt==0.1.8","cli==0.1.84","sdk==0.1.61","checkpoint==2.0.24","0.3.24","0.3.23","cli==0.1.83","0.3.22","cli==0.1.82","cli==0.1.81","sdk==0.1.60","0.3.21","prebuilt==0.1.7","cli==0.1.80","sdk==0.1.59","prebuilt==0.1.6","prebuilt==0.1.5","0.3.20","checkpoint==2.0.23","checkpoint==2.0.22","0.3.19","cli==0.1.79","prebuilt==0.1.4","cli==0.1.78","checkpointpostgres==2.0.19","0.3.18","sdk==0.1.58","0.3.17","0.3.16","0.3.15","0.3.14","0.3.13","0.3.12","checkpoint==2.0.21","checkpointpostgres==2.0.18","0.3.11","cli==0.1.77","checkpointpostgres==2.0.17","checkpoint==2.0.20","0.3.10","sdk==0.1.57","prebuilt==0.1.3","0.3.8","sdk==0.1.56","cli==0.1.76","checkpoint==2.0.19","0.3.7","0.3.6","checkpointsqlite==2.0.6","checkpointpostgres==2.0.16","checkpoint==2.0.18","sdk==0.1.55","checkpoint==2.0.17","cli==0.1.75","prebuilt==0.1.2","0.3.5","0.3.4","0.3.3","0.3.2","cli==0.1.74","0.3.1","prebuilt==0.1.1","prebuilt==0.1.0","0.3.0","0.2.76","0.2.75","cli==0.1.73","sdk==0.1.53","cli==0.1.72","0.2.74","checkpoint==2.0.16","checkpointsqlite==2.0.5","checkpointpostgres==2.0.15","0.2.73","checkpoint==2.0.15","checkpoint==2.0.14","0.2.72","checkpointsqlite==2.0.4","checkpointpostgres==2.0.14","checkpoint==2.0.13","0.2.71","checkpoint==2.0.12","cli==0.1.71","0.2.70","0.2.69","cli==0.1.70","0.2.68","cli==0.1.69","0.2.67","0.2.66","0.2.65","cli==0.1.68","0.2.64","0.2.63","checkpointpostgres==2.0.13","checkpointsqlite==2.0.3","checkpointpostgres==2.0.12","checkpoint==2.0.10","checkpointduckdb==2.0.2","checkpointsqlite==2.0.2","checkpointpostgres==2.0.11","cli==0.1.67","cli==0.1.66","0.2.62","checkpointpostgres==2.0.10","sdk==0.1.51","sdk==0.1.50","0.2.61","checkpointpostgres==2.0.9","cli==0.1.65","sdk==0.1.48","0.2.60","sdk==0.1.47","sdk==0.1.46","cli==0.1.64","cli==0.1.63","cli==0.1.62","sdk==0.1.45"],"database_specific":{"source":"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-104873.json"}}],"schema_version":"1.9.0","severity":[{"type":"CVSS_V4","score":"CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N"}]}