Przejdź do treści
INDEKS ANALIZ BREACHROAD / NOTA TECHNICZNA

CVE-2026-22778 w vLLM: film wystarczał do zdalnego wykonania kodu

Krytyczne RCE 9.8 w vLLM łączyło wyciek adresu z błędem JPEG2000 w OpenCV/FFmpeg. Zakres wersji, łańcuch podatności i bezpieczna mitygacja.

MATERIAŁ PUBLICZNY
AUTOR
/ CEO Breachroad · OSCP · PNPT
PUBLIKACJA
2 lutego 2026
CZAS CZYTANIA
13 min czytania
TEMAT
Podatności i CVE
CVE-2026-22778 w vLLM: film wystarczał do zdalnego wykonania kodu

CVE-2026-22778 to krytyczna podatność CVSS 9.8 w vLLM, która pokazała, że bezpieczeństwo serwera modeli zależy także od bibliotek przetwarzających media. Według zweryfikowanego advisory GitHub podatne są wersje od 0.8.3 do 0.14.0, a poprawka znajduje się w 0.14.1. Zagrożenie dotyczy wdrożeń obsługujących modele wideo; serwer, który nie przyjmuje wideo, nie jest objęty opisanym łańcuchem.

Atakujący mógł podać zdalny video_url do endpointu kompatybilnego z OpenAI. vLLM pobierał plik i przekazywał bajty do cv2.VideoCapture. Dalej format interpretował stos OpenCV z FFmpeg i dekoderem JPEG2000. Błąd w obsłudze pola cdef pozwalał zapisać pełnowymiarowy kanał luminancji do mniejszego bufora chrominancji, powodując przepełnienie sterty.

Dlaczego był to łańcuch, nie pojedynczy błąd

Samo przepełnienie pamięci nie gwarantuje stabilnego RCE, ponieważ ASLR losuje położenie struktur. Drugi problem sprawiał, że komunikat błędu PIL mógł ujawnić adres obiektu BytesIO. Advisory opisuje połączenie wycieku adresu z przepełnieniem prowadzącym do nadpisania wskaźnika funkcji. W rezultacie złośliwy materiał wideo mógł doprowadzić do wykonania kodu w kontekście procesu vLLM.

Istotna granica: nie każdy serwer vLLM jest podatny w praktyce. Trzeba jednocześnie mieć podatną wersję, udostępniać model wideo i pozwalać na odpowiedni przepływ danych. Z drugiej strony standardowe wdrożenia vLLM często wystawiają API bez uwierzytelnienia, a advisory wskazuje również powierzchnię /v1/invocations, dlatego sam klucz API nie powinien być uznany za pełną mitygację.

Bezpieczna odpowiedź administratora

  1. Ustal wersję pakietu i obrazu kontenera, nie tylko tag manifestu.
  2. Zaktualizuj do 0.14.1 lub nowszej i przebuduj obraz bez odziedziczonego cache.
  3. Jeśli wideo nie jest wymagane, wyłącz tę modalność i zablokuj endpointy na bramie.
  4. Ogranicz pobieranie mediów do kontrolowanych źródeł; domyślnie blokuj egress procesu.
  5. Uruchamiaj inferencję jako nieuprzywilejowany użytkownik w odizolowanym kontenerze z read-only filesystem i minimalnymi sekretami.

W logach szukaj żądań zawierających video_url, błędów dekodera, nietypowych połączeń wychodzących procesu oraz potomnych powłok lub narzędzi sieciowych. Nie testuj produkcji publicznym materiałem exploitacyjnym — bezpieczna walidacja polega na potwierdzeniu wersji, konfiguracji i zablokowanego przepływu, a nie na uruchamianiu RCE.

Lekcja dla całego stosu AI

Model nie musi być wadliwy, aby platforma AI została przejęta. Parser obrazu, wideo, PDF lub audio działa na nieufnych danych i często jest napisany w języku niezapewniającym bezpieczeństwa pamięci. Każda modalność powiększa TCB. Dlatego audyt bezpieczeństwa systemów LLM powinien obejmować SBOM, kodeki, broker pobierania i sandbox, nie tylko prompt injection.

CVE-2026-22778 łączy ryzyko aplikacyjne, supply chain i izolację środowiska wykonawczego. Patch jest konieczny, ale dopiero brak bezpośredniego internetu, najmniejsze uprawnienia i obserwowalność ograniczają skutki kolejnego błędu w kodeku. Możemy sprawdzić ten łańcuch bez uruchamiania niebezpiecznego PoC.

Inwentaryzacja, która nie kończy się na pip freeze

Wersja vLLM to dopiero początek. Obraz może zawierać inną kompilację OpenCV, systemowy FFmpeg albo biblioteki dołączone do koła Pythona. Zapisz digest kontenera, hash lockfile, wynik SBOM i źródło artefaktu. Jeżeli platforma buduje obraz wieloetapowo, potwierdź wersje w finalnej warstwie, nie w builderze.

W Kubernetes sprawdź wszystkie Deploymenty, Joby i autoskalowane pule GPU. Stary obraz może pozostać w node cache i wrócić po rollbacku. Polityka admission powinna odrzucać tagi bez digestu oraz obrazy z podatną wersją. Po aktualizacji usuń stare ReplicaSety albo oznacz je jako niedopuszczalne do ponownego uruchomienia.

Obrona brokerem mediów

Serwer modelu nie powinien sam pobierać dowolnego URL. Bezpieczniejszy wzorzec używa osobnego brokera, który wymusza HTTPS, limit rozmiaru i czasu, blokuje adresy prywatne oraz metadane chmurowe, sprawdza typ po zawartości i zapisuje obiekt w kwarantannie. Proces inference otrzymuje lokalny, niezmienny identyfikator zamiast adresu internetowego.

Broker ogranicza również SSRF, redirect chains i DNS rebinding. Dekodowanie można wykonywać w oddzielnym sandboxie z limitem pamięci oraz CPU, a wynik przekazać jako znormalizowane klatki. Awaria parsera nie powinna mieć dostępu do wag, tokenów API ani sieci sterującej.

Pytania do dostawcy platformy

Poproś o dokładny status CVE dla zarządzanej usługi, datę wdrożenia patcha, sposób izolacji tenantów i retencję plików. „Nie wystawiamy vLLM publicznie” nie jest pełną odpowiedzią, jeśli wejście prowadzi przez wewnętrzne API. Wymagaj dowodu wersji i testu ścieżki.

Czy WAF wykryje złośliwe wideo? Nie w sposób niezawodny. Payload jest binarny i może być pobrany dopiero przez serwer. WAF ograniczy endpoint, ale patch i sandbox pozostają podstawą.


Źródła pierwotne: GitHub Advisory GHSA-4r2x-xpjr-7cvv, vLLM 0.14.1.

UDOSTĘPNIJ / KOPIUJ