fix(multinode): use JSON instead of pickle for node-IP exchange to prevent RCE - #1419
Open
Anai-Guo wants to merge 1 commit into
Open
fix(multinode): use JSON instead of pickle for node-IP exchange to prevent RCE#1419Anai-Guo wants to merge 1 commit into
Anai-Guo wants to merge 1 commit into
Conversation
…event RCE send_and_receive_node_ip() bound a ZMQ PULL socket on tcp://*:PORT (all interfaces) on the head node and read peer data with recv_pyobj(), which calls pickle.loads() on the wire bytes. Any host able to reach the port could send a crafted pickle payload and achieve arbitrary code execution on the head node, the same class of issue as CVE-2025-32444 in vLLM. The only value exchanged is the child node's IP string, which is fully JSON-serializable, so switch the send/recv pair to send_json/recv_json. This removes the pickle deserialization sink without changing behavior. Closes ModelTC#1413
Contributor
|
Caution The consumer version of Gemini Code Assist on GitHub has been sunset. All code review activity has officially ceased. |
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.
Summary
send_and_receive_node_ip()binds a ZMQPULLsocket ontcp://*:{port}(all interfaces,0.0.0.0) on the head node during multinode startup and reads peer data withrecv_pyobj(), which ispickle.loads()on the raw socket bytes. Any host that can reach the port can send a crafted pickle payload and achieve arbitrary code execution on the head node — the same class of issue as CVE-2025-32444 in vLLM. Closes #1413.Fix
The only value exchanged is the child node's IP string, which is fully JSON-serializable, so this switches the
send_pyobj/recv_pyobjpair tosend_json/recv_json. This removes the pickle deserialization sink at the network boundary with no behavioral change (a string round-trips identically through JSON).Note on the diff base
My fork's
maintrailed upstream and I don't hold theworkflowOAuth scope, so I couldn't rebase this branch directly onto the currentmaintip (upstream has since refactored the surroundingbase_portlines in this same function). GitHub may therefore flag a small merge conflict confined to the two adjacent lines — it resolves trivially by keeping upstream'sbase_portlines and applying only therecv_json/send_jsonchange. Happy to hand the patch over in whatever form is easiest, or a maintainer can cherry-pick the two-line change onto tip.🤖 Generated with Claude Code