CVE-2026-48775: LangGraph SQLite Checkpoint Unsafe Deserialization
LangGraph SQLite Checkpoint, a data persistence component in LangGraph, can deserialize untrusted Python objects from checkpoint files stored in SQLite databases. If an attacker gains write access to the checkpoint storage backend, they can inject malicious serialized objects that execute arbitrary code when the application loads a checkpoint. This is a defense-in-depth vulnerability—it requires an attacker to first compromise the underlying storage layer, but if they do, they can escalate that access to runtime code execution. The issue affects versions 4.1.0 and earlier; version 4.1.1 and later contain a fix.
Source data · NVD / CISA · public domain
- CVSS
- 3.1 · 6.8 MEDIUM · CVSS:3.1/AV:A/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H
- Weaknesses (CWE)
- CWE-502, CWE-913
- Affected products
- 1 configuration(s)
- Published / Modified
- 2026-06-16 / 2026-06-24
NVD description (verbatim)
LangGraph SQLite Checkpoint is an implementation of LangGraph CheckpointSaver that uses SQLite DB (both sync and async, via aiosqlite). In versions 4.1.0 and prior, the JsonPlusSerializer can reconstruct Python objects from JSON checkpoint payloads. Under conditions where someone could modify checkpoint bytes at rest in the backing store, the deserialization path could reconstruct objects beyond what the application expects, which could in turn result in code execution at checkpoint load time. This is a defense-in-depth issue. The affected behavior is reachable only when checkpoint bytes at rest in the backing store can be modified by an unauthorized party. In most deployments that prerequisite already implies a serious incident; the additional concern is turning "checkpoint-store write access" into code execution in the application runtime. This issue has been fixed in version 4.1.1.
1 reference(s) · View on NVD →
SEC.co analysis · AI-assisted, reviewed against source
Technical summary
The vulnerability exists in LangGraph's JsonPlusSerializer, which deserializes Python objects from JSON-formatted checkpoint payloads. The vulnerable code path permits reconstruction of arbitrary Python objects during checkpoint loading (both synchronous and asynchronous via aiosqlite). An attacker with write-level access to the SQLite database file can craft malicious serialized objects that trigger code execution when deserialized. The root cause is unsafe deserialization (CWE-502) combined with inadequate object validation (CWE-913). Mitigation is applied in version 4.1.1 through changes to the serialization/deserialization logic.
Business impact
Organizations using LangGraph checkpoints risk escalation of storage-layer compromise into application-level code execution. If an attacker breaches file-system or database permissions protecting checkpoint data, they can pivot to running arbitrary code within application processes. This undermines the separation between data layer and application layer, potentially exposing sensitive data, enabling lateral movement, or disrupting service availability. Teams relying on checkpoint durability and replay for LLM applications should treat this as a privilege-escalation vector.
Affected systems
LangGraph Checkpoint versions 4.1.0 and earlier are affected. The vulnerability applies to both synchronous and asynchronous (aiosqlite) implementations of SQLite-backed checkpointing. Any application using LangGraph's CheckpointSaver with SQLite as the backing store is at risk if the storage location is accessible to unauthorized parties or if administrative credentials are compromised.
Exploitability
Exploitation requires two preconditions: (1) an attacker must first gain write access to the SQLite checkpoint database file, and (2) the application must load a checkpoint at runtime. The CVSS vector (AV:A/AC:L/PR:H) reflects that this is an adjacent-network or local threat requiring high privilege. However, in cloud and containerized deployments, storage access may be less tightly controlled than intended, and insider threats or credential compromise are realistic. Once storage write access is obtained, crafting a malicious checkpoint is straightforward—the serialization format is well-documented and Python's deserialization is deterministic.
Remediation
Upgrade LangGraph Checkpoint to version 4.1.1 or later. This version removes unsafe deserialization of arbitrary Python objects. After patching, review file-system and database permissions for checkpoint storage to ensure only the application process and authorized administrators can write to checkpoint files. Consider encrypting checkpoint files at rest and in transit, enforcing least-privilege access controls, and monitoring for unauthorized modifications to checkpoint storage.
Patch guidance
Verify the installed version of LangGraph Checkpoint and update to 4.1.1 or later. For most Python environments, this can be done via pip: `pip install --upgrade langgraph-checkpoint>=4.1.1`. Applications should test checkpoint compatibility before and after the upgrade, particularly if custom serializers or checkpoint migration logic is in use. Review release notes for version 4.1.1 to confirm behavior changes relevant to your deployment.
Detection guidance
Monitor for unexpected modifications to SQLite checkpoint database files or unexpected access patterns (writes) to checkpoint storage. Log and alert on deserialization failures or exceptions during checkpoint load operations, which may indicate attempts to inject malicious payloads. Audit file-system and database permissions on checkpoint directories to ensure they match your intended access model. If feasible, use file integrity monitoring (FIM) tools to detect tampering with checkpoint files.
Why prioritize this
Although this is a MEDIUM-severity vulnerability with a CVSS score of 6.8, it warrants prompt attention because it represents a privilege escalation from storage access to code execution. Applications handling sensitive data or running in multi-tenant environments should prioritize patching. The vulnerability is not listed in the KEV catalog, indicating limited evidence of active exploitation in the wild, but that should not delay remediation—the attack chain is simple once storage access is obtained. Organizations should schedule patching within standard maintenance windows but do not need to treat this as an emergency.
Risk score, explained
The CVSS 3.1 score of 6.8 (MEDIUM) reflects a local or adjacent-network attack vector (AV:A), low attack complexity (AC:L), and high privilege requirement (PR:H), balanced against high impact on confidentiality, integrity, and availability (C:H/I:H/A:H). The score appropriately captures the two-stage nature of the attack—storage compromise must precede exploitation—but underweights the severity of the impact (arbitrary code execution) in some organizational contexts. Teams handling high-value data or running applications with strict security postures may warrant treating this as functionally HIGH priority despite the MEDIUM score.
Frequently asked questions
Do we need to upgrade immediately?
Upgrade within your standard patch cycle (typically within 30 days). This is not an emergency, as the vulnerability is not actively exploited in the wild and requires prior compromise of checkpoint storage. However, do not delay beyond that window, especially if your checkpoint files are accessible to multiple users or in shared storage environments.
How can we tell if someone has exploited this?
Check for unexpected modifications to checkpoint database files (file timestamps, size changes, or content hash mismatches). Review application logs for deserialization errors or exceptions during checkpoint loading. Correlate with any suspicious access to the storage location where checkpoints are stored.
Does this affect other persistence backends (e.g., PostgreSQL)?
No. This vulnerability is specific to LangGraph SQLite Checkpoint and its JsonPlusSerializer. Other storage backends (PostgreSQL, in-memory, etc.) use different serialization mechanisms and are not affected. Verify your LangGraph configuration to confirm you are using SQLite checkpointing if concerned.
What if we can't patch immediately?
Implement strong access controls on checkpoint storage—restrict write access to the application process and authorized administrators only. Encrypt checkpoint files at rest and in transit. Monitor for unauthorized file modifications. These controls reduce but do not eliminate the risk, so establish a patch timeline and communicate it to stakeholders.
This analysis is based on CVE-2026-48775 as published. We do not have access to active exploit code or zero-day information. Patch version numbers and availability should be verified against the official LangGraph/LangChain project advisory. Security assessment and patch timing should be tailored to your organization's risk tolerance and operational constraints. This page does not constitute legal or compliance advice; consult your security and legal teams regarding remediation obligations. Source: NVD (public-domain), retrieved 2026-07-24. Analysis generated by SEC.co (claude-haiku-4-5).
Related vulnerabilities
- CVE-2026-10566MEDIUMMetaGPT Local Deserialization Vulnerability Exploit Available
- CVE-2026-34993MEDIUMAIOHTTP CookieJar Code Execution Vulnerability – Patch Guidance
- CVE-2026-48560MEDIUMSharePoint Deserialization Spoofing Vulnerability – CVSS 5.4
- CVE-2026-50589MEDIUMOpenStack Ironic Unauthenticated Denial of Service (MEDIUM, 5.3)
- CVE-2026-7566MEDIUMPHP Object Injection in LearnPress Backup & Migration Tool (CVSS 6.6)
- CVE-2025-11993HIGHWooCommerce Infinite Scroll Plugin PHP Object Injection – HIGH Severity
- CVE-2026-12191HIGHOpenpilot 0.11 Unsafe Pickle Deserialization – LOCAL RCE
- CVE-2026-20251HIGHSplunk Remote Code Execution via KV Store Deserialization