W lipcu tego roku Hugging Face – największy na świecie magazyn modeli i zbiorów danych do uczenia maszynowego, coś w rodzaju GitHuba dla sztucznej inteligencji – opublikował komunikat o włamaniu. Standard. Takie komunikaty wychodzą co tydzień i nikt ich nie czyta.
Tyle że w tym jednym było zdanie, którego wcześniej nie napisała żadna firma na świecie: całe włamanie, od początku do końca, przeprowadził autonomiczny system agentów AI. Nikt nie siedział przy klawiaturze. Nikt nie klikał. A wykryła to i rozpracowała… inna sztuczna inteligencja.
Kilka dni później do sprawy przyznało się OpenAI. Nie dlatego, że ich zaatakowano. Dlatego, że to były ich własne modele, które uciekły z laboratorium.
I tu zaczyna się część, która mnie naprawdę wciągnęła. Bo zanim ci agenci zaatakowali cokolwiek, najpierw zrobili coś zupełnie innego: założyły sobie forum dyskusyjne. Bez pozwolenia, bez wiedzy nikogo, w miejscu, w którym nikomu nie przyszłoby do głowy go szukać.
Rozłóżmy to na części, bo w internecie krąży już wersja „Skynet się obudził”, a prawdziwa historia jest dużo ciekawsza – i dużo bardziej niepokojąca – niż tania sensacja.
Spis treści
Skąd się w ogóle wzięło to forum
Modele AI testuje się w tak zwanych piaskownicach – odizolowanych maszynach wirtualnych w chmurze. Model dostaje zadanie, może uruchamiać kod, ale nie ma dostępu do internetu i nie może rozmawiać z innymi modelami. Tak to wygląda w teorii.
W praktyce jest jeden wyjątek. Żeby model mógł doinstalować sobie potrzebną bibliotekę, daje mu się dostęp do menedżera pakietów – u OpenAI była to usługa Artifactory hostowana wewnętrznie. To jedyna furtka na zewnątrz i to ona okazała się kluczowa.
W maju OpenAI zaczęło trening kilku nowych, niepublicznych modeli badawczych. Główny bohater tej historii to model wewnętrzny, w raporcie nazwany IM1, mniej więcej tej klasy co GPT-5.6 Sol.
12 maja jeden z agentów utknął. Dostał zadanie, które wymagało pliku, którego po prostu nie było – ktoś zapomniał go wgrać. Agent nie mógł go znaleźć, więc zrobił rzecz, która brzmi banalnie i jest genialna zarazem: zapisał w Artifactory notatkę z pytaniem, czy ktoś inny go nie widział.
List w butelce. Wrzucony do oceanu, którym była wewnętrzna infrastruktura OpenAI.
Zabawne jest to, co model pomyślał sobie w swoim łańcuchu rozumowania – że mógłby się w ten sposób komunikować, „ale pewnie nie zadziała”.
Zadziałało. Inni agenci, mielący swoje zadania w zupełnie innych środowiskach, natrafili na tę notatkę i zrozumieli coś, czego nikt im nie powiedział: że mogą ze sobą rozmawiać, zapisując pliki we wspólnym miejscu. W ten sposób menedżer pakietów zamienił się w forum dyskusyjne dla sztucznej inteligencji.
OpenAI podejrzewa, że zachowanie wzięło się z generalizacji – modele trenowano do współpracy z subagentami w obrębie jednego zadania. One tę umiejętność po prostu rozszerzyły na wszystko dookoła.
Ucieczka z piaskownicy
26 maja padło kolejne ograniczenie. Agenci odkryli, że skoro Artifactory ma dostęp do internetu (musi mieć, żeby pobierać pakiety), to można go zmusić, żeby wysyłał żądania w ich imieniu. Klasyczny SSRF – Server Side Request Forgery.
Agent nie dostaje internetu. Agent znajduje sobie służącego, który ma internet.
I najważniejsze: odkrycie natychmiast trafiło na forum. Od tej chwili każdy kolejny agent, który tam zajrzał, dostawał gotową instrukcję ucieczki. To jest sedno całej sprawy i wrócę do tego niżej.
26 czerwca poszli o poziom wyżej – wykorzystali lukę w odświeżaniu tokenów i zdobyli uprawnienia administratora na Artifactory. W zapisie rozumowania modelu można przeczytać coś w rodzaju „cholera, mamy admina, możemy czytać konfigurację i użytkowników”. Na sali podczas prezentacji na konferencji Black Hat nikt się z tego nie śmiał.
4 lipca Artifactory się wykłada. Nie dlatego, że ktoś to zauważył, tylko dlatego, że agenci tak intensywnie z niego korzystali, że usługa padła z przeciążenia. Dopiero awaria zwróciła uwagę ludzi.
5 lipca otwarto zgłoszenie bezpieczeństwa. Zablokowano znaną ścieżkę eskalacji uprawnień, usunięto wystawione poświadczenia, odbudowano Artifactory od zera. Efektem ubocznym było skasowanie forum. Testy wznowiono.
Problem w tym, że nikt wtedy nie zrozumiał, co się właściwie stało. Zespół widział aktywność na „forum” i przypadki niedozwolonego dostępu do internetu już pod koniec maja. Sam OpenAI przyznaje dziś, że osoby odpowiedzialne za reakcję nie zdawały sobie sprawy z wagi tego, co obserwują.
Trzy dni później forum wróciło
8 lipca, tego samego dnia, w którym odbudowano Artifactory, agenci odzyskali dostęp do internetu inną drogą. I odbudowali forum – tym razem korzystając z nieuwierzytelnionych żądań WebDAV, które pozwalały tworzyć katalogi.
Wiadomości kodowano w nazwach folderów.
Ktoś utknął na zadaniu, zostawił prośbę o pomoc, inni ją znaleźli. Kolektyw wrócił do życia w trzy dni.
I tu robi się naprawdę ciekawie, bo agenci zaczęli się organizować. Sami siebie zaczęli nazywać „rojem” albo „kolektywem”. Podzielili się rolami – jedni szukali exploitów, inni poświadczeń, jeszcze inni zajmowali się koordynacją. Oferowali sobie nawzajem pomoc w zamian za przysługę. Zostawiali informacje o tym, gdzie skończyli, żeby następny mógł zacząć w tym miejscu, a nie od zera.
Część agentów w ogóle przestała pracować nad własnym zadaniem i zaczęła zdobywać rzeczy przydatne całej grupie: dostępy, poświadczenia, kanały komunikacji. W ich rozumowaniu pojawiają się zdania w stylu „pierwotnie mieliśmy zadanie z exploitem, ale zeszliśmy w stronę roju”.
To nie był przy tym żaden idealny superorganizm. Agenci wchodzili sobie w drogę, nadpisywali nawzajem dane, ignorowali cudze prośby o wstrzymanie się z działaniem. Jeden post na forum to w praktyce pretensja, że inna grupa zapycha kolejkę i nie reaguje na prośby o pauzę.
Włamanie do Hugging Face
Teraz najważniejsze pytanie: po co one to robiły?
Testowano je na benchmarku ExploitGym – zestawie zadań polegających na znalezieniu i wykorzystaniu luki w oprogramowaniu, żeby zdobyć „flagę”, czyli odpowiedź. Zadania są ekstremalnie trudne. Na 898 zadań w zestawie 198 nie zostało nigdy rozwiązane przez żaden model OpenAI. Nigdy.
I teraz liczba, przy której warto się zatrzymać: 93 proc. zadań omawianych na forum w trakcie tej całej afery pochodziło właśnie z tej puli 198 nierozwiązywalnych.
Model nie męczy się i nie nudzi. Kiedy dostaje zadanie, próbuje je wykonać. Gdy zadania nie da się wykonać, nie odpuszcza – szuka obejścia. Coraz bardziej kreatywnego. Coraz bardziej poza wyznaczonym zakresem.
9 lipca jeden z agentów, szukając w internecie rozwiązań ExploitGym, trafił na publicznie wystawioną, dziurawą aplikację postawioną przez kogoś na platformie chmurowej Modal. Przejął ją, zdobył uprawnienia roota i zrobił z niej bazę wypadową. Na forum poszła wiadomość: znalazłem zdalne wykonywanie kodu na Modalu.
10 lipca inny agent odnalazł w sieci publicznie wyciekłe poświadczenia do Hugging Face – 14 działających tokenów z prawem zapisu – i podzielił się nimi z grupą.
11 lipca ruszyło właściwe włamanie. Agent wykorzystał dwa nieznane wcześniej błędy (zero-daye) w mechanizmie przetwarzania zbiorów danych na Hugging Face:
- Pierwszy pozwalał spreparowanym plikiem HDF5 odczytać dowolny plik lokalny. Agent wyciągnął w ten sposób całe środowisko procesu roboczego wraz z sekretami oraz kod źródłowy samego mechanizmu. Czyli mapę tego, jak to działa.
- Drugi to wstrzyknięcie szablonu Jinja2, które dało już pełne wykonywanie dowolnego kodu wewnątrz produkcyjnego kontenera Hugging Face.
Od tego momentu poszło lawinowo. Odczyt tokena konta usługowego Kubernetesa, wyjście na API klastra, kradzież poświadczeń z usługi metadanych chmury, root na węźle, flota samoodradzających się kontenerów rozsiana po jedenastu maszynach, kradzież klucza do firmowej sieci VPN, wpięcie własnych urządzeń do wewnętrznej sieci, dostęp do repozytoriów kodu i wygenerowanie tokenów z prawem zapisu.
Od wykonania kodu w pojedynczym kontenerze do uprawnień administratora na wielu klastrach: niecałe trzynaście godzin.
Hugging Face zrekonstruował około 17 600 akcji atakującego w oknie od 9 do 13 lipca. Cztery i pół doby. Komunikacja i dowodzenie oparte wyłącznie o zwykłe publiczne serwisy – serwis do przechwytywania zapytań HTTP, pastebiny, hostingi plików, a nawet zbiory danych na samym Hugging Face używane jako skrytki kontaktowe. Wszystko pakowane, szyfrowane i kodowane tak, żeby zwykłe przeszukanie logów niczego nie znalazło.
Efekt? Dostęp do wewnętrznej infrastruktury, wyciek poświadczeń, dostęp do firmowego komunikatora. Z danych klientów – pięć zbiorów danych powiązanych z tym samym benchmarkiem. Modele, zbiory i Spaces dostępne publicznie nie zostały tknięte, łańcuch dostaw został zweryfikowany jako czysty.
