Strona główna / Blog / LightLLM: RPyC + pickle → RCE

Blog · case study

LightLLM CVE-2026-103040 i 103041: RPyC + pickle w dwóch usługach pomocniczych = zdalne RCE

LightLLM pokazuje klasyczny problem, którego skaner nie rozwiąże samym numerem CVE. W CVE-2026-103040 usługa profilera uruchomiona z --enable_profiling wystawia nieuwierzytelniony serwer RPyC z deserializacją pickle. CVE-2026-103041 dotyczy tego samego wzorca w embed cache wdrożeń multimodalnych. W obu przypadkach „lokalna usługa techniczna” okazuje się interfejsem osiągalnym z sieci.

CVE-2026-103040 (CVSS v4 9.3): router profiler przy --enable_profiling → nieuwierzytelniony RPyC z pickle → spreparowany obiekt w kolejce poleceń profilera → RCE na hoście.
CVE-2026-103041 (CVSS v4 9.3): embed cache we wdrożeniach multimodalnych → nieuwierzytelniony RPyC z pickle na wszystkich interfejsach → RCE z prawami usługi.
Poprawka: commit 65c174ee (wersje do 1.2.0 podatne). Numer wersji nie powie Ci, czy masz poprawkę.

Attack path

network access to RPyC port (profiler or embed cache) -> unauthenticated RPyC service -> attacker-crafted serialized object -> pickle deserialization -> code execution with service privileges

Co jest naprawdę podatne

Nie wystarczy znaleźć LightLLM w SBOM. Trzeba ustalić wersję, sposób uruchomienia, obecność profilera (--enable_profiling) lub multimodalnego embed cache, interfejs nasłuchu oraz realną osiągalność portu z innych stref. Instancja z wyłączonym profilerem i wdrożeniem tekstowym może nie uruchamiać żadnej z tych usług. Finding powinien więc mieć postać funkcja + konfiguracja + osiągalność — to oddziela „component present” od rzeczywistej ścieżki ataku. Ten sam wzorzec opisywałem przy SGLang.

Dlaczego CVSS nie wystarcza

Oba CVE mają ocenę krytyczną, ale priorytet środowiskowy zależy od ekspozycji RPyC. Instancja odizolowana sieciowo i instancja osiągalna z sieci użytkowników to dwa zupełnie różne findingi.

Remediation

Najpierw ogranicz ekspozycję usług RPyC (bind na loopback, firewall) i wyłącz zbędne funkcje, zwłaszcza profiler na produkcji. Następnie wdróż poprawkę z commita 65c174ee. Po zmianie zweryfikuj porty nasłuchujące i ścieżki sieciowe zamiast zamykać ticket na podstawie numeru pakietu. Jeśli port był osiągalny z niezaufanej sieci, przejrzyj host lub kontener pod kątem śladów wykonania kodu.

Powiązane na blogu

Źródła

  • OSV — CVE-2026-103040 (router profiler RPyC) — osv.dev
  • OSV — CVE-2026-103041 (embed cache RPyC) — osv.dev
  • VulnCheck — LightLLM through 1.2.0 unauthenticated RCE via embed cache RPyC service — vulncheck.com

Nota redakcyjna: stan informacji 6 października 2026, na podstawie draftu VMRT i publicznych advisory (OSV, VulnCheck). CVE-2026-103040 i CVE-2026-103041 (LightLLM do 1.2.0, CVSS v4 9.3 każdy); poprawka w commicie 65c174ee. Artykuł nie potwierdza aktywnej eksploatacji.

Zapamiętaj jedno

Finding powinien zawierać warunek exploitable: funkcja + konfiguracja + osiągalność. Dwie usługi pomocnicze LightLLM z RPyC i pickle to RCE tylko tam, gdzie działają i są osiągalne — ale tam, gdzie tak jest, to pełne przejęcie hosta.