Repository navigation
This patch release delivers the xparl security fix merged in #1176 by @ZeyuChen and addresses the unauthenticated deserialization risk reported in #1174.
Security fix
An untrusted peer that could reach unpatched xparl endpoints could submit malicious cloudpickle data and execute Python code on cluster hosts. The master deserialized control metadata before authentication, and worker/job execution sockets did not enforce an authentication boundary.
- Replace executable control/status metadata deserialization with a data-only JSON codec, explicit record/type validation, size/depth limits, and malformed-message rejection.
- Require CURVE authentication and encryption on every xparl ZeroMQ connection, including worker/job execution sockets. Unauthorized client keys are rejected; there is no unauthenticated fallback.
- Require credentials for HTTP monitor/log endpoints and bind the master control and HTTP listeners to
127.0.0.1by default.
Required upgrade steps
Upgrade and restart all masters, workers, jobs, and clients together. The new JSON/CURVE protocol is incompatible with older processes.
-
Stop the old cluster and install this tag on every node/client:
python -m pip install --upgrade "git+https://github.com/PaddlePaddle/PARL.git@v2.2.2" -
Configure the same fresh, cryptographically random
XPARL_AUTH_TOKENof at least 32 bytes on every node/client before startup. Missing/short secrets or unavailable CURVE support cause startup to fail. -
For multi-machine operation, set
XPARL_BIND_HOSTto the appropriate private interface and restrict all cluster ports, including dynamic worker/job and heartbeat ports, to trusted hosts. -
Restart the cluster. HTTP monitoring/log access uses Basic authentication: username
xparl, password the cluster secret. Use an SSH tunnel or HTTPS reverse proxy for remote HTTP access.
Possession of the cluster secret still authorizes Python execution on workers. Heartbeat gRPC ports still require network isolation. See the security and upgrade guide.
Package availability: At publication, PyPI's latest release is still 2.2.1 and does not contain this fix. This GitHub source release does not update PyPI; use the tagged-source command above.
Validation
The security fix passed 14 regression tests on both Python 3.9 and 3.10 with pyzmq 22.3.0, covering unauthorized connections, malicious pickle metadata, malformed messages, HTTP authentication, and configuration defaults (CI results).
This release also includes accumulated compatibility fixes, installation documentation, and the Waymax RL example since the previous GitHub release.
Full changelog: v2.2...v2.2.2