{"id":"CVE-2026-115883","state":"PUBLISHED","title":"LangGraph: Namespace labels containing `.` reach other namespaces in Postgres and SQLite stores","description":"LangGraph checkpoint savers provide Postgres- and SQLite-backed state persistence for LangGraph workflows and agents. Prior to langgraph-checkpoint-postgres 3.1.3 and langgraph-checkpoint-sqlite 3.1.2, PostgresStore, AsyncPostgresStore, SqliteStore, and AsyncSqliteStore flatten namespace labels with \".\".join(namespace), while BaseStore validates labels only for put and aput. Unvalidated dotted labels passed through get, search, delete, list_namespaces, their asynchronous equivalents, or direct batch and abatch operations can resolve to another tenant's stored namespace, allowing cross-namespace reads, overwrites, or deletion. InMemoryStore is not affected because it compares namespace tuples. This issue is fixed in langgraph-checkpoint-postgres 3.1.3 and langgraph-checkpoint-sqlite 3.1.2.","publishedAt":"2026-10-23T21:12:34.523Z","updatedAt":"2026-10-26T17:42:32.027Z","severity":{"score":6,"label":"Medium","version":"4.0","vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:L/VA:N/SC:N/SI:N/SA:N","source":"GitHub_M"},"assigner":"GitHub_M","products":["langchain-ai langgraph","langchain-ai langgraph-checkpoint-postgres","langchain-ai langgraph-checkpoint-sqlite"],"affected":[{"vendor":"langchain-ai","product":"langgraph","versions":[{"version":"< 1.2.15","status":"affected"}]},{"vendor":"langchain-ai","product":"langgraph-checkpoint-postgres","versions":[{"version":"< 3.1.3","status":"affected"}]},{"vendor":"langchain-ai","product":"langgraph-checkpoint-sqlite","versions":[{"version":"< 3.1.2","status":"affected"}]}],"references":["https://github.com/langchain-ai/langgraph/security/advisories/GHSA-6hmw-9432-67qq","https://github.com/langchain-ai/langgraph/pull/9217","https://github.com/langchain-ai/langgraph/commit/bfcfea554ed5c7f7be562cebf8825e911b493ab1"],"weaknesses":["CWE-20","CWE-863"],"ingestedAt":"2026-10-29T20:10:43.281Z","source":{"repository":"CVEProject/cvelistV5","path":"cves/2026/115xxx/CVE-2026-115883.json","commit":"556c9d3a8cd17e218bb8e452ba7cd619a384ff47"},"raw":{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2026-115883","state":"PUBLISHED","datePublished":"2026-10-23T21:12:34.523Z","dateUpdated":"2026-10-26T17:42:32.027Z","assignerShortName":"GitHub_M","assignerOrgId":"a0819718-46f1-4df5-94e2-005712e83aaa","dateReserved":"2026-10-23T19:37:27.176Z"},"containers":{"cna":{"title":"LangGraph: Namespace labels containing `.` reach other namespaces in Postgres and SQLite stores","descriptions":[{"lang":"en","value":"LangGraph checkpoint savers provide Postgres- and SQLite-backed state persistence for LangGraph workflows and agents. Prior to langgraph-checkpoint-postgres 3.1.3 and langgraph-checkpoint-sqlite 3.1.2, PostgresStore, AsyncPostgresStore, SqliteStore, and AsyncSqliteStore flatten namespace labels with \".\".join(namespace), while BaseStore validates labels only for put and aput. Unvalidated dotted labels passed through get, search, delete, list_namespaces, their asynchronous equivalents, or direct batch and abatch operations can resolve to another tenant's stored namespace, allowing cross-namespace reads, overwrites, or deletion. InMemoryStore is not affected because it compares namespace tuples. This issue is fixed in langgraph-checkpoint-postgres 3.1.3 and langgraph-checkpoint-sqlite 3.1.2."}],"affected":[{"vendor":"langchain-ai","product":"langgraph","versions":[{"version":"< 1.2.15","status":"affected"}]},{"vendor":"langchain-ai","product":"langgraph-checkpoint-postgres","versions":[{"version":"< 3.1.3","status":"affected"}]},{"vendor":"langchain-ai","product":"langgraph-checkpoint-sqlite","versions":[{"version":"< 3.1.2","status":"affected"}]}],"references":[{"url":"https://github.com/langchain-ai/langgraph/security/advisories/GHSA-6hmw-9432-67qq","name":"https://github.com/langchain-ai/langgraph/security/advisories/GHSA-6hmw-9432-67qq","tags":["x_refsource_CONFIRM"]},{"url":"https://github.com/langchain-ai/langgraph/pull/9217","name":"https://github.com/langchain-ai/langgraph/pull/9217","tags":["x_refsource_MISC"]},{"url":"https://github.com/langchain-ai/langgraph/commit/bfcfea554ed5c7f7be562cebf8825e911b493ab1","name":"https://github.com/langchain-ai/langgraph/commit/bfcfea554ed5c7f7be562cebf8825e911b493ab1","tags":["x_refsource_MISC"]}],"metrics":[{"cvssV4_0":{"attackVector":"NETWORK","attackComplexity":"LOW","attackRequirements":"PRESENT","privilegesRequired":"LOW","userInteraction":"NONE","vulnConfidentialityImpact":"HIGH","vulnIntegrityImpact":"LOW","vulnAvailabilityImpact":"NONE","subConfidentialityImpact":"NONE","subIntegrityImpact":"NONE","subAvailabilityImpact":"NONE","baseScore":6,"baseSeverity":"MEDIUM","vectorString":"CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:L/VA:N/SC:N/SI:N/SA:N","version":"4.0"}}],"problemTypes":[{"descriptions":[{"cweId":"CWE-20","lang":"en","description":"CWE-20: Improper Input Validation","type":"CWE"}]},{"descriptions":[{"cweId":"CWE-863","lang":"en","description":"CWE-863: Incorrect Authorization","type":"CWE"}]}],"providerMetadata":{"shortName":"GitHub_M","orgId":"a0819718-46f1-4df5-94e2-005712e83aaa","dateUpdated":"2026-10-23T21:12:34.523Z"},"source":{"advisory":"GHSA-6hmw-9432-67qq","discovery":"UNKNOWN"}},"adp":[{"title":"CISA ADP Vulnrichment","metrics":[{"other":{"type":"ssvc","content":{"timestamp":"2026-10-26T15:39:07.446530Z","id":"CVE-2026-115883","options":[{"Exploitation":"none"},{"Automatable":"no"},{"Technical Impact":"partial"}],"role":"CISA Coordinator","version":"2.0.3"}}}],"providerMetadata":{"shortName":"CISA-ADP","orgId":"134c704f-9b21-4f2e-91b3-4a467353bcc0","dateUpdated":"2026-10-26T17:42:32.027Z"}}]}}}