/

CVE-2026-103395

Severity:

CRITICAL RISK

(9.8)

Unsafe Deserialization (CWE-502) in LightLLM RPyC Service

CVE-2026-103395

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

A critical unsafe deserialization vulnerability in LightLLM visual_only deployments exposes an unauthenticated RPyC service that accepts attacker-controlled serialized arguments. An attacker who can reach the visual RPyC port may execute arbitrary code with the privileges of the service account.

Affected context

The vulnerability occurs in LightLLM visual_only deployments where:

  • An RPyC service is exposed on a reachable network port
  • The service permits unauthenticated connections
  • Pickle-based argument handling is enabled
  • The remote_infer_images method deserializes caller-supplied objects

Exposure depends on network configuration, service binding, and whether access controls restrict the RPyC endpoint.

Exploit preconditions

  • Attack surface: Network-accessible RPyC service
  • Required access: Ability to connect to the exposed visual RPyC port; authentication is not required by the vulnerable configuration
  • Trigger point: Processing attacker-controlled arguments passed to remote_infer_images
  • Why exploitation is possible: Pickle-enabled deserialization can invoke behavior defined by serialized objects before normal application-level validation is complete

Why this happens

The underlying bug is the use of unsafe, pickle-based deserialization for data received through an unauthenticated remote procedure call interface. Pickle can reconstruct objects using attacker-influenced reduction behavior, causing deserialization to perform operations beyond passive data parsing. This maps to CWE-502: Deserialization of Untrusted Data, because network-supplied content is treated as trusted executable object state.

Potential impact

  • An attacker may execute arbitrary code in the LightLLM service process
  • The attacker could access data and resources available to the service account
  • The deployment may be used for unauthorized inference activity or data manipulation
  • Compromised credentials or accessible network paths could enable lateral movement
  • The host or surrounding workload could be affected depending on isolation and privileges

General mitigation guidance

Mitigation generally focuses on removing executable deserialization from network-facing interfaces and reducing trust in remote callers.

Common defensive patterns include:

  • Replacing pickle-based transport or argument handling with a restricted, data-only serialization format
  • Disabling object reconstruction and unsafe deserialization features such as unrestricted pickle handling
  • Requiring authentication and authorization for RPyC services
  • Binding administrative or internal RPC endpoints to restricted interfaces and enforcing network policy
  • Validating arguments against strict schemas after parsing with non-executable formats
  • Running the service with a dedicated, least-privileged account and strong process isolation
  • Limiting filesystem, credential, and network access available to the service

How teams detect issues like this

Detection can combine code analysis, deployment review, and runtime monitoring:

  • Search source and dependencies for pickle-enabled RPC configuration, unrestricted deserialization, and dynamic object reconstruction
  • Review RPC methods that accept serialized objects or generic arguments from remote clients
  • Check whether visual inference services expose RPyC ports without authentication or network restrictions
  • Enforce policies that prohibit executable serialization on network-facing endpoints
  • Monitor for unexpected connections to the RPyC port, anomalous method calls, child-process creation, and service-account activity outside expected inference behavior
  • Use automated static analysis and dependency review tools to flag unsafe deserialization patterns

Sources

SourceLink
github.comgithub.com/ModelTC/LightLLM
github.comgithub.com/ModelTC/LightLLM/issues/1610
github.comgithub.com/ModelTC/lightllm/blob/v1.2.0/lightllm/server/visualserver/objs.py#L6-L11
github.comgithub.com/ModelTC/lightllm/blob/v1.2.0/lightllm/server/visualserver/visual_only_manager.py#L138-L140
vulncheck.comvulncheck.com/advisories/lightllm-through-1.2.0-unauthenticated-remote-code-execution-via-visual-only-rpyc-service

Frequently asked

questions

Yes. An attacker who can reach the exposed visual RPyC port may exploit the service remotely, and the described configuration does not require authentication.

The attacker needs network connectivity to the vulnerable RPyC endpoint. They do not need valid application credentials when the service is exposed without authentication.

The safest pattern is to eliminate unsafe object deserialization from the RPC boundary, use a restricted data-only format, and protect any remaining service endpoint with authentication, authorization, and network controls.

Treat all remote serialized data as untrusted, prohibit executable serialization formats at trust boundaries, validate inputs against explicit schemas, and run inference services with minimal privileges and restricted connectivity.

Find out what's already
exploitable in your codebase.