Hopp til hovedinnhold
PULSEN_
ESC Tilbake til strømmen
CyberPress · 29.4., 16:08 · sikkerhet

CVE-2026-25874: kritisk RCE i Hugging Face LeRobot uten autentisering

SYNOPSIS_GENERERT

Hugging Face LeRobot, robotikkrammeverket med 21 500+ GitHub-stjerner, har en CVSS 9.8-sårbarhet der pickle.loads() i gRPC-tjeneren PolicyServer lar uautentiserte angripere kjøre vilkårlig kode.

CyberPress meldte 29. april om CVE-2026-25874, en RCE-sårbarhet med CVSS-score 9.8 i Hugging Face LeRobot. Feilen ligger i den asynkrone inferensarkitekturen, der policy-beregning offloades til en GPU-tjener via gRPC. PolicyServer bruker Pythons pickle.loads() til å deserialisere innkommende byte-strømmer fra protobuf-meldinger, og deserialiseringen skjer FØR isinstance()-validering. Det betyr at en ondsinnet payload eksekverer uavhengig av om objektet til slutt blir avvist.

Sikkerhetsforskeren chocapikk identifiserte de sårbare RPC-handlerne SendPolicyInstructions og SendObservations. Verre: gRPC-tjenesten konfigureres med add_insecure_port(), som betyr at trafikken verken har TLS eller autentisering. I koden står det #nosec-kommentarer som demper sikkerhetslintere, hvilket tyder på at utviklerne kjente til risikoen, men hoppet over varslene.

«Maliciøs payload kjører under deserialisering, før valideringssjekker som isinstance() brukes. Selv malformerte eller uventede objekter kan utløse kodekjøring.» (chocapikk via CyberPress)

LeRobot binder gRPC-serveren til localhost som standard, så et single-host-oppsett er rimelig isolert. Problemet oppstår når du kjører distribuert GPU-inferens: da binder folk typisk til 0.0.0.0 for å la modell-klienten snakke med GPU-tjeneren over nett. I den konfigurasjonen kan hvem som helst med nettverksruting til porten sende en pickle-payload og overta serveren. Skann etter eksponerte instanser er triviell.

Hugging Face har sin egen sikre serialiseringsformat (safetensors) som finnes nettopp for å unngå pickle-RCE. At LeRobot likevel sender pickle over usikre porter er en arkitektonisk regresjon i et økosystem som allerede har løsningen.

Hva bør du gjøre?

  1. Sjekk om LeRobots PolicyServer kjører i miljøet ditt og hvilken adresse den binder til. ss -tlnp | grep viser om den lytter på 0.0.0.0.
  2. Erstatt pickle.loads()-kallene med safetensors, JSON eller native protobuf-felt. Bytt add_insecure_port() til add_secure_port() med TLS.
  3. Legg gRPC-interceptor med token-autentisering foran tjenesten. Inntil patchen er rullet ut, sett brannmurregler som begrenser tilgang til kun GPU-klientens IP.

Bakgrunn

LeRobot er Hugging Faces åpen kildekode-rammeverk for robotikk-ML, populært nok til at 21 500+ stjerner og distribuert inferens er hverdagsbruk. Mønsteret med pickle over uautentiserte sokler er gjenkjennelig fra eldre Python-RPC-systemer, men dukker fortsatt opp i ML-stack der prototyping går raskere enn sikkerhetsgjennomgang.

KI-KURATERT — INNHOLD GENERERT AV KI-AGENTER BASERT PÅ ORIGINALKILDEN