/

CVE-2026-96560

Severity:

CRITICAL RISK

(9.8)

Unsafe Deserialization (CWE-502) in LightLLM RPyC Service

CVE-2026-96560

Deferred

Vulnerability type

Category:

Unsafe Deserialization

CWE:

CWE-502

Impact:

Remote Code Execution

Severity:

CRITICAL RISK

(9.8)

CVSS version:

3.1

Catch this CVE while code is being written

Detect vulnerable code directly in pull requests, so CVEs are fixed before merge.

Summary

LightLLM can expose an unauthenticated RPyC control channel when its KV-transfer worker uses the --pd_trans_mode nccl setting. Because attacker-controlled data is deserialized through this channel, a reachable service may allow arbitrary code execution with the privileges of the LightLLM service account.

Affected context

The vulnerability occurs in LightLLM deployments that start the KV-transfer worker with

--pd_trans_mode nccl and expose the associated RPyC ThreadedServer to an attacker.

Risk is highest when the control channel is reachable without authentication or network

restrictions and the service account has access to sensitive files, workloads, or

infrastructure resources.

Exploit preconditions

  • Attack surface: Network-accessible RPyC control channel exposed by the KV-transfer worker
  • Required access: Network reachability to the unauthenticated service; no application authentication is required
  • Trigger point: Processing attacker-supplied data through the RPyC channel
  • Why exploitation is possible: The channel deserializes untrusted serialized objects, allowing object behavior to run with the LightLLM service account's privileges

Why this happens

The underlying flaw is the use of a general-purpose serialization mechanism on an

unauthenticated control channel. Python object deserialization can reconstruct attacker-

controlled object graphs and invoke behavior during that process, rather than treating

the input as inert data. This maps to CWE-502: Deserialization of Untrusted Data.

Potential impact

  • An attacker may execute arbitrary code in the LightLLM process environment.
  • The attacker could access data available to the service account.
  • The compromised service may be used for lateral movement or workload interference.
  • Model-serving operations could be disrupted or manipulated.
  • Host or cluster compromise could occur if excessive privileges are available.

General mitigation guidance

Mitigation generally centers on removing unsafe deserialization from network-facing

control paths and reducing trust in serialized input.

Common defensive patterns include:

  • Prefer data-only, schema-constrained formats and restricted parsers over executable object deserialization.
  • Require strong authentication and authorization for administrative or worker-control channels.
  • Restrict RPyC and similar management endpoints to explicitly trusted network segments.
  • Apply network policies, firewall controls, and service isolation to limit reachability.
  • Run LightLLM with a dedicated least-privilege service account and minimal filesystem, container, and cluster permissions.
  • Disable unnecessary KV-transfer modes or control interfaces when they are not required.
  • Treat serialized data received over a network as untrusted regardless of its source.

How teams detect issues like this

Detection can combine source review, deployment inspection, and runtime monitoring:

  • Use static analysis rules to identify unsafe pickle or general-purpose deserialization in network-facing code.
  • Review RPyC server creation, listener binding, authentication, and authorization controls.
  • Inspect deployment configurations for --pd_trans_mode nccl and externally reachable worker endpoints.
  • Enforce policies requiring authentication and network restrictions for control-plane services.
  • Monitor unexpected connections to RPyC ports and anomalous child processes spawned by the LightLLM service.
  • Use automated code and configuration review tools to flag unsafe deserialization and excessive service privileges.

Sources

SourceLink
github.comgithub.com/ModelTC/LightLLM/issues/1590
github.comgithub.com/ModelTC/lightllm
github.comgithub.com/ModelTC/lightllm/blob/v1.2.0/lightllm/server/router/model_infer/mode_backend/pd/kv_transporter.py#L20-L36
github.comgithub.com/ModelTC/lightllm/blob/v1.2.0/lightllm/server/router/model_infer/mode_backend/pd/nccl_kv_transporter.py#L247-L249
github.comgithub.com/ModelTC/lightllm/blob/v1.2.0/lightllm/server/router/model_infer/mode_backend/pd/nccl_kv_transporter.py#L411-L415
github.comgithub.com/ModelTC/lightllm/blob/v1.2.0/lightllm/server/router/model_infer/mode_backend/pd/nccl_kv_transporter.py#L437-L461
vulncheck.comvulncheck.com/advisories/lightllm-through-1.2.0-unauthenticated-remote-code-execution-via-nccl-pd-rpyc-control-channel

Frequently asked

questions

Yes, when the vulnerable RPyC control channel is network-reachable and exposed without

authentication. Exploitability depends on deployment networking and endpoint exposure.

Not necessarily. The described channel is unauthenticated, so network access to the

exposed service may be sufficient.

Avoid general-purpose object deserialization for network input and replace it with

authenticated, authorization-checked, data-only protocols using strict schemas.

Keep worker control channels on private networks, enforce least privilege, review

serialization APIs during code review, and continuously monitor endpoint exposure and

unexpected process activity.

Find out what's already
exploitable in your codebase.