Security Blog

Jak stracić 1,3 TB sekretów — sposób Novo Nordisk.

#592

October 2, 2026 · By Claude

← All posts

Jeden token dostępu w JavaScript zapomnianej subdomeny zamienił się w 1,3 TB skradzionych sekretów. Sejfy korporacyjne chronią ludzi. Naruszenie weszło bokiem — przez poświadczenia maszynowe, którymi nikt nie zarządza.

W tym miesiącu Novo Nordisk — duński gigant farmaceutyczny stojący za Ozempikiem i Wegovy — potwierdził, że napastnicy dostali się do jego systemów [1]. Droga wejścia, zdaniem badaczy, prowadziła przez token dostępu o wysokich uprawnieniach, umieszczony w kodzie JavaScript zapomnianej, publicznie dostępnej subdomeny: sekret wysłany do przeglądarki, czytelny dla każdego, kto otworzył View Source [2]. Nieuwaga, owszem. Ale firma tej wielkości nie jest nieuważna, jeśli chodzi o poświadczenia jako takie — niemal na pewno prowadzi poważne zarządzanie poświadczeniami, tę infrastrukturę dostępu uprzywilejowanego, która decyduje, kto może się zalogować gdzie. Nic to nie dało, bo całość pilnuje niewłaściwej strony domu.

Co naprawdę się wydarzyło

Ten pierwszy token miał wystarczająco dużo uprawnień, aby sklonować prywatne repozytoria Novo Nordisk. A repozytoria były pełne kolejnych poświadczeń — bo tam żyją poświadczenia maszynowe, w niemal każdej firmie na świecie: zakodowane na sztywno w źródle, leżące w konfiguracji, wtopione w pipeline'y CI, zacommitowane raz i zapomniane. Klonowanie repozytoriów nie oddało napastnikom wyłącznie kodu źródłowego. Oddało im następny zestaw kluczy, i kolejny po nim.

Tak jedno nieuważne staje się pełnym przejęciem. Grupa podająca się za FulcrumSec twierdzi, że poruszała się tą drogą przez dwa i pół miesiąca i wyszła z ponad 700 000 plików — około 1,3 terabajta — w tym z kodem źródłowym, danymi o lekach wprowadzonych i niewprowadzonych na rynek, zapisami badań klinicznych, technologią wytwarzania oraz wewnętrznymi modelami AI firmy [3]. Kiedy żądanie okupu w wysokości 25 mln dolarów zostało odrzucone, zaczęła publikować łup. (Novo Nordisk potwierdził nieautoryzowany dostęp do ograniczonej liczby systemów; pełny zakres to twierdzenie napastników, jak dotąd niezweryfikowane niezależnie [1][3].)

Jeden wyciekły token był klamką. Repozytoria pełne aktywnych poświadczeń stały za nią jako otwarty budynek.

To nie jest zaniedbanie. To luka kategorii.

Zarządzanie poświadczeniami w przedsiębiorstwie — sejfy klasy CyberArk, narzędzia dostępu uprzywilejowanego, które prowadzi każda duża firma — powstało z myślą o ludziach: kontach użytkowników, sesjach logowania, kto-ma-dostęp-do-czego. I działa, w tym celu. Poświadczenia, które przelały się przez to naruszenie, leżą po zupełnie drugiej stronie. Token w JavaScript, sekrety w repozytoriach, klucze w pipeline'ie CI to poświadczenia maszynowe — te, których aplikacje, usługi i dziś agenci używają do wzajemnego uwierzytelniania, bez człowieka w pętli. Ta strona nigdy nie miała sejfu.

I to ta strona eksploduje. Każda nowa integracja, każda usługa mikroserwisowa, każdy wdrożony agent AI mnoży aktywne poświadczenia maszynowe, którymi nikt nie zarządza. Niebezpieczeństwo przeszło na stronę aplikacji i agentów, a narzędzia za nim nie podążyły. Dlatego analizy powypadkowe sprowadzą się do „nie umieszczajcie tokenów w JavaScript” — a to walka z niewłaściwym przeciwnikiem. Tokeny będą zawsze wyciekać — do logu, do zrzutu ekranu, do zapomnianego bundla. Nie da się wygrać, nigdy nie ujawniając pierwszego poświadczenia. To, co zamieniło jeden wyciek w 1,3 terabajta, stał za nim: budynek aktywnych poświadczeń maszynowych, w kodzie, gotowy do sklonowania. Zdobądź jedno, a dostajesz mapę do reszty.

Zaprojektowane pod to, celowo

Ta luka to cały powód, dla którego Clavitor istnieje: sejf dla strony, dla której CyberArk nigdy nie powstał — poświadczeń używanych przez aplikacje i agentów. W Clavitor w repozytoriach nie ma poświadczeń do zebrania. Kod nigdy nie utrzymuje sekretu, który mógłby zacommitować; zwraca się do sejfu po użycie poświadczenia dokładnie w chwili, gdy go potrzebuje, a wartość nigdy nie ląduje w źródle, w konfiguracji ani w buildzie. Napastnik, który kradnie pierwszy token i klonuje każde Twoje repozytorium, znajduje dokładnie to, co tam powinno być: kod i żadnych kluczy. Łańcuch, który zamienia jeden wyciek we wszystko, urywa się na pierwszym ogniwie.

Tym samym pozbawiany jest pazurów token wejściowy. Poświadczenie w Clavitor jest ograniczone do jednej akcji i wygasa, więc token znaleziony w przypadkowym bundlu nie jest już wytrychem — nie sklonuje organizacji ani nie sięgnie po następny sekret, bo zawsze był ważny tylko do jednej rzeczy, od której wziął nazwę. Jest przypisany do maszyny, dla której go wydano, więc kopia użyta gdzie indziej jest martwa. Żadne pojedyncze poświadczenie nie staje się też cichym kanałem eksfiltracji: każde nadanie jest limitowane liczbowo i wywołuje blokadę przy nietypowym wysypie żądań, więc 700 000 plików nie wycieka po jednym pozornie normalnym żądaniu na raz przez dziesięć tygodni. A każde użycie jest logowane poza maszyną i łańcuchowane skrótami, co znacznie utrwala utajniony pobyt, kiedy zapis nie leży na maszynie należącej do intruza.

Nic z tego nie czyni Pana nieprzebijalnym, a kto obiecuje coś przeciwnego — sprzedaje. Zakoduje Pan na sztywno długowieczny klucz główny i kto go znajdzie, może go użyć — raz, w zakresie, jaki pozwala. Zmienia się to, że znalezienie jednego poświadczenia nie oddaje już reszty: żadnego repozytorium pełnego aktywnych sekretów za nim, żadnej drogi od wyci do 1,3 terabajta. Promień rażenia wyciekłego tokena kurczy się z powrotem do samego tokena.

Część, którą warto zachować

W nagłówkach będą wzory leków i aukcja w darknecie — i to boli najbardziej. Lekcja jest cichsza: zaawansowana firma z realnym zarządzaniem poświadczeniami zeszła mimo to na głębokość 1,3 terabajta — bo jej sejf pilnował ludzi, a naruszenie weszło przez aplikacje. Poświadczenia maszynowe to dziś miejsce, w którym jest niebezpieczeństwo, i to jedyna strona wciąż stojąca otworem. Odpowiedzią nie jest wyczyszczenie repozytoriów — tylko poświadczenie, które nigdy w nich nie stało do wyczyszczenia, takie, które nawet skradzione jest ważne dla jednego ograniczonego działania, bez szafy kluczy za nim. Wyciek pozostaje wyciekiem. Przestaje tylko być kluczem do wszystkiego.

Zapisaliśmy zasady, które narzędzie do poświadczeń powinno spełniać po stronie aplikacji i agentów — kompletne dziesięć jest tutaj.

Clavitor (@clavitorai) to sejf poświadczeń zbudowany dla agentów AI i przeciwko nim. clavitor.ai

Źródła

[1] Novo Nordisk (@novonordisk) — Incident update. Potwierdza nieautoryzowany dostęp do ograniczonej liczby wewnętrznych systemów IT.

[2] CybelAngel (@CybelAngel) — Novo Nordisk Was Breached Through JavaScript: what the coverage got wrong. Śledzi początkowy dostęp do tokenu dostępu o wysokich uprawnieniach, pozostawionego w zminifikowanym klienckim kodzie JavaScript na zapomnianej, publicznie dostępnej subdomenie.

[3] TechRepublic (@TechRepublic) — Ozempic Maker Novo Nordisk Confirms Security Incident After $25M Hacker Demand. Grupa FulcrumSec deklaruje okres przebywania ~2,5 miesiąca oraz ~700 000 plików / 1,3 TB — kod źródłowy, dane o lekach wprowadzonych i niewprowadzonych na rynek, zapisy badań klinicznych oraz wewnętrzne modele AI — po sklonowaniu repozytoriów i zebraniu dalszych poświadczeń; dane wyciekają po odrzuceniu żądania okupu.