Skip to main content

LangGraph SQLite Checkpoint CVE-2025-67644

HIGH
SQL Injection (CWE-89)
2025-12-11 security-advisories@github.com GHSA-9rwj-6rc7-p77c
7.8
CVSS 3.1 · NVD
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Reach checkpoint-search API endpoint
  2. Delivery
    Submit crafted metadata filter key
  3. Exploit
    Break out of json_extract('$.key') path
  4. Execution
    Inject always-true OR condition
  5. Impact
    Exfiltrate 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.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.0% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv2 – 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)
v1 Mar 17, 2026 - 20:45 CVSS 7.3

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

pypi langgraph-checkpoint-sqlite fix: 3.0.1

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

NVD PRIMARY 7.8 HIGH
AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
vuln.today AI 8.6 HIGH

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.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:L
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:L/VA:L/SC:N/SI:N/SA:N

Primary rating from NVD.

CVSS VectorNVD

Attack Vector
Local
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
High

Lifecycle Timeline

5
Analysis Updated
Oct 08, 2026 - 10:34 vuln.today
v2 - CVSS changed
CVSS changed
Oct 08, 2026 - 10:22 NVD
7.3 (HIGH) 7.8 (HIGH)
Patch released
Mar 17, 2026 - 20:45 nvd
Patch available
PoC Detected
Mar 17, 2026 - 19:47 vuln.today
Public exploit code
CVE Published
Dec 11, 2025 - 00:16 nvd
HIGH 7.3

DescriptionNVD

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
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 1 pypi packages depend on langgraph-checkpoint-sqlite (1 direct, 0 indirect)

Ecosystem-wide dependent count for version 3.0.1.

Executive ViewAI

Why It Matters

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.

Business Impact: Medium
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.0%
Top 94% exploitable
Prevalence
Medium
SQLite checkpointer of popular LangGraph agent framework, mostly dev/prototype use
Exploit
POC
Public exploit code exists
Data Quality
5 sources
Confidence: Medium

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC Yes
EPSS 0.0%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
Poc
System Exposure· derived
Small
Automatable· derived
No
Human Impact
Medium

Priority Score

59
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +39
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

SQL injection exploits the way applications construct database queries by mixing user input directly into SQL statements.

Affected Products (CPE)NVD

cpe:2.3:a:langchain:langgraph-checkpoint-sqlite:*:*:*:*:*:python:*:*
CVE-2014-6271 CRITICAL POC
9.8 Sep 24

GNU Bash through 4.3 processes trailing strings after function definitions in the values of environment variables, which

CVE-2024-24919 HIGH POC
8.6 May 28

Potentially allowing an attacker to read certain information on Check Point Security Gateways once connected to the inte

CVE-2014-7169 CRITICAL POC
9.8 Sep 25

GNU Bash through 4.3 bash43-025 processes trailing strings after certain malformed function definitions in the values of

CVE-2017-1000083 HIGH POC
7.8 Sep 05

backend/comics/comics-document.c (aka the comic book backend) in GNOME Evince before 3.24.1 allows remote attackers to e

CVE-2026-85102 CRITICAL POC
9.8 Sep 09

Remote code execution in Check Point Quantum Security Gateway arises from improper certificate trust validation during V

CVE-2026-16232 CRITICAL POC
9.3 Jul 22

Authentication bypass in the Check Point SmartConsole login process lets an unauthenticated remote attacker mint a valid

CVE-2026-50751 CRITICAL POC
9.3 Jun 08

Authentication bypass in Check Point Quantum Security Gateway and Spark Firewalls allows unauthenticated remote attacker

CVE-2026-93616 CRITICAL POC
9.8 Sep 22

Unauthenticated attackers who can reach the file-upload interface of Check Point Management Server can combine directory

CVE-2021-3449 MEDIUM
5.9 Mar 25

An OpenSSL TLS server may crash if sent a maliciously crafted renegotiation ClientHello message from a client. Rated med

CVE-2026-85103 CRITICAL POC
9.8 Sep 09

Remote code execution in Check Point Quantum Security Gateway and Quantum Security Management stems from a heap-based bu

CVE-2026-91843 CRITICAL POC
9.8 Sep 16

Unauthenticated remote code execution affects Check Point Quantum Security Management, where a stack-based buffer overfl

CVE-2024-3568 CRITICAL POC
9.6 Apr 10

The huggingface/transformers library is vulnerable to arbitrary code execution through deserialization of untrusted data

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy