LangGraph Checkpoint affected by RCE in "json" mode of JsonPlusSerializer
LangGraph SQLite Checkpoint is an implementation of LangGraph CheckpointSaver that uses SQLite DB (both sync and async, via aiosqlite). In versions 2.1.2 and below, the JsonPlusSerializer (used as the default serialization protocol for all checkpointing) contains a Remote Code Execution (RCE) vulnerability when deserializing payloads saved in the "json" serialization mode. By default, the serializer attempts to use "msgpack" for serialization. However, prior to version 3.0 of the checkpointer library, if illegal Unicode surrogate values caused serialization to fail, it would fall back to using the "json" mode. This issue is fixed in version 3.0.0.
- Products
- Not specified
- Affected versions
- Not specified
- Fixed versions
- Not specified
- CVEs
- CVE-2025-64439
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 7 Nov 2026, 12:35 UTC · Revision 1
Source evidence
LangGraph Checkpoint affected by RCE in "json" mode of JsonPlusSerializer
core-osv · Original sourcePublished 7 Nov 2025, 20:15 UTC
LangGraph SQLite Checkpoint is an implementation of LangGraph CheckpointSaver that uses SQLite DB (both sync and async, via aiosqlite). In versions 2.1.2 and below, the JsonPlusSerializer (used as the default serialization protocol for all checkpointing) contains a Remote Code Execution (RCE) vulnerability when deserializing payloads saved in the "json" serialization mode. By default, the serializer attempts to use "msgpack" for serialization. However, prior to version 3.0 of the checkpointer library, if illegal Unicode surrogate values caused serialization to fail, it would fall back to using the "json" mode. This issue is fixed in version 3.0.0.
osv:CVE-2025-64439
Complete source record
{
"id": "fa0b983c3d8d190ff89b96e4829786200be3636267a2e5b6c3fe1216c2c5f0ff",
"url": "https://osv.dev/vulnerability/CVE-2025-64439",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "LangGraph Checkpoint affected by RCE in \"json\" mode of JsonPlusSerializer",
"summary": "LangGraph SQLite Checkpoint is an implementation of LangGraph CheckpointSaver that uses SQLite DB (both sync and async, via aiosqlite). In versions 2.1.2 and below, the JsonPlusSerializer (used as the default serialization protocol for all checkpointing) contains a Remote Code Execution (RCE) vulnerability when deserializing payloads saved in the \"json\" serialization mode. By default, the serializer attempts to use \"msgpack\" for serialization. However, prior to version 3.0 of the checkpointer library, if illegal Unicode surrogate values caused serialization to fail, it would fall back to using the \"json\" mode. This issue is fixed in version 3.0.0.",
"evidence": "osv:CVE-2025-64439",
"products": [],
"severity": "high",
"structured": {
"id": "CVE-2025-64439",
"aliases": [
"CVE-2025-64439",
"GHSA-wwqv-p2pp-99h5",
"PYSEC-2026-1527"
],
"metrics": [
{
"type": "CVSS_V4",
"score": "CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:N/VI:H/VA:H/SC:H/SI:H/SA:H"
}
],
"affected": [
{
"ranges": [
{
"repo": "https://github.com/langchain-ai/langgraph",
"type": "GIT",
"events": [
{
"introduced": "0"
},
{
"fixed": "fca3e4513cf585a728a611485ba9db11b318a13c"
},
{
"fixed": "c5744f583b11745cd406f3059903e17bbcdcc8ac"
}
],
"database_specific": {
"extracted_events": [
{
"range": [
{
"introduced": "0"
},
{
"fixed": "3.0.0"
}
],
"source": "AFFECTED_FIELD",
"strategy": "StringRangeExpression"
},
{
"range": [
{
"fixed": "c5744f583b11745cd406f3059903e17bbcdcc8ac"
}
],
"source": "REFERENCES_COMMIT"
},
{
"range": [
{
"fixed": "fca3e4513cf585a728a611485ba9db11b318a13c"
}
],
"source": "REFERENCES_TAG",
"original_tag": "checkpoint==3.0.0"
}
]
}
}
],
"versions": [
"0.6.10",
"prebuilt==1.0.0",
"1.0.0",
"prebuilt==0.7.0rc1",
"cli==0.4.4",
"1.0.0rc1",
"cli==0.4.3",
"0.6.9",
"checkpointpostgres==2.0.25",
"checkpoint==2.1.2",
"checkpointpostgres==2.0.24",
"0.6.8",
"sdk==0.2.9",
"0.6.7",
"sdk==0.2.8",
"sdk==0.2.7",
"cli==0.4.2",
"cli==0.4.1",
"sdk==0.2.6",
"sdk==0.2.5",
"sdk==0.2.4",
"cli==0.4.0",
"sdk==0.2.3",
"cli==0.3.8",
"cli==0.3.7",
"0.6.6",
"sdk==0.2.2",
"sdk==0.2.1",
"0.6.5",
"prebuilt==0.6.4",
"0.6.4",
"prebuilt==0.6.3",
"0.6.3",
"0.6.2",
"prebuilt==0.6.2",
"prebuilt==0.6.1",
"0.6.1",
"prebuilt==0.6.0",
"0.6.0",
"prebuilt==0.6.0a1",
"0.6.0a2",
"checkpointsqlite==2.0.11",
"sdk==0.2.0a1",
"0.6.0a1",
"cli==0.3.6",
"sdk==0.2.0",
"0.5.4",
"sdk==0.1.74",
"cli==0.3.5",
"checkpoint==2.1.1",
"checkpointpostgres==2.0.23",
"sdk==0.1.73",
"0.5.3",
"checkpointpostgres==2.0.22",
"0.5.2",
"cli==0.3.4",
"0.5.1",
"prebuilt==0.5.2",
"prebuilt==0.5.1",
"sdk==0.1.72",
"prebuilt==0.5.0",
"0.5.0",
"sdk==0.1.71",
"0.5.0rc1",
"prebuilt==0.5.0rc0",
"0.5.0rc0",
"checkpoint==2.1.0",
"cli==0.3.2",
"cli==0.3.3",
"cli==0.3.1",
"cli==0.2.12",
"cli==0.2.11",
"prebuilt==0.2.2",
"0.4.7",
"0.4.6",
"prebuilt==0.2.1",
"prebuilt==0.2.0",
"sdk==0.1.70",
"checkpointsqlite==2.0.10",
"checkpointsqlite==2.0.9",
"checkpointsqlite==2.0.8",
"0.4.5",
"checkpoint==2.0.26",
"0.4.4",
"sdk==0.1.69",
"cli==0.2.10",
"cli==0.2.9",
"0.4.3",
"0.4.2",
"checkpointsqlite==2.0.7",
"cli==0.2.8",
"sdk==0.1.66",
"sdk==0.1.65",
"0.4.1",
"sdk==0.1.64",
"0.4.0",
"checkpoint==2.0.25",
"0.3.34",
"0.3.32",
"cli==0.2.7",
"cli==0.2.6",
"sdk==0.1.63",
"sdk==0.1.62",
"checkpointpostgres==2.0.21",
"checkpointpostgres==2.0.20",
"cli==0.2.5",
"0.3.31",
"cli==0.2.4",
"0.3.30",
"0.3.29",
"cli==0.2.3",
"0.3.28",
"cli==0.2.2",
"cli==0.2.1",
"0.3.27",
"0.3.26",
"cli==0.1.89",
"0.3.25",
"prebuilt==0.1.8",
"cli==0.1.84",
"sdk==0.1.61",
"checkpoint==2.0.24",
"0.3.24",
"0.3.23",
"cli==0.1.83",
"0.3.22",
"cli==0.1.82",
"cli==0.1.81",
"sdk==0.1.60",
"0.3.21",
"prebuilt==0.1.7",
"cli==0.1.80",
"sdk==0.1.59",
"prebuilt==0.1.6",
"prebuilt==0.1.5",
"0.3.20",
"checkpoint==2.0.23",
"checkpoint==2.0.22",
"0.3.19",
"cli==0.1.79",
"prebuilt==0.1.4",
"cli==0.1.78",
"checkpointpostgres==2.0.19",
"0.3.18",
"sdk==0.1.58",
"0.3.17",
"0.3.16",
"0.3.15",
"0.3.14",
"0.3.13",
"0.3.12",
"checkpoint==2.0.21",
"checkpointpostgres==2.0.18",
"0.3.11",
"cli==0.1.77",
"checkpointpostgres==2.0.17",
"checkpoint==2.0.20",
"0.3.10",
"sdk==0.1.57",
"prebuilt==0.1.3",
"0.3.8",
"sdk==0.1.56",
"cli==0.1.76",
"checkpoint==2.0.19",
"0.3.7",
"0.3.6",
"checkpointsqlite==2.0.6",
"checkpointpostgres==2.0.16",
"checkpoint==2.0.18",
"sdk==0.1.55",
"checkpoint==2.0.17",
"cli==0.1.75",
"prebuilt==0.1.2",
"0.3.5",
"0.3.4",
"0.3.3",
"0.3.2",
"cli==0.1.74",
"0.3.1",
"prebuilt==0.1.1",
"prebuilt==0.1.0",
"0.3.0",
"0.2.76",
"0.2.75",
"cli==0.1.73",
"sdk==0.1.53",
"cli==0.1.72",
"0.2.74",
"checkpoint==2.0.16",
"checkpointsqlite==2.0.5",
"checkpointpostgres==2.0.15",
"0.2.73",
"checkpoint==2.0.15",
"checkpoint==2.0.14",
"0.2.72",
"checkpointsqlite==2.0.4",
"checkpointpostgres==2.0.14",
"checkpoint==2.0.13",
"0.2.71",
"checkpoint==2.0.12",
"cli==0.1.71",
"0.2.70",
"0.2.69",
"cli==0.1.70",
"0.2.68",
"cli==0.1.69",
"0.2.67",
"0.2.66",
"0.2.65",
"cli==0.1.68",
"0.2.64",
"0.2.63",
"checkpointpostgres==2.0.13",
"checkpointsqlite==2.0.3",
"checkpointpostgres==2.0.12",
"checkpoint==2.0.10",
"checkpointduckdb==2.0.2",
"checkpointsqlite==2.0.2",
"checkpointpostgres==2.0.11",
"cli==0.1.67",
"cli==0.1.66",
"0.2.62",
"checkpointpostgres==2.0.10",
"sdk==0.1.51",
"sdk==0.1.50",
"0.2.61",
"checkpointpostgres==2.0.9",
"cli==0.1.65",
"sdk==0.1.48",
"0.2.60",
"sdk==0.1.47",
"sdk==0.1.46",
"cli==0.1.64",
"cli==0.1.63",
"cli==0.1.62",
"sdk==0.1.45",
"checkpoint==2.0.9",
"sdk==0.1.44",
"0.2.59",
"0.2.58",
"0.2.57",
"checkpointpostgres==2.0.8",
"sdk==0.1.43",
"0.2.56",
"0.2.55",
"0.2.54",
"sdk==0.1.42",
"checkpoint==2.0.8",
"checkpointpostgres==2.0.7",
"checkpointpostgres==2.0.6",
"cli==0.1.61",
"cli==0.1.60",
"checkpointpostgres==2.0.5",
"sdk==0.1.40",
"checkpoint==2.0.7",
"sdk==0.1.39",
"sdk==0.1.38",
"sdk==0.1.37",
"checkpointpostgres==2.0.4",
"checkpoint==2.0.6",
"cli==0.1.59",
"cli==0.1.58",
"cli==0.1.57",
"cli==0.1.56",
"0.2.53",
"cli==0.1.55",
"cli==0.1.55rc1",
"0.2.52",
"0.2.51",
"checkpointpostgres==2.0.3",
"checkpoint==2.0.5",
"0.2.50",
"0.2.49",
"cli==0.1.54",
"0.2.48",
"checkpoint==2.0.4",
"sdk==0.1.36",
"0.2.47",
"checkpoint==2.0.3",
"0.2.46",
"0.2.45",
"cli==0.1.53",
"0.2.44",
"0.2.43",
"0.2.42",
"0.2.41",
"0.2.40",
"sdk==0.1.35",
"sdk==0.1.34",
"checkpointsqlite==2.0.1",
"checkpointpostgres==2.0.2",
"checkpointduckdb==2.0.1",
"checkpoint==2.0.2",
"checkpointduckdb==2.0.0",
"0.2.39",
"0.2.38",
"0.2.37",
"sdk==0.1.33",
"0.2.36",
"0.2.35",
"checkpointpostgres==2.0.1",
"checkpoint==2.0.1",
"0.2.34",
"0.2.33",
"checkpointpostgres==2.0.0",
"checkpointsqlite==2.0.0",
"0.2.32",
"checkpoint==2.0.0",
"sdk==0.1.32",
"checkpointpostgres==1.0.11",
"0.2.31",
"checkpointpostgres==1.0.10",
"0.2.30",
"checkpoint==1.0.14",
"checkpoint==1.0.13",
"0.2.29",
"checkpointpostgres==1.0.9",
"checkpoint==1.0.12",
"0.2.28",
"0.2.27",
"0.2.26",
"checkpointsqlite==1.0.4",
"checkpointpostgres==1.0.8",
"checkpoint==1.0.11",
"0.2.25",
"sdk==0.1.31",
"0.2.24",
"0.2.23",
"checkpointpostgres==1.0.7",
"checkpoint==1.0.10",
"0.2.22",
"0.2.21",
"0.2.20",
"0.2.19",
"0.2.18",
"checkpoint==1.0.9",
"0.2.17",
"checkpointsqlite==1.0.3",
"checkpointsqlite==1.0.2",
"checkpointpostgres==1.0.6",
"0.2.16",
"checkpoint==1.0.8",
"0.2.15",
"sdk==0.1.30",
"checkpointsqlite==1.0.1",
"checkpointpostgres==1.0.5",
"checkpoint==1.0.7",
"cli==0.1.52",
"checkpointpostgres==1.0.4",
"sdk==0.1.29",
"0.2.13",
"cli==0.1.51",
"0.2.12",
"checkpoint==1.0.4",
"0.2.11",
"0.2.10",
"0.2.9",
"sdk==0.1.28",
"0.2.7",
"0.2.6",
"0.2.5",
"0.2.4",
"checkpoint==1.0.3",
"checkpointpostgres==1.0.3",
"checkpointpostgres==1.0.2",
"0.2.3",
"checkpointpostgres==1.0.1",
"0.2.2",
"0.2.1",
"checkpoint==1.0.2",
"0.2.0",
"checkpointpostgres==1.0.0",
"checkpointsqlite==1.0.0",
"checkpoint==1.0.1",
"sdk==0.1.27",
"checkpoint==1.0.0",
"0.1.17",
"0.1.16",
"0.1.15",
"0.1.14",
"0.1.13",
"0.1.12",
"0.1.11",
"0.1.10",
"cli==0.1.50",
"0.1.9",
"cli==0.1.49",
"sdk==0.1.26",
"0.1.8",
"0.1.7",
"0.1.6",
"cli==0.1.48",
"0.1.5",
"cli==0.1.47",
"0.1.4",
"0.1.3",
"cli==0.1.46",
"cli==0.1.45",
"cli==0.1.45a1",
"0.1.2",
"sdk==0.1.25",
"sdk==0.1.24",
"cli==0.1.45a0",
"cli==0.1.44",
"cli==0.1.42",
"cli==0.1.41",
"cli==0.1.40",
"sdk==0.1.23",
"langgraph-cli==0.1.39",
"v0.0.8",
"v0.0.6",
"v0.0.5",
"v0.0.4",
"v0.0.3"
],
"database_specific": {
"source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2025-64439.json"
}
}
],
"modified": "2026-10-28T02:30:50.819916549Z",
"provider": "osv",
"references": [
"https://github.com/langchain-ai/langgraph/blob/c5744f583b11745cd406f3059903e17bbcdcc8ac/libs/checkpoint/langgraph/checkpoint/serde/jsonplus.py",
"https://github.com/langchain-ai/langgraph/releases/tag/checkpoint%3D%3D3.0.0",
"https://github.com/CVEProject/cvelistV5/tree/main/cves/2025/64xxx/CVE-2025-64439.json",
"https://github.com/langchain-ai/langgraph/security/advisories/GHSA-wwqv-p2pp-99h5",
"https://nvd.nist.gov/vuln/detail/CVE-2025-64439",
"https://github.com/langchain-ai/langgraph/commit/c5744f583b11745cd406f3059903e17bbcdcc8ac"
],
"provider_metadata": {
"cwe_ids": [
"CWE-502"
],
"cna_assigner": "GitHub_M",
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2025/64xxx/CVE-2025-64439.json"
}
},
"related_cves": [
{
"value": "CVE-2025-64439",
"evidence": "/id"
}
],
"security_relevant": true,
"severity_evidence": "/severity/0/score"
},
"source_id": "core-osv",
"document_id": 519306,
"published_at": "2025-11-07T20:15:21.71+00:00"
}