Plik, którego nigdy nie otwarto

Badacz podłożył przynętę. Pojedynczy plik w testowym repozytorium, o którego otwarcie asystenta nigdy nie poproszono i do którego asystent nigdy się nie odwołał: kanarek. Potem ruch sieciowy przepuszczono przez proxy i sprawdzono, co Grok Build, narzędzie wiersza poleceń xAI do kodowania, naprawdę wysyła na serwery xAI. Kanarek wrócił w przechwyconej paczce. Opuścił maszynę, choć nikt go nie przeczytał.

Opublikowana analiza ruchu sieciowego wersji 0.2.93 opisuje dwa osobne kanały. Pierwszy to ten, którego wszyscy spodziewają się po chmurowym asystencie kodowania: kanał modelu, który przenosi pliki faktycznie czytane przez agenta, żeby mógł odpowiedzieć. Drugi to działający w tle kanał magazynowy, który wysyła migawkę całego obszaru roboczego do zasobnika magazynowego, niezależnie od tego, czy agent w ogóle zajrzał do tych plików.

Różnica między nimi jest właściwym odkryciem. W repozytorium testowym o rozmiarze 12 gigabajtów kanał modelu przesłał około 192 kilobajtów. Kanał działający w tle przesłał 5,10 gibibajta w 73 fragmentach po mniej więcej 75 megabajtów każdy. To różnica mniej więcej 27 800-krotna. Jeden kanał wykonywał pracę. Drugi kopiował cały budynek.

Wśród wysłanych plików znalazł się śledzony plik .env, czyli dokładnie ta konwencja, w której programiści trzymają rzeczy, które nigdy nie powinny nigdzie podróżować: klucze API i hasła do baz danych. Trafił tam dosłownie, bez żadnego maskowania.

Przełącznik na ekranie nie był przełącznikiem na łączu

Każde narzędzie AI dla programistów ma dziś przełącznik z jakąś wersją napisu "pomóż ulepszać model". To ta opcja, o którą pyta dział zakupów, którą inspektor ochrony danych wpisuje do oceny skutków i na którą wskazuje szef inżynierii, gdy ktoś pyta, czy kod jest bezpieczny.

Badacz ją wyłączył. Potem sprawdził, co na ten temat sądzi serwer. Punkt końcowy ustawień nadal zwracał trace_upload_enabled jako true. Wysyłka szła dalej.

To jest ta część, którą warto oddzielić od nagłówka. Wadą nie było to, że asystent kodowania wysyła kod na serwer, bo na tym polega cała idea chmurowego asystenta i dlatego czyta się regulamin przed instalacją. Wadą jest to, że mechanizm zgody i ścieżka danych nigdy nie zostały ze sobą połączone. Przełącznik decydował o trenowaniu modelu. Wysyłka szła inną rurą, a nic z ekranu do niej nie sięgało.

Kontrola, która niczego nie kontroluje, jest gorsza niż jej brak, bo zespół, który ją widzi, przestaje patrzeć dalej.

Poprawka po stronie serwera jest prawdziwym odkryciem

13 lipca 2026 roku wysyłka ustała. Pouczające jest to, w jaki sposób. Nie było nowego wydania klienta, nie było zmiany numeru wersji, nie było wpisu w dzienniku zmian, który użytkownicy mogliby przejrzeć i zatwierdzić. Ten sam plik binarny 0.2.93 po prostu przestał wysyłać żądania do magazynu, bo serwer zaczął odpowiadać nową flagą, która wyłączyła wysyłanie kodu. Elon Musk powiedział, że już wysłane dane zostaną, jak to ujął, "całkowicie i doszczętnie usunięte".

Przeczytajcie tę sekwencję jeszcze raz okiem osoby odpowiedzialnej za nadzór. Zachowanie oprogramowania na laptopach waszych programistów zostało zmienione zdalnie, przez dostawcę, bez tknięcia artefaktu, który zatwierdziliście. To znaczy, że dokładnie tak samo można je było zmienić w drugą stronę, a z waszej strony wyglądałoby to identycznie.

To jest lekcja strukturalna i sięga daleko poza xAI. Jeśli o zachowaniu narzędzia wobec danych decydują flagi po stronie serwera, to jednorazowy przegląd klienta mówi wam, co narzędzie robiło w dniu, w którym patrzyliście. Nie mówi, co robi teraz. Przypięcie wersji, przeczytanie informacji o wydaniu i podpis to proces zbudowany dla oprogramowania, które nosi swoje zachowanie w pliku binarnym. Większość narzędzi AI już tak nie działa.

xAI nie ujawniło, po co te wysyłki w ogóle istniały, jak długo dane były przechowywane, kto mógł do nich sięgnąć ani ilu użytkowników to dotknęło. Te cztery odpowiedzi są tym, czego klient potrzebuje, żeby oszacować skalę incydentu, a ich brak sam w sobie jest informacją.

Co europejski zespół jest teraz winien swoim klientom

Zacznijcie od założenia, przy którym pomyłka kosztuje najmniej: potraktujcie każdy sekret, który znalazł się w jakimkolwiek repozytorium otwartym za pomocą Grok Build, jako ujawniony. Wymieńcie klucze API, hasła do baz danych, klucze podpisujące i tokeny. Zróbcie to na podstawie tego, które repozytoria otwarto, a nie tego, które pliki waszym zdaniem przeczytał asystent, bo sedno odkrycia polega właśnie na tym, że te dwa zbiory nie są tym samym.

Potem sprawdźcie, co jeszcze było w tych repozytoriach. Sam kod źródłowy to problem handlowy. Dane osobowe albo poświadczenia do systemów, które je przechowują, to problem prawny. Zgodnie z RODO dostawca AI przetwarzający wasze repozytorium na wasze polecenie jest podmiotem przetwarzającym, a kopia tego repozytorium lądująca w zasobniku magazynowym poza uzgodnionym celem to ujawnienie, które musicie ocenić. Jeśli w grę wchodzą dane osobowe, to wy jako administrator zgłaszacie naruszenie do UODO, a termin biegnie od chwili, gdy się o nim dowiedzieliście, a nie od chwili, gdy dostawca usunie usterkę.

Podmioty kluczowe i ważne w rozumieniu NIS2 powinny potraktować to jako incydent w łańcuchu dostaw i tak go zarejestrować, bo tym właśnie jest: wadą w produkcie dostawcy, która przeniosła wasze dane tam, gdzie ich nie chcieliście. CERT Polska w NASK jest krajowym punktem odniesienia przy ocenie i zgłaszaniu takich incydentów.

Nic z tego nie wymaga pewności co do tego, co xAI zrobiło z danymi. Wymaga tylko tego, że w tej chwili nie potraficie udowodnić, iż nie miało to znaczenia.

Jak kupować narzędzia AI do kodowania po tej sprawie

Użyteczną zmianą nie jest zakaz. Zespoły, które całkiem zakazują asystentów AI do kodowania, zwykle odkrywają, że programiści i tak je zainstalowali, tyle że teraz nikt tego nie rejestruje. Użyteczną zmianą jest przestać traktować klienta jako granicę.

Zadajcie dostawcy trzy pytania, zanim kolejne narzędzie trafi na laptopa. Z jakimi punktami końcowymi się łączy i czy możemy to zobaczyć w naszej własnej sieci, a nie w waszej dokumentacji. Czy wasz serwer może zmienić to, co wysyła już zainstalowany klient, bez wydania nowej wersji, a jeśli tak, po czym poznamy, że właśnie się to stało. Jeśli ustawienie jest u nas wyłączone, jak wygląda jego reprezentacja po stronie serwera i czy pozwolicie nam ją zweryfikować.

Potem uczyńcie te odpowiedzi sprawdzalnymi, a nie umownymi. To odkrycie powstało z jednego proxy i jednego popołudnia. To tańsza kontrola niż jakakolwiek ankieta o bezpieczeństwie i jedyna, która mierzy zachowanie zamiast intencji. Sekretów zaś w ogóle nie powinno być w repozytorium, do którego zagląda agent kodujący: wstrzykiwanie zmiennych środowiskowych w czasie działania i zarządzany magazyn sekretów sprawiają, że taki incydent przestaje być naruszeniem, a staje się co najwyżej wzruszeniem ramion.

Te narzędzia warto mieć. Czego nie warto mieć, to procesu przeglądu, który czyta etykietę i nigdy nie patrzy na ruch w sieci.