Skip to content
MediumVulnerability

GHSA-fjqc-hq36-qh5p: LangGraph Checkpoint: Unsafe JSON deserialization in checkpoint loading

Published
Record updated
View JSON
Affected
  • langgraph-checkpoint < 4.1.1
Fixed in
4.1.1
  • released May 22, 2026, 34 days before disclosure
Known exploitation
Not listed in the CISA Known Exploited Vulnerabilities catalog at the last check.
EPSS
0.2%

Summary

LangGraph's JsonPlusSerializer can reconstruct Python objects from JSON checkpoint payloads, so an attacker with write access to checkpoint bytes at rest could potentially trigger code execution at checkpoint load time. The issue is classed as defense-in-depth: it is reachable only when an unauthorized party can modify the checkpoint store, and the team reports no evidence of exploitation in the wild. The default serializer in PostgresSaver, SqliteSaver and their async counterparts is JsonPlusSerializer, so applications generally fall in scope without opting in.

Mitigation

The JSON deserialization path has been narrowed so that revival is restricted to default-constructor reconstruction using the args/kwargs carried in the payload. Freshly written checkpoints are unaffected, and legacy payloads that used the default constructor as their first option still revive. Pre-October-2025 pydantic model checkpoints that relied on a no-validation fallback factory now return None from the revival path and surface as raw dicts. Operational guidance: restrict write access to checkpoint stores, rotate credentials if unauthorized access is suspected, and avoid custom JSON revival hooks that reconstruct arbitrary types unless checkpoint data is fully trusted.