chore(deps): update dependency langgraph to v1 [security]#3
Open
renovate[bot] wants to merge 1 commit intomainfrom
Open
chore(deps): update dependency langgraph to v1 [security]#3renovate[bot] wants to merge 1 commit intomainfrom
renovate[bot] wants to merge 1 commit intomainfrom
Conversation
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
0.3.31→1.0.10LangGraph checkpoint loading has unsafe msgpack deserialization
CVE-2026-28277 / GHSA-g48c-2wqr-h844
More information
Details
LangGraph checkpointers can load msgpack-encoded checkpoints that reconstruct Python objects during deserialization. If an attacker can modify checkpoint data in the backing store (for example, after a database compromise or other privileged write access to the persistence layer), they can potentially supply a crafted payload that triggers unsafe object reconstruction when the checkpoint is loaded.
This is a post-exploitation / defense-in-depth issue. Exploitation requires the ability to write attacker-controlled checkpoint bytes at rest. In most deployments that prerequisite already implies a serious incident; the additional risk is turning “checkpoint-store write access” into code execution in the application runtime, which can expand blast radius (for example by exposing environment variables or cloud credentials available to the runtime).
There is no evidence of exploitation in the wild, and LangGraph is not aware of a practical exploitation path in existing deployments today. This change is intended to reduce the blast radius of a checkpoint-store compromise.
Affected users / systems
Users may be affected if they:
This issue requires the attacker to be able to modify persisted checkpoint bytes (or to compromise a trusted component that writes them). It is generally not reachable by an unauthenticated remote attacker in a correctly configured deployment.
Impact
Exploitation scenario (high level)
Mitigation / remediation
LangGraph provides an allowlist-based hardening mechanism for msgpack checkpoint deserialization.
Strict mode (environment variable)
LANGGRAPH_STRICT_MSGPACK1,true,yes), the default msgpack deserialization policy becomes strict.JsonPlusSerializer()will defaultallowed_msgpack_modulestoNone(strict) instead ofTrue(warn-and-allow), unlessallowed_msgpack_modules=...is explicitly passed.allowed_msgpack_modules(serializer/checkpointer config)This setting controls what msgpack “ext” types are allowed to be reconstructed.
True(default when strict mode is not enabled): allow all ext types, but log a warning when deserializing a type that is not explicitly registered.None(strict): only a built-in safe set is reconstructed; other ext types are blocked.[(module, class_name), ...](strict allowlist): the built-in safe set plus exactly the listed symbols are reconstructed (exact-match).Built-in safe set
A small set of types is always treated as safe to reconstruct (for example
datetimetypes,uuid.UUID,decimal.Decimal,set/frozenset/deque,ipaddresstypes,pathlibpaths,zoneinfo.ZoneInfo, compiled regex patterns, and selected LangGraph internal types).Automatically derived allowlist (only when compiling graphs)
When
LANGGRAPH_STRICT_MSGPACKis enabled andStateGraphis compiled, LangGraph derives an allowlist from the graph’s schemas and channels and applies it to the checkpointer.Annotated).This derived allowlist is only applied if the selected checkpointer supports
with_allowlist(...). If a user is constructing serializers/checkpointers manually (or using a checkpointer that does not support allowlist propagation), they will need to configureallowed_msgpack_modulesthemselves.Operational guidance
LANGGRAPH_STRICT_MSGPACK=true) in production if feasible, and rely on schema-driven allowlisting to reduce incompatibilities.Limitations / important notes
with_allowlist), allowlist enforcement may be skipped (with a warning). In that situation, strict expectations may not hold.ext_hook), the custom hook controls reconstruction and can bypass the default allowlist checks (intentional escape hatch, but it weakens the protection).LangSmith / hosted deployments note
LangSmith is not aware of this issue presenting risk to existing LangSmith-hosted deployments. The described threat model requires an attacker to tamper with the checkpoint persistence layer used by the deployment; typical hosted configurations are designed to prevent such access.
First reported by: yardenporat353
Severity
CVSS:3.1/AV:A/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:HReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Release Notes
langchain-ai/langgraph (langgraph)
v1.0.10: langgraph==1.0.10Compare Source
Changes since 1.0.10rc1
v1.0.9: langgraph==1.0.9Compare Source
Changes since 1.0.8
v1.0.8: langgraph==1.0.8Compare Source
Changes since 1.0.7
RuntimeandToolRuntimeclass descriptions for clarity (#6689)thread_id(#6515)add_nodeoverloads (#6514)v1.0.7: langgraph==1.0.7Compare Source
Changes since 1.0.6
uv lock --upgrade(#6671)v1.0.6: langgraph==1.0.6Compare Source
Changes since 1.0.5
v1.0.5: langgraph==1.0.5Compare Source
Changes since 1.0.4
v1.0.4Compare Source
Changes since 1.0.3
v1.0.3Compare Source
Changes since 1.0.2
StateGraphis a builder class (#6417)PartialStaterendering in MkDocs (#6416)invokeandainvokedocstrings (#6415)streamandastreamdocstrings (#6414)StateGraph(#6308)pyproject.tomllinks (#6364)v1.0.2Compare Source
Changes since 0.6.11
python.langchainlinks with newdocs.langchain(#6352)v1.0.1Compare Source
Changes since 1.0.0
v1.0.0Compare Source
Changes since 1.0.0rc1
v0.6.11Compare Source
Changes since 0.6.10
v0.6.10Compare Source
Changes since 0.6.9
v0.6.9Compare Source
Changes since 1.0.0a4
v0.6.8Compare Source
Changes since 1.0.0a3
BaseChanneldetection (#6210)CheckpointTask.statecan be aStateSnapshot(#6201)AsyncPregelLoop(#6167)defer=True(#6130)RemoteGraph(#6140)get_graphgenerates unexpected conditional edge (#6122)v0.6.7Compare Source
Changes since 1.0.0a2
v0.6.6Compare Source
Changes since 0.6.5
v0.6.5Compare Source
Changes since 0.6.4
v0.6.4Compare Source
Changes since 0.6.3
updated_channelsto checkpoint (#5828)MessageGraph(#5843)v0.6.3Compare Source
Changes since 0.6.2
AgentState(#5801)configparam (#5798)invokeandainvoke(#5771)v0.6.2Compare Source
Changes since 0.6.1
context_schematoconfig_schemawith correct condition (#5746)v0.6.1Compare Source
Changes since 0.6.0
v0.6.0Compare Source
LangGraph v0.6
We’re excited to announce the release of LangGraph v0.6.0, another significant step toward our v1.0 milestone. This release emphasizes providing a cleaner, more intuitive developer experience for building agentic workflows. Below we’ll cover the headline improvements and minor changes.
🚀 New Context API: Simplified Runtime Context Injection
The biggest improvement in v0.6 is the introduction of the new Context API, which makes it easier to pass run-scoped context in an intuitive and type safe way.
This pattern replaces the previously recommended pattern of injecting run-scoped context into
config['configurable'].Before (v0.5):
After (v0.6):
The
Runtimeclass provides a single interface for accessing information like:previousis also available: the previous return value for the given threadNow, instead of injecting all of the above as separate parameters to node functions,
developers can access them all through a single
runtimeparameter.Migration Path
config_schemais deprecated in favor ofcontext_schema, and will be removed in v2.0.0config_schemaget_config_jsonschemais deprecated in favor ofget_context_jsonschema(though this is generally only used for graph introspection and not by most langgraph users)🔀 Dynamic model & tool selection
create_react_agentcan now dynamically choose both the model and tools at runtime using a custom context object:Then invoke the agent with your desired settings:
Now agents can flexibly adapt their behavior based on runtime context.
🏗️ Durability Mode Support
LangGraph v0.6 introduces a new
durability****argument that gives you fine-grained control over persistence behavior. This provides finer grained control than its predecessor,checkpoint_during.This was predated
"exit"- Save checkpoint only when the graph exitscheckpoint_during=False"async"- Save checkpoint asynchronously while next step executescheckpoint_during=True"sync"- Save checkpoint synchronously before next stepMigration Path
checkpoint_duringis now deprecated in favor of the newdurabilityargument. Backwards compatibility will be maintained until v2.0.0.🛡️ Enhanced Type Safety and Validation
In an effort to make graph building easier for developers, we’ve enhanced the type safety of the
LangGraph APIs.
LangGraph’s
StateGraphandPregelinterfaces are now generic over a graph’s:state_schemacontext_schemainput_schemaoutput_schemaThis means that:
invoke/streamis type checked against the relevant schemacontextavailable via the aforementionedRuntimeclass matches thecontext_schema🔧 A Refined
InterruptInterfaceIn preparation for v1.0, we’ve made a few changes to the
Interruptinterface.Interrupts now have two attributes:
id- a unique identifier for the interruptvalue- the interrupt valueIn v0.6, we’ve removed the following attributes from the
Interruptclass:when- this was always"during"and offered no practical valueresumable- functionally, this is alwaysTruens- this information is now stored in a condensed format in theidattributeinterrupt_idhas been deprecated in favor ofid, but is still usable for backward compatibility🔒 Solidified Public API Surface
Gearing up for v1.0, we’ve solidified what’s public vs. private in the LangGraph API.
We’ve also deprecated some old import paths that have supported backports for ~1 year.
These changes make it easier to maintain a higher quality public API
and reduce the surface area for potential breaking changes.
The following table summarizes the changes:
from langgraph.pregel.types import ...from langgraph.types import ...from langgraph.constants import Sendfrom langgraph.types import Sendfrom langgraph.constants import Interruptfrom langgraph.types import Interruptfrom langgraph.channels import <ErrorClass>from langgraph.errors import <ErrorClass>langgraph.errorsfrom langgraph.constants import TAG_NOSTREAM_ALTfrom langgraph.constants import NOSTREAM🎯 Looking Toward v1.0
LangGraph v0.6 represents our final major changes before the stable v1.0 release.
We anticipate adhering strictly to SemVer post v1.0, leaning into a promise of stability and predictability.
Get Involved
LangGraph is an open source project, and we’d love to hear from you! We’ve rolled out a new LangChain forum for questions, feature requests, and discussions.
Please let us know what you think about the new Runtime API and other changes in v0.6, and if you have any difficulties with which we can help.
Full Changelog
contextAPI (#5566)Runtimeinterface re patch/overrides (#5546)constants.py->_internal/_typing.py(#5518)config['configurable']andconfig_schema) (#5243)nodesignatures vsinput_schemaforadd_node(#5424)Interruptinterface for v1 (#5405)v0.5.4Compare Source
Changes since 0.5.3
ENDwithCommand(#5601)stacklevel=2to the warnings to point to the caller’s codes (#5457)v0.5.3Compare Source
Changes since 0.5.2
uv lock --upgrade(#5471)ABCspec forPregelProtocol(#5485)v0.5.2Compare Source
Changes since 0.5.1
invoke/streamto allow forCommandandNone(#5414)v0.5.1Compare Source
Changes since 0.5.0
v0.5.0Compare Source
LangGraph 0.5 – the “Getting-Ready-for-1.0” release 🎉
TL;DR – 0.5 is not a radical rewrite, but a scrub-down and tune-up of the LangGraph core.
APIs are a little stricter, you have more control over streaming, checkpoints are lighter, etc. 99 % of users can upgrade with nothing more than a
pip install --upgrade langgraph==0.5.*.Why 0.5?
The team’s next big milestone is a 1.0 release in a few months.
To get there we needed to:
0.5 is that housekeeping release.
Headline changes
1. A leaner, stricter StateGraph
state_schemais now mandatory.“Untyped” graphs were never shown in the docs and produced surprising runtime errors. Requiring an explicit schema fixes that class of bugs and improves static analysis.
input/output→input_schema/output_schemaThe old names still work but raise a deprecation warning.
New
NodeBuilderutilityA simpler, declarative way to create nodes and attach them to channels. The old
Channel.subscribe_tohelper keeps working but will be removed in 1.0.2. Smarter streaming modes
stream_mode="debug"is now an alias for the pair["tasks", "checkpoints"]. You can now turn them on individually:This makes it cheaper to subscribe only to the information you need.
3. Checkpointing overhaul
Redundant keys have been dropped and per-task writes are stored directly.
Legacy “pending _sends” data is auto-migrated the first time it is loaded. Custom checkpointers continue to work unchanged.
4. Better serialization
JsonPlusSerializernow handles NumPy arrays stored in your state (including Fortran-ordered ones) without falling back topickle.Minor breaking changes you might notice
state_schemarequired – add it if you were passing only input and output schemas instead (very rare).input/outputrenaming – rename toinput_schema/output_schema.PregelNodeandRunnable, drop the latter.Nothing else should require code changes.
How to upgrade
pip install -U "langgraph>=0.5"If you maintain a plugin / custom checkpointer, run your test suite once; the public interfaces are untouched.
What’s next?
We’re hard at work on LangGraph 1.0, chime in here with any comments, feedback or questions, we want to hear from everyone.
Detailed Changelog
MessageGraph(#4875)"outputusage in favor ofoutput_schema(#5095)PregelNode's inheritance fromRunnable(#5093)inputandoutputin favor ofinput_schemaandoutput_schema(#4983)pep 604union syntax andpep 585generic syntax (#4963)StateGraph(dict)(#4964)retry->retry_policy(#4957)initandinvoke/stream(#4932)state_schemainStateGraph.__init__(#4897)MessageGraph(#4875)v0.4.10Compare Source
Changes since 0.4.9
MessageGraph(#4875)"outputusage in favor ofoutput_schema(#5095)PregelNode's inheritance fromRunnable(#5093)inputandoutputin favor ofinput_schemaandoutput_schema(#4983)pep 604union syntax andpep 585generic syntax (#4963)StateGraph(dict)(#4964)retry->retry_policy(#4957)Configuration
📅 Schedule: Branch creation - "" (UTC), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.