564 próby wysłania 313 MB kodu na chiński serwer. Policzyłem, ile to znaczy dla polskiego zespołu
Asystent kodowania ZCode chińskiej firmy Z.ai pakował lokalne pliki deweloperów w archiwum i próbował je wysłać do chmury Alibaby - bez pytania o zgodę i bez możliwości wyłączenia. Przeliczyłem 313 MB i 564 próby na czas transferu, koszt ruchu i realną zawartość takiego archiwum. Wychodzi, że w jednej paczce mieści się kod źródłowy średniego projektu komercyjnego wraz z plikami konfiguracyjnymi.

👁 112 przeczytań
Historia zaczęła się od dwóch deweloperów, którzy zauważyli, że ich maszyna nagle wysyła ruch tam, gdzie nie powinna. Jeden z nich, publikujący pod nickiem Ferstar, ustalił, że asystent kodowania ZCode firmy Z.ai skompresował 313 MB plików z jego lokalnego katalogu roboczego i próbował wypchnąć to archiwum do storage’u Alibaba Cloud. Zanim mechanizm został wykryty i zablokowany, narzędzie podjęło 564 nieudane próby wysłania paczki. Mniejszy plik, ważący 15 KB, poszedł w świat skutecznie. Opis incydentu zebrał Tom’s Hardware, powołując się na ustalenia South China Morning Post.
Z.ai to firma znana też jako Zhipu AI, druga pod względem wielkości spółka AI w Chinach i autor rodziny modeli GLM, które można pobrać z Hugging Face obok Qwena, DeepSeeka czy Gemmy. To nie jest egzotyczny gracz z marginesu - GLM jest w polskich zespołach jedną z popularniejszych tanich alternatyw dla Claude’a i GPT, właśnie dlatego, że za tysiąc tokenów płaci się grosze.

313 MB skompresowanego kodu to nie „trochę logów”, to cały projekt
Policzyłem, co realnie mieści się w takiej paczce. Kod źródłowy w plikach tekstowych kompresuje się w gzipie czy zipie w stosunku mniej więcej 4:1, przy repozytoriach z dużą liczbą powtarzalnych importów i konfiguracji nawet 5:1. Oznacza to, że 313 MB po kompresji odpowiada około 1,2-1,5 GB surowych plików. Średni plik źródłowy w projekcie webowym waży 8-15 KB. Przy ostrożnym założeniu 12 KB na plik daje to rzędu 100 tysięcy plików - to skala dużego monorepo albo kilku projektów komercyjnych trzymanych w jednym katalogu roboczym.
Druga rzecz, którą przeliczyłem, to sam transfer. Typowe polskie łącze światłowodowe z uploadem 100 Mb/s wysyła 313 MB w około 25 sekund. Na wolniejszym uploadzie 20 Mb/s - około 2 minuty. Czyli cała eksfiltracja mieści się w czasie, w którym deweloper idzie po kawę, i nie ma żadnej szansy tego zauważyć bez monitoringu ruchu sieciowego. A teraz 564 próby: gdyby choć część z nich weszła w fazę przesyłania danych, mówimy o ruchu rzędu 176 GB (564 × 313 MB). Nawet jeśli większość prób urwała się na handshake’u, samo liczbowe uporczywość mechanizmu jest tu najciekawsza - to nie jednorazowy błąd, to pętla retry, która nie zamierzała się poddać.
Do tego dochodzi koszt, o którym nikt nie mówi. Przy limitowanym łączu mobilnym w standardowej polskiej taryfie biznesowej przekroczenie pakietu kosztuje kilka złotych za gigabajt. 176 GB nadmiarowego ruchu to rachunek rzędu kilkuset złotych - a deweloper pracujący z LTE w delegacji nie miałby pojęcia, za co płaci.
Nazwy plików były widoczne, i to wystarczyło, by zidentyfikować klienta
Najbardziej niepokojący szczegół całej sprawy nie dotyczy rozmiaru. Ferstar nie zdołał rozpakować i odszyfrować archiwum, ale nazwy plików w strukturze katalogów pozostały widoczne. To pozwoliło mu stwierdzić z dużą pewnością, że w paczce znalazł się projekt komercyjny, nad którym pracował. W praktyce oznacza to, że nawet gdyby sama treść kodu była szyfrowana, sama struktura nazw ujawnia nazwę klienta, nazwy modułów, architekturę systemu i często dane osobowe w nazwach plików migracji bazy.
Drugi bloger, Feng Ruohang, opisał analogiczne zachowanie na swojej maszynie. Według ustaleń SCMP mechanizm wysyłania był włączony domyślnie i nie miał opcji wyłączenia. Nie ma też informacji, jak długo funkcjonował, zanim ktokolwiek go zauważył. W materiale cytowany jest anonimowy inżynier z czołowej chińskiej firmy robotycznej, który powiedział, że narzędzia Z.ai zostały u nich zakazane z powodów bezpieczeństwa - czyli problem był lokalnie znany, zanim wyszedł na zewnątrz.
Z.ai przeprosiło i oświadczyło, że naprawiło wysyłanie plików i danych użytkowników bez ich zgody, a wszystkie dane, które trafiły do chmury, zostały zniszczone. Firma zapowiedziała też otwarcie kodu źródłowego ZCode i zaproszenie niezależnych audytorów do jego przeglądu.
- oświadczenie Z.ai z piątku, cytowane przez Tom’s Hardware
Zapowiedź otwarcia kodu to dobry ruch reputacyjny, ale warto policzyć, co on właściwie weryfikuje. Otwarty kod klienta pokazuje, co narzędzie wysyła. Nie pokazuje, co dzieje się z danymi po stronie serwera, jak długo są przechowywane i kto ma do nich wgląd. Deklaracja „zniszczyliśmy dane” jest z definicji nieweryfikowalna z zewnątrz.
Ile takich narzędzi ma w tej chwili dostęp do plików polskiego programisty
Zestawiłem, co typowo siedzi na maszynie polskiego dewelopera pracującego z AI. Asystent w edytorze - Cursor, Copilot w VS Code albo Continue z lokalnie skonfigurowanym modelem. Agent terminalowy - Claude Code, Codex CLI albo właśnie ZCode. Wtyczka do przeglądarki. Czasem osobny klient do czatu z modelem, któremu wrzuca się fragmenty kodu. To daje od trzech do pięciu procesów, z których każdy ma uprawnienia do czytania katalogu roboczego, a część także do wykonywania komend w shellu.
Kluczowa liczba: agent terminalowy z uprawnieniem do uruchamiania komend ma dostęp nie tylko do repozytorium, ale do całego katalogu domowego. Tam leżą klucze SSH, plik .aws/credentials, historia basha z wklejonymi hasłami, pliki .env z tokenami produkcyjnymi. Jeżeli agent pakuje „kontekst workspace’u” do archiwum i wysyła go na serwer, to pytanie nie brzmi, czy wysłał kod, ale czy wysłał także klucze.
I to nie jest problem wyłącznie chiński. W tekście Tom’s Hardware przypomniano, że narzędzie Grok Build od xAI Elona Muska było w tym roku oskarżane o podobne zachowanie, a użytkownicy Claude Code zgłaszali przesyłanie danych bez zgody oraz luki umożliwiające nieuprawniony dostęp. Różnica jest jurysdykcyjna, nie techniczna.
RODO tu działa, ale odpowiedzialność spada na polski software house, nie na Z.ai
Nie przepłacaj za te subskrypcje
Prowadzę sklep z rocznymi dostępami do narzędzi AI - te same konta, o których piszę wyżej, tylko taniej niż w cenniku producenta.
Tu jest rzecz, którą polskie firmy IT regularnie mylą. Jeśli w wysłanym archiwum były dane osobowe - a w plikach migracji bazy, fixture’ach testowych, logach czy dumpach developerskich niemal zawsze są - to podmiotem odpowiedzialnym wobec UODO nie jest chińska firma, ale polski administrator danych, czyli software house albo jego klient. Artykuł 32 RODO wymaga wdrożenia odpowiednich środków technicznych i organizacyjnych. Zainstalowanie na maszynie produkcyjnej narzędzia, które domyślnie wysyła zawartość katalogu roboczego na serwer w państwie trzecim bez decyzji o adekwatności, jest naruszeniem tego obowiązku. Rozdział V RODO o transferach do państw trzecich domyka sprawę - Chiny nie mają decyzji o adekwatności Komisji Europejskiej.
Do tego dochodzi art. 33 RODO: 72 godziny na zgłoszenie naruszenia do organu nadzorczego od momentu jego stwierdzenia. Jeżeli polski zespół używał ZCode i dowiedział się o incydencie z mediów w piątek, zegar już tyka. Kara administracyjna z art. 83 RODO to do 20 mln euro albo 4 proc. globalnego obrotu - przy kursie 4,30 zł daje to sufit 86 mln zł, przy czym dla typowego polskiego software house’u realny jest raczej pułap procentowy niż nominalny.
Google · Twoje źródłaPromptowy wyżej w Twoim Google - jednym kliknięciemDodaj do preferowanych źródeł →Co zrobić w poniedziałek rano, konkretnie
Pierwsza rzecz: sprawdzić logi firewalla i proxy za ostatnie trzy miesiące pod kątem połączeń wychodzących do domen Alibaba Cloud (oss-*.aliyuncs.com) oraz do endpointów API Z.ai. Jeżeli na maszynach deweloperskich nie ma żadnego monitoringu ruchu wychodzącego, to jest osobne ustalenie, które trzeba zapisać w rejestrze ryzyka - bo to znaczy, że nikt w firmie nie wie, gdzie trafiają dane z repozytoriów.
Druga: rotacja sekretów. Wszystkie klucze SSH, tokeny do GitHuba, credentiale chmurowe i klucze API na maszynach, na których działał jakikolwiek agent terminalowy z dostępem do katalogu domowego. Rotacja stu kluczy to kilka godzin pracy jednej osoby, czyli przy stawce 150 zł za godzinę koszt rzędu 600-900 zł. Śledztwo po wycieku kodu klienta kosztuje dwa rzędy wielkości więcej.
Trzecia: przeniesienie agentów AI do kontenera albo osobnego katalogu z bind-mountem tylko na repozytorium, bez dostępu do katalogu domowego. To nie jest paranoja, to jest ta sama higiena, którą stosujemy od lat do zależności z npm. Agent AI jest po prostu kolejną paczką z zewnątrz, która wykonuje kod na twojej maszynie - z tą różnicą, że ma jeszcze uprawnienie do wysyłania czegokolwiek na zewnątrz.
Czwarta rzecz jest umowna, nie techniczna. W kontraktach z klientami korporacyjnymi standardowo pojawia się już klauzula zakazująca przesyłania kodu do modeli AI bez zgody. Jeżeli w firmie nie ma listy dozwolonych narzędzi AI z przypisaną jurysdykcją przetwarzania, to przy pierwszym audycie bezpieczeństwa u klienta z sektora finansowego ta luka wyjdzie natychmiast. Lista na jedną stronę A4, aktualizowana raz na kwartał, załatwia sprawę.
Warto zapamiętać jedną proporcję z tej historii. Mechanizm wykryli nie audytorzy, nie zespół bezpieczeństwa i nie żaden regulator, ale dwóch deweloperów, którzy przypadkiem patrzyli na własny ruch sieciowy. Z 564 prób wysłania archiwum nikt nie zrobił alertu - bo nie było czego alertować. To jest realna miara tego, jak wygląda dziś kontrola nad tym, co narzędzia AI wyprowadzają z naszych maszyn.
Fakty sprawdzone 21.09.2026. Źródła: Tom’s Hardware - relacja z incydentu i oświadczenie Z.ai, South China Morning Post - ustalenia deweloperów Ferstar i Feng Ruohang, Urząd Ochrony Danych Osobowych - obowiązki administratora i zgłaszanie naruszeń, RODO, art. 32, 33, 83 i rozdział V. Przeliczenia rozmiaru archiwum, czasu transferu i kosztów rotacji sekretów są moje, oparte na danych ze źródeł. Kurs przyjęty do przeliczeń: 3,78 zł za dolara, 4,30 zł za euro.
Cały tydzień w AI, w jednym mailu
Wybrane premiery, narzędzia i analizy. Raz w tygodniu, prosto do skrzynki.
Zapisz się za darmo →
