Kursy

Black October: 10 incydentów wokół kluczy API dla AI

Railway, Northflank, Trigger.dev i siedem innych platform zgłosiło incydenty wokół sekretów klientów. Co wyciekło i co zrobić z kluczem API.

Klucz API i wycieki z platform wdrożeniowych - długi korytarz serwerowni z rzędami czarnych szaf rack pełnych serwerów z zielonymi i niebieskimi diodami, jasna podłoga z perforowanymi płytami, na końcu siatkowe drzwi klatki
Spis treści
  1. Które platformy zgłosiły incydent i kiedy
  2. Co dokładnie wyciekło: zmienne środowiskowe z kluczami
  3. Jak wygląda nadużycie klucza API: LLMJacking według Wiza
  4. Kto stoi za Black October i czy to jeden atak
  5. Co zrobić z kluczem API dziś
  6. Podsumowanie

Jeśli trzymasz klucz API do modeli AI, płatności albo bazy danych w zmiennych środowiskowych platformy wdrożeniowej, wymień go dziś u dostawcy, który go wydał. Od 6 października do 1 listopada 2026 roku incydenty bezpieczeństwa zgłosiło co najmniej dziesięć platform dla programistów AI, a w większości z nich napastnicy sięgali właśnie po zapisane zmienne środowiskowe. Firma Wiz opisała dziewięć z nich i nazwała ten miesiąc “Black October”. Dziesiąty jest Trigger.dev, który 1 listopada potwierdził dostęp napastnika do zmiennych środowiskowych części organizacji. W dwóch przypadkach zbadanych przez Wiza skradzione klucze sprawdzono w ciągu 30 minut, a potem posłużyły do wywołań modeli za prawdopodobnie ponad 100 tys. dolarów. Stan na 2 listopada 2026 roku, godz. 8:40 czasu polskiego, według komunikatów platform i wpisu Wiza.

Które platformy zgłosiły incydent i kiedy

Dziewięć platform z listy Wiza zgłosiło incydenty między 6 a 30 października, a Trigger.dev dołączył 1 listopada. Wpis Wiza z 30 października podaje daty ujawnienia. W tabeli uzupełniamy je o to, co same firmy napisały w komunikatach, które udało nam się otworzyć.

PlatformaData (wg Wiza albo komunikatu)Co według komunikatu wyciekło lub było zagrożoneŹródło
Fireworks AI6.10zmienne środowiskowe zadań ewaluacyjnych, w tym klucze API, w ograniczonej liczbie kont klientówkomunikat Fireworks
Andromeda9.10 (wykrycie 13.10)dane uwierzytelniające firmy i części klientówkomunikat Andromedy
Zeabur14–15.103 218 965 rekordów zmiennych środowiskowych i dane 321 810 kontraport wstępny Zeabur
Lightning AI15.10dane uwierzytelniające klientów; platforma odcięta dla wszystkichkomunikat Lightning AI
OpenCode16–17.10klucze dostawców zapisane w Console, 1,4% użytkowników ConsoleBleepingComputer, nasz tekst o OpenCode
Railway20–22.10zmienne środowiskowe w najwyżej 1,85% przestrzeni roboczych, ok. 100 tys.raport wstępny Railway
Warp23.10logi agentów i telemetria ok. 1% użytkownikówBleepingComputer
CommandCode28.10brak szczegółówtylko według Wiza
Northflank30.10wszystkie zmienne środowiskowe trzeba uznać za odszyfrowanestrona statusu Northflank
Trigger.dev1.11zmienne środowiskowe części organizacjikomunikat Trigger.dev

Komunikatów Warpa i CommandCode nie otworzyliśmy u źródła, bo firmy opublikowały je w serwisie X. Trigger.dev nie występuje na liście Wiza i nikt nie powiązał go z pozostałymi incydentami. Wspólna jest kategoria ofiary: platformy, które przechowują sekrety klientów piszących aplikacje z AI.

Co dokładnie wyciekło: zmienne środowiskowe z kluczami

Wyciekły głównie zmienne środowiskowe, czyli ustawienia aplikacji zapisane na platformie zamiast w kodzie. Programiści trzymają w nich klucze API do modeli, hasła do baz danych, tokeny do GitHuba i dane do płatności. Według Wiza wszystkie publiczne raporty opisują ataki nastawione właśnie na zapisane zmienne środowiskowe, zwłaszcza te z dostępem do AI.

Zeabur, Railway, Northflank i Trigger.dev: co podały same firmy

Najdokładniej skalę opisał Zeabur. W raporcie wstępnym z 19 października firma potwierdza odczyt 3 218 965 rekordów zmiennych środowiskowych i danych 321 810 kont. Napastnik wykonywał też polecenia w 865 usługach bazodanowych klientów i według Zeabur czytał na dużą skalę bazy instancji n8n. Przyczyną były długoterminowe dane administracyjne zapisane otwartym tekstem. Zeabur zapowiedział zamknięcie usługi, wszystkie serwery mają przestać działać do 31 grudnia 2026 roku.

Railway podaje, że napastnik był w jego systemach od 20 października, godz. 13:58 UTC, do 22 października, godz. 3:32 UTC. Zmienne mogły wyciec z najwyżej 1,85% przestrzeni roboczych, czyli około 100 tys. Firma zaleca wymianę kluczy wszystkim, którzy założyli konto przed 21 października. Klucze do unieważnienia przekazała dostawcom, m.in. GitHubowi, GitLabowi, Anthropic, OpenAI, OpenRouterowi i Stripe’owi. E-mail od dostawcy o unieważnieniu klucza nie oznacza więc, że ten konkretny klucz wyciekł.

Northflank od początku stawia sprawę najostrzej. Na stronie statusu 30 października o 13:58 UTC firma napisała: “Assume all environment variables have been decrypted”, czyli trzeba założyć, że wszystkie zmienne środowiskowe zostały odszyfrowane. Tego samego dnia o 23:38 UTC dopisała, że użytkownicy zgłaszają nieuprawnione użycie kluczy AI zapisanych na platformie. Do 31 października, godz. 23:31 UTC, Northflank udostępnił wymianę haseł dla kolejnych dodatków: PostgreSQL, MongoDB, MySQL, Redis, MinIO i RabbitMQ. Status incydentu nadal brzmi “Identified”, bez zamknięcia.

Trigger.dev w wpisie CTO Erica Allama z 1 listopada pisze, że zablokował użyty exploit, czyli sposób wykorzystania luki, a napastnik uzyskał dostęp do zmiennych środowiskowych “części organizacji”. Właściciele kont dostali e-maile z instrukcją. Na stronie statusu firma zapowiada więcej szczegółów. Nie podaje liczby organizacji ani sposobu wejścia.

Jak wygląda nadużycie klucza API: LLMJacking według Wiza

LLMJacking to używanie cudzego klucza do modeli językowych na rachunek właściciela, często przez odsprzedaż dostępu. Wiz opisał dwa przypadki kluczy firmowych do AWS Bedrock, których kradzież przypisuje jednej z platform z listy. Obie historie zaczęły się tak samo: w ciągu 30 minut od kradzieży jedno wywołanie modelu sprawdziło, czy klucz działa.

Klucz A nie miał ograniczeń regionalnych. Cztery dni po pierwszym teście ktoś sprawdził na nim dostępne modele, a potem przez 30 godzin wykonał około 800 tys. wywołań, prawie wszystkie udane. Klucz B działał tylko przez amerykańskie profile modeli (us.*). Gdy trafił do puli, która według Wiza wygląda na pulę odsprzedawców, przez kilka godzin odrzucał zapytania wysyłane przez profile globalne. Kiedy napastnicy znaleźli działające ustawienia, wykonali w 13 godzin około 1,7 mln wywołań. Ponad milion się udało, resztę zatrzymały limity regionalne konta.

Według Wiza te dwa przypadki kosztowały razem prawdopodobnie ponad 100 tys. dolarów według cen katalogowych. Profil wywołań przypominał odsprzedawany ruch agentów programistycznych, a Wiz powiązał użycie kluczy z dwoma serwisami, które jawnie sprzedają tani dostęp do modeli. Właściciele mniejszych kluczy też płacili: użytkownicy OpenCode zgłaszali według BleepingComputer nieautoryzowane obciążenia do 1 700 dolarów.

Kto stoi za Black October i czy to jeden atak

Nikt tego nie ustalił. Wiz pisze wprost, że incydentów nie łączy jedna luka ani jedna zależność. Adresy z jego listy wskaźników służyły do testowania skradzionych kluczy, a Wiz nie ma dowodu, że łączą się z samymi włamaniami. Railway uważa swój incydent za część “serii ataków” na platformy, których celem są dostawcy modeli. Fireworks, OpenCode i Warp według Wiza zgłaszały oznaki ataku “roju agentów”, a OpenCode i CommandCode wiążą swoje incydenty z próbą destylacji, czyli trenowania własnego modelu na odpowiedziach cudzego.

Przyczyny są różne. Zeabur zawinił sam, trzymając dane administracyjne otwartym tekstem. Railway opisuje eskalację uprawnień w infrastrukturze budowania aplikacji. Warp według Wiza wskazuje zależność od zewnętrznego dostawcy. Lightning AI padł wcześniej ofiarą ataku na łańcuch dostaw z kampanii Mini Shai-Hulud, o której pisaliśmy przy przejętych akcjach GitHub Actions, które narażały sekrety. We wszystkich przypadkach celem były klucze, które da się zamienić na wywołania modeli i pieniądze.

Co zrobić z kluczem API dziś

Klucz API trzeba unieważnić u dostawcy, który go wydał, a dopiero potem wpisać nowy na platformie. Fireworks ujmuje to tak: samo usunięcie zapisanego sekretu nie unieważnia klucza. Jeśli korzystasz albo korzystałeś z którejś platformy z tabeli:

  1. Unieważnij i wygeneruj od nowa każdy klucz zapisany na platformie: do modeli AI, baz danych, GitHuba, rejestrów obrazów i płatności.
  2. Wpisz nowe klucze w zmiennych środowiskowych i wdróż aplikację ponownie.
  3. Przejrzyj zużycie i rachunki u dostawców modeli co najmniej od połowy września, bo tak zaleca Cloud Security Alliance. Szukaj skoków, nieznanych modeli i nietypowych regionów.
  4. Wyłącz publiczny dostęp do baz danych, jeśli był włączony. Zalecają to Railway i Northflank.
  5. Podejrzane obciążenia zgłoś dostawcy modelu. Railway zapowiada, że sam pieniędzy nie zwróci, ale może poprzeć wniosek.

Limity wydatków i alerty u dostawców modeli

Limit wydatków ogranicza szkodę po kradzieży klucza, jeśli jest twardy, czyli zatrzymuje ruch po przekroczeniu kwoty. Sam alert tylko powiadamia. U OpenAI ustawisz go w Organization limits albo w ustawieniach projektu: w sekcji Spend wybierasz Edit spend limit, wpisujesz Monthly spend limit i włączasz Enforce a hard limit. Dokumentacja zaznacza, że alert o wydatkach limitu nie egzekwuje, a twardy limit działa z małym opóźnieniem.

U Anthropic limit ustawiasz na stronie Billing w Claude Console, w sekcji Spend limits. Można go ustawić niżej niż limit progu konta, także dla pojedynczej przestrzeni roboczej. Google Cloud ma budżety z limitem wydatków dla Gemini API i Vertex AI. Taki limit obejmuje jeden projekt i jedną usługę, a po przekroczeniu wstrzymuje nowe użycie.

Najwięcej uwagi wymaga AWS. Według dokumentacji dane w AWS Budgets odświeżają się do trzech razy dziennie, co 8–12 godzin. Przy tempie z przypadku A alert budżetu mógł przyjść dopiero po setkach tysięcy wywołań. To nasz wniosek z dokumentacji, Wiz go nie formułuje. Że alarmy kosztów w AWS potrafią milczeć, pokazał też opisywany przez nas rachunek 30 tys. dolarów za Claude’a w Bedrocku. Przypadek B pokazuje, co działa szybciej: wąska polityka uprawnień i limity regionalne zatrzymały część ruchu, zanim ktokolwiek zareagował.

Jeśli żadnej z tych platform nie używasz

Ten sam schemat dotyczy każdego miejsca, w którym leży twój klucz API: bramki do modeli, CI, rozszerzenia edytora, narzędzia do automatyzacji. W październiku klucze wyciekały też przez złośliwą wersję LiteLLM i podrobione rozszerzenie Claude Code w Cursorze. Cloud Security Alliance zaleca osobny klucz dla każdej platformy i aplikacji oraz limit wydatków blisko oczekiwanego zużycia. Wtedy po wycieku z jednej usługi unieważniasz jeden klucz, a nie wszystkie, a rachunek ma sufit.

Devstock { dla firm }

Co możemy zrobić dla Twojej firmy?

Budujemy strony, sklepy i aplikacje, łączymy systemy z KSeF i księgowością, wdrażamy automatyzacje i agentów AI, a na koniec dbamy o widoczność w Google. Zaczynamy od rozmowy o tym, co dziś zabiera Twojemu zespołowi najwięcej czasu.

strony i sklepyaplikacjeKSeF i integracjeautomatyzacjeagenci AISEO
Zobacz, co robimy dla firm → Software house, który prowadzi ten blog

Podsumowanie

Black October pokazał, że klucze zapisane na platformie wdrożeniowej mogą trafić do odsprzedawców, zanim właściciel dowie się o włamaniu. Co najmniej dziesięć platform dla programistów AI zgłosiło od 6 października do 1 listopada 2026 roku incydenty bezpieczeństwa, w większości związane z dostępem do zmiennych środowiskowych. Największą skalę ze szczegółami opisał Zeabur, który zamyka działalność, a Northflank każe uznać wszystkie zmienne za odszyfrowane. Wiz nie wskazuje jednego sprawcy ani wspólnej luki. Kto trzymał sekrety na którejś z tych platform, powinien unieważnić je u wystawcy, przejrzeć rachunki od połowy września i ustawić twardy limit wydatków. Pozostałym zostaje osobny klucz dla każdej usługi i limit, który zatrzymuje ruch.

Co dalej

Więcej z działu Bezpieczeństwo