CVE-2026-48775: LangGraph SQLite: deserialization RCE at checkpoint load
MEDIUMLangGraph's SQLite checkpoint backend (versions ≤4.1.0) allows arbitrary Python object reconstruction at checkpoint load time via JsonPlusSerializer, enabling code execution if checkpoint data at rest can be modified by an unauthorized party. While exploitation requires write access to the SQLite backing store — a serious incident in its own right — the vulnerability escalates that foothold into full application-level RCE, dramatically compounding blast radius in agentic pipelines where checkpoints persist tool-call state, intermediate outputs, and potentially in-flight credentials. There is no public exploit and this is not in CISA KEV, but LangGraph's broad adoption in production agent frameworks warrants prompt action. Upgrade to langgraph-checkpoint-sqlite 4.1.1 and immediately audit file-system ACLs on all SQLite checkpoint stores.
What is the risk?
Medium severity (CVSS 6.8) with constrained exploitability: adjacent network access and high privileges are required, materially narrowing the attack surface. However, in agentic AI deployments the checkpoint store often resides on shared infrastructure where lateral movement from a single compromised sidecar or co-located service can grant the necessary write access. The real risk is privilege escalation — converting an already-significant storage compromise into guaranteed code execution inside the LangGraph runtime, including access to any secrets or API tokens the agent holds in memory.
How does the attack unfold?
What systems are affected?
| Package | Ecosystem | Vulnerable Range | Patched |
|---|---|---|---|
| LangGraph | pip | — | No patch |
Do you use LangGraph? You're affected.
How severe is it?
What is the attack surface?
What should I do?
5 steps-
Upgrade langgraph-checkpoint-sqlite to 4.1.1 immediately — this is a targeted patch with no breaking API changes.
-
Restrict file-system permissions on SQLite checkpoint files to the minimum necessary service account; revoke group/world write bits.
-
For higher-assurance environments, migrate to a checkpoint backend with stronger access controls (e.g., PostgreSQL with row-level security).
-
Monitor for anomalous child process spawns or unexpected outbound connections from LangGraph worker processes as a detection signal.
-
If immediate patching is blocked, disable checkpoint persistence entirely or run the deserialization step in a sandboxed subprocess with no network access.
How is it classified?
Which compliance frameworks are affected?
This CVE is relevant to:
Frequently Asked Questions
What is CVE-2026-48775?
LangGraph's SQLite checkpoint backend (versions ≤4.1.0) allows arbitrary Python object reconstruction at checkpoint load time via JsonPlusSerializer, enabling code execution if checkpoint data at rest can be modified by an unauthorized party. While exploitation requires write access to the SQLite backing store — a serious incident in its own right — the vulnerability escalates that foothold into full application-level RCE, dramatically compounding blast radius in agentic pipelines where checkpoints persist tool-call state, intermediate outputs, and potentially in-flight credentials. There is no public exploit and this is not in CISA KEV, but LangGraph's broad adoption in production agent frameworks warrants prompt action. Upgrade to langgraph-checkpoint-sqlite 4.1.1 and immediately audit file-system ACLs on all SQLite checkpoint stores.
Is CVE-2026-48775 actively exploited?
No confirmed active exploitation of CVE-2026-48775 has been reported, but organizations should still patch proactively.
How to fix CVE-2026-48775?
1. Upgrade langgraph-checkpoint-sqlite to 4.1.1 immediately — this is a targeted patch with no breaking API changes. 2. Restrict file-system permissions on SQLite checkpoint files to the minimum necessary service account; revoke group/world write bits. 3. For higher-assurance environments, migrate to a checkpoint backend with stronger access controls (e.g., PostgreSQL with row-level security). 4. Monitor for anomalous child process spawns or unexpected outbound connections from LangGraph worker processes as a detection signal. 5. If immediate patching is blocked, disable checkpoint persistence entirely or run the deserialization step in a sandboxed subprocess with no network access.
What systems are affected by CVE-2026-48775?
This vulnerability affects the following AI/ML architecture patterns: agent frameworks, stateful LLM applications, multi-turn conversational agents, agentic pipelines.
What is the CVSS score for CVE-2026-48775?
CVE-2026-48775 has a CVSS v3.1 base score of 6.8 (MEDIUM).
What is the AI security impact?
Affected AI Architectures
MITRE ATLAS Techniques
AML.T0011.000 Unsafe AI Artifacts AML.T0037 Data from Local System AML.T0050 Command and Scripting Interpreter AML.T0080.000 Memory Compliance Controls Affected
What are the technical details?
Original Advisory
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.
Exploitation Scenario
An attacker with write access to the SQLite checkpoint file — obtained via path traversal in a co-located service, misconfigured shared NFS/EFS storage, or lateral movement from a compromised container — crafts a malicious JSON checkpoint payload embedding a Python class that invokes os.system() or subprocess.Popen() via its __reduce__ method. When the LangGraph application next resumes from that checkpoint, JsonPlusSerializer reconstructs the object, triggering OS command execution in the agent process. The attacker gains a reverse shell with the agent's runtime permissions, including mounted secrets, LLM provider API keys, and credentials for any tools the agent has been granted access to.
Weaknesses (CWE)
CWE-502 Deserialization of Untrusted Data
Primary
CWE-913 Improper Control of Dynamically-Managed Code Resources
Primary
CWE-502 — Deserialization of Untrusted Data: The product deserializes untrusted data without sufficiently ensuring that the resulting data will be valid.
- [Architecture and Design, Implementation] If available, use the signing/sealing features of the programming language to assure that deserialized data has not been tainted. For example, a hash-based message authentication code (HMAC) could be used to ensure that data has not been modified.
- [Implementation] When deserializing data, populate a new object rather than just deserializing. The result is that the data flows through safe input validation and that the functions are safe.
Source: MITRE CWE corpus.
CVSS Vector
CVSS:3.1/AV:A/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H Timeline
Related Vulnerabilities
CVE-2025-64104 7.3 langgraph-checkpoint-sqlite: SQL Injection exposes database
Same package: langgraph CVE-2025-67644 7.3 langgraph-checkpoint-sqlite: SQL Injection exposes database
Same package: langgraph CVE-2025-8709 7.3 langgraph-checkpoint-sqlite: SQL Injection exposes database
Same package: langgraph CVE-2026-28277 6.8 langgraph: Deserialization enables RCE
Same package: langgraph CVE-2026-48121 6.7 LangGraph MongoDB: NoSQL injection leaks tenant checkpoints
Same package: langgraph