LangGraph SQLite Checkpoint CVE-2025-67644
HIGHAttack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessReach checkpoint-search API endpoint
-
DeliverySubmit crafted metadata filter key
-
ExploitBreak out of json_extract('$.key') path
-
ExecutionInject always-true OR condition
-
ImpactExfiltrate all stored checkpoint records
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Parameterized queries, prepared statements
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Persistence The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitable only when the host application passes attacker-controlled metadata filter KEYS (not merely values) into SqliteSaver / AsyncSqliteSaver checkpoint search operations (list(), alist(), get_state_history()) on versions <= 3.0.0 - for example a custom server endpoint that copies a request JSON field name into filter={filter_field: filter_value}. The vulnerable _metadata_predicate() interpolates keys into f-strings while values are already parameterized. Strong limiting factors: the key must be untrusted (typical applications hardcode filter keys and are unaffected); LangSmith managed deployments are NOT impacted because they do not permit custom checkpointers; and only the SQLite backend (sync or aiosqlite async) is in scope. Per the NVD vector's PR:L this would be low-privilege authenticated, but the GHSA example implies the exposing endpoint may be unauthenticated - authentication requirements are not confirmed from the vulnerable library alone and depend on the deployment. |
| Impact | Signals are mixed and point to a conditional, low-urgency issue despite the 7.8 'High' rating. The NVD CVSS vector (AV:L/AC:L/PR:L/UI:N/C:H/I:H/A:H) describes low-privilege local exploitation with full CIA impact, but this conflicts with the GHSA/description, which frames the realistic attack path as a network-facing custom server endpoint that forwards untrusted metadata filter keys into SqliteSaver.list()/get_state_history() - i.e. AV:N in practice. This AV:L-vs-network discrepancy should be verified, but either way exploitation is gated by a non-default coding pattern: the application must accept attacker-controlled filter KEYS (not just values), which is uncommon. EPSS is 0.02% (6th percentile), the CVE is NOT in CISA KEV, and there is no confirmed active exploitation; publicly available exploit code exists (a trivial PoC in the GHSA), but PoC availability is distinct from in-the-wild use. The NVD I:H/A:H ratings are also optimistic for defenders - the injection lands inside a single SELECT's WHERE clause (sqlite3 does not permit stacked statements), so the demonstrated impact is filter/access-control bypass and bulk data disclosure (confidentiality) rather than reliable write/destroy. Net: a real but narrow bug - high priority only for teams that expose checkpoint-search endpoints with user-supplied filter keys on vulnerable versions; low priority for everyone else, and explicitly not exploitable in LangSmith managed deployments. |
| Exploit ScenarioDerived | An application exposes a checkpoint-history endpoint (e.g. /api/history) that maps a user-supplied request field directly into the filter key of graph.get_state_history()/SqliteSaver.list(). An attacker submits a filter key such as "x') OR '1'='1", which breaks out of the json_extract path and forces the WHERE clause true, returning all stored checkpoints and bypassing intended filtering/access controls. A working proof-of-concept is published in the GHSA-9rwj-6rc7-p77c advisory. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv2 – Oct 08, 2026
SQL injection in the langgraph-checkpoint-sqlite package (versions 3.0.0 and below) allows untrusted metadata filter keys to be interpolated directly into SQLite queries, letting an attacker who controls filter key names alter the WHERE clause of checkpoint search queries and retrieve or manipulate checkpoint data outside their intended filter scope. The flaw is conditional rather than universal: it only triggers when a host application forwards attacker-controlled filter key names into SqliteSaver or AsyncSqliteSaver list(), alist(), or get_state_history() calls, since typical applications hardcode filter keys and are unaffected, and LangSmith managed deployments are explicitly not impacted because they disallow custom checkpointers. Publicly available exploit code exists and the vendor has released a fix in 3.0.1, but the EPSS score is very low (0.02%, 6th percentile) and there is no evidence of active exploitation; the NVD vector (7.8, AV:L/PR:L) and the independent assessment (AV:N/PR:N, C:H/I:L/A:L) disagree on network reachability and authentication, so prerequisites depend on how the exposing endpoint is deployed.
Earlier versions of this analysis (1)
A SQL injection vulnerability exists in LangGraph SQLite Checkpoint, an implementation of LangGraph CheckpointSaver for SQLite databases. The vulnerability affects versions 3.0.0 and below of the langgraph-checkpoint-sqlite Python package, allowing attackers with local access and low privileges to manipulate SQL queries through unvalidated metadata filter keys in checkpoint search operations. A proof-of-concept exploit is publicly available, though the EPSS score of 0.02% (6th percentile) suggests minimal active exploitation in the wild currently.
RemediationAI
Upgrade langgraph-checkpoint-sqlite to 3.0.1 or later (for example pip install -U 'langgraph-checkpoint-sqlite>=3.0.1'), which is the vendor-released patch and adds allowlist validation of filter keys plus parameterized LIMIT and comparison clauses; details are in the GitHub advisory https://github.com/langchain-ai/langgraph/security/advisories/GHSA-9rwj-6rc7-p77c and the fixing commit https://github.com/langchain-ai/langgraph/commit/297242913f8ad2143ee3e2f72e67db0911d48e2a. If immediate upgrade is not possible, the effective compensating control is to stop passing untrusted input as filter KEY names: never copy a request field name (e.g. request.json['filter_field']) into the filter dictionary of list()/alist()/get_state_history(), instead map incoming parameters to a hardcoded allowlist of permitted keys and reject or drop any key that does not match ^[a-zA-Z0-9_.-]+$; the trade-off is reduced filtering flexibility for API clients, but it removes the vulnerable code path without touching the library. Additional hardening with limited benefit: restrict the exposing endpoint to authenticated, low-privilege callers and monitor for anomalous checkpoint history queries, though note the library's own authentication requirements are not confirmed from available data and depend entirely on the host deployment; LangSmith-managed deployments need no action as they are confirmed unaffected.
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in pypi
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The vulnerability is a classic CWE-89 SQL injection caused by unsafe query construction in LangGraph's SQLite checkpointer. In the vulnerable _metadata_predicate() logic, filter values were parameterized with '?' placeholders, but each metadata filter KEY was concatenated straight into an f-string that builds a json_extract() expression, e.g. json_extract(CAST(metadata AS TEXT), '$.{query_key}') {operator} ?. Because SQLite executes the fully-assembled string, a key such as "x') OR '1'='1" closes the JSON path literal and injects an always-true condition, bypassing filtering (and potentially enabling broader query manipulation) without needing to touch the value side. The affected technology stack is the Python langgraph-checkpoint-sqlite distribution (CPE cpe:2.3:a:langchain:langgraph-checkpoint-sqlite:*:*:*:*:*:python:*:*), covering both the synchronous SqliteSaver and the aiosqlite-based AsyncSqliteSaver, and the related store/sqlite/base.py path that also handled filter conditions. The upstream commit 297242913f8ad2143ee3e2f72e67db0911d48e2a addresses the root cause by adding a _validate_filter_key() helper that enforces a strict allowlist regex ^[a-zA-Z0-9_.-]+$ (raising ValueError on anything else) and by converting remaining string/numeric interpolations - including the LIMIT clause - to parameterized '?' bindings, so JSON path keys can no longer break out of their literal and numeric comparisons such as inf/nan are handled as bound floats.
Know when Checkpoint gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Reached via a network-facing checkpoint-search endpoint (AV:N, diverging from NVD AV:L) with the GHSA PoC unauthenticated (PR:N); single SELECT injection yields mainly data disclosure, so C:H but I:L/A:L.
Primary rating from NVD.
CVSS VectorNVD
Lifecycle Timeline
5DescriptionNVD
LangGraph SQLite Checkpoint is an implementation of LangGraph CheckpointSaver that uses SQLite DB (both sync and async, via aiosqlite). Versions 3.0.0 and below are vulnerable to SQL injection through the checkpoint implementation. Checkpoint allows attackers to manipulate SQL queries through metadata filter keys, affecting applications that accept untrusted metadata filter keys (not just filter values) in checkpoint search operations. The _metadata_predicate() function constructs SQL queries by interpolating filter keys directly into f-strings without validation. This issue is fixed in version 3.0.1.
Blast Radius
ecosystem impact- 1 pypi packages depend on langgraph-checkpoint-sqlite (1 direct, 0 indirect)
Ecosystem-wide dependent count for version 3.0.1.
Executive ViewAI
Organizations using langgraph-checkpoint-sqlite 3.0.0 or earlier in custom LangGraph applications may be exposed to unauthorized access or modification of checkpoint data when user-controlled metadata filter keys are passed into SQLite-backed checkpoint search functions. The risk is conditional-hardcoded filter keys and LangSmith managed deployments are not affected-but publicly available exploit code exists, so teams running affected custom checkpointers should treat this as a priority remediation item. Vendor-released patch: 3.0.1 resolves the issue.
Apply vendor patch.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
SQL injection exploits the way applications construct database queries by mixing user input directly into SQL statements.
Affected Products (CPE)NVD
More in Checkpoint
View allGNU Bash through 4.3 processes trailing strings after function definitions in the values of environment variables, which
Potentially allowing an attacker to read certain information on Check Point Security Gateways once connected to the inte
GNU Bash through 4.3 bash43-025 processes trailing strings after certain malformed function definitions in the values of
backend/comics/comics-document.c (aka the comic book backend) in GNOME Evince before 3.24.1 allows remote attackers to e
Remote code execution in Check Point Quantum Security Gateway arises from improper certificate trust validation during V
Authentication bypass in the Check Point SmartConsole login process lets an unauthenticated remote attacker mint a valid
Authentication bypass in Check Point Quantum Security Gateway and Spark Firewalls allows unauthenticated remote attacker
Unauthenticated attackers who can reach the file-upload interface of Check Point Management Server can combine directory
An OpenSSL TLS server may crash if sent a maliciously crafted renegotiation ClientHello message from a client. Rated med
Remote code execution in Check Point Quantum Security Gateway and Quantum Security Management stems from a heap-based bu
Unauthenticated remote code execution affects Check Point Quantum Security Management, where a stack-based buffer overfl
The huggingface/transformers library is vulnerable to arbitrary code execution through deserialization of untrusted data
GHSA-9rwj-6rc7-p77c
NVD
CVE.org
EPSS
VulDB
Exploit-DB