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

Keras CVE-2026-12570: plik modelu może wyczerpać pamięć serwera

Mały plik HDF5 może zadeklarować dane wielkości petabajtów i zatrzymać proces load_model(). Analizujemy poprawkę, ryzyko łańcucha modeli i obronę.

MATERIAŁ PUBLICZNY
AUTOR
/ CEO Breachroad · OSCP · PNPT
PUBLIKACJA
10 sierpnia 2026
CZAS CZYTANIA
12 min czytania
TEMAT
Łańcuch dostaw
Keras CVE-2026-12570: plik modelu może wyczerpać pamięć serwera

10 sierpnia 2026 roku opublikowano CVE-2026-12570, podatność odmowy usługi w bibliotece Keras. Specjalnie przygotowany plik modelu w formacie opartym na HDF5 może być mały na dysku, a jednocześnie zadeklarować tablicę o rozmiarze liczonym w petabajtach. Gdy keras.models.load_model() próbuje ją odtworzyć, proces rezerwuje ogromną ilość pamięci i może zostać zabity przez system, często z kodem wyjścia 137.

CNA ocenia lukę na 5,5 w CVSS 3.0: atak wymaga lokalnego dostarczenia pliku i interakcji polegającej na jego wczytaniu. W praktyce „lokalny” nie znaczy jednak „nieistotny”. Pipeline MLOps może automatycznie pobierać modele z rejestru, przetwarzać załączniki użytkowników albo walidować artefakty dostarczane przez zewnętrzny zespół. W takim układzie mały plik może wielokrotnie zatrzymywać współdzielony worker, opóźniać publikację modeli i wywoływać kosztowne restarty.

Jak działa bomba kształtu HDF5

HDF5 przechowuje nie tylko rzeczywiste bajty danych, ale też metadane opisujące typ i kształt datasetu. Format wspiera kompresję, rzadkie wartości i mechanizmy fill value. Dzięki temu plik o rozmiarze poniżej megabajta może twierdzić, że zawiera tablicę o gigantycznej liczbie elementów. Sam parser metadanych nie musi od razu zapisywać całej tablicy na dysku.

Problem pojawia się przy materializacji. Jeżeli aplikacja ufa deklarowanemu kształtowi i tworzy w pamięci bufor liczba_elementów × rozmiar_typu, koszt przestaje mieć związek z wielkością pliku. Test poprawki używał datasetu o kształcie (2**50,) i typie float64. Deklarowana wartość zbliża się do 8 pebibajtów, choć plik może pozostać mniejszy niż 1 MiB. Żaden zwykły serwer nie spełni takiego żądania.

CVE-2026-12570 obejmuje Keras do wersji 3.15.0 włącznie. Błąd znajdował się w ścieżce H5IOStore.__getitem__, która odczytywała dataset bez limitu wiążącego deklarowany rozmiar z fizycznym rozmiarem danych. To ważne: wcześniejsza poprawka CVE-2026-0897 dotyczyła KerasFileEditor, więc nie chroniła automatycznie wszystkich wywołań load_model().

Co zmienia poprawka

Commit naprawiający problem dodaje dwuczęściową kontrolę. Biblioteka oblicza deklarowany rozmiar jako iloczyn wymiarów datasetu i rozmiaru elementu. Następnie porównuje go z przestrzenią rzeczywiście zajętą w HDF5. Dataset jest odrzucany, gdy deklarowany bufor przekracza 4 GiB i jednocześnie jest ponad tysiąc razy większy od danych zapisanych w pliku.

Dwa warunki ograniczają fałszywe alarmy. Sam model większy niż 4 GiB nie musi być złośliwy, jeśli fizycznie przechowuje podobną ilość danych. Sama duża kompresja także może być uzasadniona dla małych obiektów. Podejrzane jest połączenie absolutnie dużej alokacji i ekstremalnego współczynnika ekspansji. Taka zasada przypomina ochronę przed ZIP bombami, lecz działa na semantyce tensorów.

Rekord CNA wskazuje zakres dotknięty do 3.15.0, ale nie należy zgadywać pierwszej bezpiecznej wersji tylko na podstawie numeru commitu. Organizacja powinna użyć wydania, które projekt jednoznacznie publikuje poza zakresem podatnym, albo potwierdzić w swoim artefakcie obecność poprawki. Ręczny backport wymaga testów zgodności, powtarzalnego buildu i udokumentowania pochodzenia.

Kto powinien potraktować lukę priorytetowo

Najwyższy priorytet mają usługi, które wczytują modele dostarczone przez nieufną stronę: publiczne konwertery, marketplace’y, systemy oceny zadań, platformy treningowe, rejestry współdzielone między tenantami i automaty CI analizujące pull requesty. Wrażliwe są też organizacje pobierające modele z publicznych repozytoriów bez przypięcia wersji i weryfikacji źródła.

Niższy, ale nie zerowy priorytet ma aplikacja, która ładuje wyłącznie model zbudowany we własnym kontrolowanym pipeline. Trzeba jeszcze sprawdzić, kto może podmienić artefakt, zmienić URI, zapisać do bucketa albo przejąć token publikujący. Bezpieczeństwo modelu jest właściwością całego łańcucha pochodzenia, nie tylko repozytorium kodu.

Wpływ zależy od izolacji. Na dedykowanym workerze z limitem pamięci awaria może dotyczyć jednego zadania. Na wspólnym notebooku albo orchestratorze bez limitów presja pamięci może zatrzymać sąsiednie procesy. W Kubernetes limit kontenera pomaga ograniczyć blast radius, lecz CrashLoop może nadal zużywać zasoby, generować koszty i blokować kolejkę.

Co zrobić teraz

  1. Zidentyfikuj wszystkie zależności Keras, w tym obrazy notebooków, joby walidujące, konwertery i narzędzia uruchamiane tylko okresowo.
  2. Sprawdź efektywną wersję wewnątrz obrazu, a nie jedynie plik deklaracji zależności. Warstwa cache mogła zachować starszy pakiet.
  3. Zaktualizuj do wydania oficjalnie wolnego od zakresu <=3.15.0 lub do kontrolowanego buildu zawierającego wskazany commit.
  4. Do czasu aktualizacji nie wczytuj niezweryfikowanych plików .keras i HDF5 w procesie mającym dostęp do produkcyjnych sekretów.
  5. Ustaw limity pamięci, czasu wykonania i restartów; uruchamiaj inspekcję artefaktów w odseparowanym workerze bez dostępu do sieci wewnętrznej.
  6. Wymagaj digestu, podpisu lub zatwierdzonego pochodzenia modelu. Rejestruj autora, źródło i dokładną wersję każdego artefaktu.
  7. Monitoruj OOMKill, kod 137, gwałtowny wzrost RSS oraz powtarzające się awarie po pobraniu konkretnego pliku.

Nie polegaj wyłącznie na limicie rozmiaru uploadu. Sednem luki jest właśnie różnica między liczbą bajtów przesłanych a kosztem po rozpakowaniu semantycznym. Filtr 100 MiB przepuści plik mniejszy niż 1 MiB, który deklaruje ogromny tensor. Walidator musi rozumieć metadane formatu i wykonywać bezpieczną arytmetykę przed alokacją.

Jak bezpiecznie projektować wejście modeli

Warto rozdzielić pipeline na co najmniej trzy etapy. Pierwszy przyjmuje plik do kwarantanny i liczy jego skrót. Drugi, bez sekretów oraz z ostrymi limitami cgroup, analizuje strukturę, kształty, typy, operatory i zależności. Dopiero trzeci dopuszcza zatwierdzony digest do środowiska treningowego lub inferencyjnego. Wynik analizy musi odnosić się do tego samego digestu, aby uniknąć podmiany między kontrolą a użyciem.

Polityka może określać maksymalną sumę elementów tensorów, maksymalny pojedynczy wymiar, dopuszczalne typy i racjonalny stosunek rozmiaru logicznego do fizycznego. Limity muszą wynikać z zastosowania. Model językowy i mały klasyfikator obrazu mają inne profile, ale żaden nie potrzebuje bezwarunkowej zgody na alokację petabajtów.

Sam skaner antywirusowy nie wystarczy, ponieważ poprawny składniowo HDF5 nie musi zawierać znanej sygnatury malware. To atak na interpretację danych i dostępność. Potrzebne są kontrole specyficzne dla formatu, izolacja procesu i mechanizmy niezawodności. Ochrona aplikacyjna oraz operacyjna uzupełniają się: poprawiona biblioteka odrzuca bombę, a limit pamięci chroni przed przyszłym wariantem.

Fakty, wnioski i praktyczna lekcja

Faktem z rekordu i poprawki jest możliwość wywołania nieograniczonej alokacji przez dysproporcję między kształtem datasetu a plikiem, zakres do Keras 3.15.0 oraz próg użyty przez poprawkę. Nie ma w tych źródłach informacji o masowej kampanii. Wniosek Breachroad brzmi: każdy automatyczny import modelu należy traktować jak parsowanie aktywnego, potencjalnie wrogiego artefaktu, a nie jak odczyt biernego pliku.

Po wdrożeniu poprawki zachowaj testowy wynik odrzucenia bomby oraz metrykę pamięci workera. Dowodzi to nie tylko zmiany numeru pakietu, ale faktycznej obecności kontroli w uruchomionym obrazie.

Ta luka jest dobrym ćwiczeniem dla zespołów AI, DevOps i bezpieczeństwa, bo łączy programowanie defensywne z projektowaniem odporności. Szkolenia cyberbezpieczeństwa dla organizacji pomagają zbudować wspólny język reakcji na ryzyko zależności. Firmy rozwijające MLOps mogą też uporządkować pochodzenie modeli, izolację i limity w ramach bezpiecznych wdrożeń AI.

UDOSTĘPNIJ / KOPIUJ