Fix path-traversal vulnerability in emergency P2P checkpoint service#3105
Open
YuvalElbar6 wants to merge 1 commit intogoogle:mainfrom
Open
Fix path-traversal vulnerability in emergency P2P checkpoint service#3105YuvalElbar6 wants to merge 1 commit intogoogle:mainfrom
YuvalElbar6 wants to merge 1 commit intogoogle:mainfrom
Conversation
|
Hi, thanks for your contribution! Since Orbax runs on top of JAX, and JAX's coordination service doesn't enforce strong authentication, the Orbax runtime generally assumes it's operating in a secure network environment. In practice, if there were a "compromised peer," we would already be facing much larger systemic risks. That said, we always welcome security enhancements. Could you please clean up the empty commits in the PR so we can get it merged? |
A malicious or compromised peer on the P2P network could supply a
manifest whose rel_path contained '..' segments or an absolute path,
causing P2PNode.fetch_shard_from_peer() to write attacker-controlled
bytes outside the staging directory (e.g. a .pth file in site-packages,
yielding persistent RCE on the training host).
- Add _safe_path_join() which joins a peer-supplied relative path onto
a base directory only if the resolved result stays inside that base.
Resolution goes through os.path.realpath so symlink-escape attempts
are caught as well.
- Apply the helper on both sides of the wire:
* Client: fetch_shard_from_peer() validates every manifest entry
against stage_dir and aborts the whole fetch on any unsafe entry.
* Server: handle_download() replaces the substring '..' check with
the same resolve-based containment check against self.directory.
- Log every rejection with peer and request context.
- Add regression tests for the helper and both call sites.
Reported via the Google OSS VRP.
Author
|
Thanks for the context on the threat model — agreed it's a defense-in-depth hardening rather than a critical fix. I've cleaned up the merge commits; the PR is now a single commit on top of main. |
Author
|
Hi @orbax-dev, @linxiulei this PR is now one commit can we merge it? |
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.
A malicious or compromised peer on the P2P network could supply a manifest whose rel_path contained '..' segments or an absolute path, causing P2PNode.fetch_shard_from_peer() to write attacker-controlled bytes outside the staging directory (e.g. a .pth file in site-packages, yielding persistent RCE on the training host).
Reported via the Google OSS VRP.