CVE-2026-3059
Remote Code Execution in SGLang Multimodal Module via ZMQ Deserialization
Publication date: 2026-03-12
Last updated on: 2026-04-07
Assigner: CERT/CC
Description
Description
CVSS Scores
EPSS Scores
| Probability: | |
| Percentile: |
Meta Information
Affected Vendors & Products
| Vendor | Product | Version / Range |
|---|---|---|
| lmsys | sglang | From 0.5.5 (inc) to 0.5.9 (inc) |
Helpful Resources
Exploitability
| CWE ID | Description |
|---|---|
| CWE-502 | The product deserializes untrusted data without sufficiently ensuring that the resulting data will be valid. |
Attack-Flow Graph
AI Powered Q&A
Can you explain this vulnerability to me?
[{'type': 'paragraph', 'content': "CVE-2026-3059 is a critical remote code execution (RCE) vulnerability in the SGLang multimodal generation module. The vulnerability arises because the ZeroMQ (ZMQ) broker component deserializes untrusted network data using Python's pickle.loads() function without any authentication or validation."}, {'type': 'paragraph', 'content': 'Since pickle.loads() can execute arbitrary code embedded in the serialized data, an attacker who can send data to the ZMQ broker can craft a malicious pickle payload that executes arbitrary commands on the server running SGLang. The broker listens on all network interfaces by default, exposing it to remote unauthenticated attackers.'}] [2]
How can this vulnerability impact me? :
This vulnerability allows an unauthenticated remote attacker to execute arbitrary code on the server running the SGLang multimodal generation module. This means the attacker can run any commands with the same privileges as the SGLang process, potentially leading to full system compromise.
- Remote code execution without any credentials or user interaction.
- Potential takeover of the server, including data theft, service disruption, or further network attacks.
- Exploitation can be triggered with a single malicious ZMQ request containing a crafted pickle payload.
How does this vulnerability affect compliance with common standards and regulations (like GDPR, HIPAA)?:
I don't know
How can this vulnerability be detected on my network or system? Can you suggest some commands?
This vulnerability can be detected by identifying if the SGLang multimodal generation ZMQ broker is running and listening on network interfaces, especially if it is bound to all interfaces (tcp://*). Since the broker listens on a TCP port (default HTTP port + 1) without authentication and deserializes incoming data using pickle.loads(), network scanning tools can be used to detect open ZMQ REP sockets on the expected port.
A practical detection method is to scan your network for open TCP ports where the ZMQ broker might be listening. For example, using nmap:
- nmap -p <broker_port> -sV <target_ip>
Additionally, you can attempt to connect to the ZMQ broker using a ZeroMQ REQ socket and send a ping message to check if the service responds, as the SchedulerClient code includes a ping() method for availability checking.
If you have access to the system running SGLang, you can check for running processes or services related to the multimodal generation server and inspect if the ZMQ broker is bound to all interfaces (0.0.0.0 or tcp://*). For example, using netstat or ss:
- netstat -tulnp | grep <broker_port>
- ss -tulnp | grep <broker_port>
These commands help verify if the vulnerable broker is exposed on the network.
What immediate steps should I take to mitigate this vulnerability?
Immediate mitigation steps focus on reducing network exposure and avoiding unsafe deserialization of untrusted data.
- Restrict the ZMQ broker to bind only to localhost (127.0.0.1) instead of all network interfaces. This prevents remote attackers from accessing the vulnerable service.
- If possible, apply the proposed patch that modifies the broker binding and introduces a safer serialization wrapper that prefers msgpack over pickle, reducing the risk of arbitrary code execution.
- Use network-level controls such as firewall rules to block external access to the broker port.
- Avoid using or exposing the vulnerable versions of SGLang (β₯ 0.5.5 through 0.5.9) until an official patch is released.
These steps help prevent exploitation by limiting access and encouraging safer serialization practices.