Sådan mister man 1,3 TB hemmeligheder — Novo Nordisk-måden.
Et adgangstoken i et glemt subdomænes JavaScript blev til 1,3 TB stjålne hemmeligheder. Enterprise-vaults beskytter mennesker. Bruddet kom ind ad den vej, maskinoplysningerne tager, og dem er der ingen, der styrer.
I denne måned bekræftede Novo Nordisk — det danske medicinalfirma bag Ozempic og Wegovy — at angribere fik adgang til sine systemer [1]. Vejen ind var ifølge forskere et højt privilegeret adgangstoken, der lå i JavaScript'et på et glemt, offentligt tilgængeligt subdomæne: en hemmelighed, der blev sendt til browseren, og som alle kunne læse ved at åbne View Source [2]. Skødesløst, ja. Men en virksomhed i den størrelse er ikke skødesløs med adgangsoplysninger generelt — den kører med al sandsynlighed seriøs håndtering af adgangsoplysninger, den maskineri til privilegeret adgang, der styrer, hvem der kan logge ind hvor. Intet af det betød noget, for det hele vogter den forkerte side af huset.
Hvad der faktisk skete
Det første token var privilegeret nok til at klone Novo Nordisks private repositories. Og repositories var fulde af flere adgangsoplysninger — for det er dér, maskinoplysningerne bor, i næsten enhver virksomhed på jorden: hardcodet i kildekoden, i config, indbygget i CI-pipelines, committet én gang og glemt. At klone repositories gav ikke bare angriberne kildekode. Det gav dem det næste sæt nøgler, og sættet efter det.
Sådan bliver ét skødesløst token til et totalt kompromis. En gruppe, der kalder sig FulcrumSec, siger, at den pivotede på denne måde i to en halv måned og gik derfra med mere end 700.000 filer — cirka 1,3 terabyte — herunder kilkode, data om markedsførte og ureleasede lægemidler, optegnelser fra kliniske forsøg, produktionsteknologi og virksomhedens interne AI-modeller [3]. Da et rapporteret løsepengekrav på 25 millioner dollar blev afvist, begyndte den at udgive byttet. (Novo Nordisk har bekræftet uautoriseret adgang til et begrænset antal systemer; det fulde omfang er angribernes påstand og endnu ikke verificeret uafhængigt [1][3].)
Et lækket token var dørhåndtaget. Repositories fulde af stående adgangsoplysninger var den ulåste bygning bag det.
Det er ikke forsømmelser. Det er et kategorisk hul.
Håndtering af adgangsoplysninger i enterprise-regi — vaults i CyberArk-klassen, værktøjet til privilegeret adgang, som enhver stor virksomhed kører — er bygget til mennesker: menneskelige konti, loginsessioner, hvem-der-kan-nå-hvad. Det virker, til det formål. De adgangsoplysninger, der væltede gennem dette brud, lå på den helt anden side. Tokenet i JavaScript'et, hemmelighederne i repositories, nøglerne i CI-pipelinen er maskinoplysninger — dem apps, tjenester og nu også agenter bruger til at autentificere sig over for hinanden, uden et menneske i loopet. Den side har aldrig haft en vault.
Og det er den side, der eksploderer. Hver ny integration, hver mikrotjeneste, hver AI-agent, du ruller ud, ganger de stående maskinoplysninger op, som ingen styrer. Faren flyttede over på app- og agentsiden, og værktøjet flyttede ikke med. Derfor vil efteranalyserne lande på "put ikke tokens i JavaScript", og det kæmper den forkerte kamp. Tokens vil altid lække — ind i en log, et skærmbillede, en glemt bundle. Du kan ikke vinde på aldrig at eksponere den første adgangsoplysning. Det, der gjorde ét læk til 1,3 terabyte, var bygningen af stående maskinoplysninger bag det, i koden, klar til at blive klonet. Får du én, får du kortet til resten.
Bygget til det, med vilje
Det hul er hele grunden til, at Clavitor findes: en vault for den side, CyberArk aldrig blev bygget til — de adgangsoplysninger, apps og agenter bruger. Med Clavitor er der ingen adgangsoplysninger i repositories at høste. Koden indeholder aldrig en hemmelighed, den kan committe; den beder vaulten om brugen af en adgangsoplysning i det øjeblik, den skal bruge en, og værdien lander aldrig i kildekoden, i config eller i buildet. En angriber, der stjæler det første token og kloner hvert repository, du ejer, finder præcis det, der burde være der: kode, og ingen nøgler. Kæden, der gør ét læk til alt, knækker ved første led.
Indgangstokenet bliver på samme måde gjort ufarligt. En Clavitor-adgangsoplysning er afgrænset til én handling, og den udløber, så et token fundet i en løs bundle ikke er en universalnøgle — det kan ikke klone organisationen eller nå den næste hemmelighed, for det var kun gyldigt til den ene ting, det var navngivet til. Det er bundet til den maskin, det blev udstedt til, så en kopi brugt et andet sted er død. Hverken bliver en enkelt adgangsoplysning til en stille eksfiltreringskanal: hver bevilling er rate-begrænset og udløser en nedlukning ved en afvigende byge, så 700.000 filer ikke slipper ud én rimeligt udseende ad gangen over ti uger. Og hvert brug logges uden for maskinen og hash-kædes, hvilket gør en stille opholdstid langt sværere at gennemføre, når loggen ikke ligger på en maskin, indtrængeren ejer.
Intet af det gør dig ubrydelig, og den, der lover det, sælger. Hardcoder du en langtidsholdbar master-nøgle, kan den, der finder den, bruge den — én gang, til det, den giver adgang til. Det, der ændrer sig, er, at fundet af én adgangsoplysning ikke længere giver resten: intet repository fuld af stående hemmeligheder bag det, ingen kæde fra lækket til de 1,3 terabyte. Skadeomfanget af et lækket token skrumper tilbage til tokenet.
Den del, der er værd at huske
Overskriften bliver lægemiddelformlerne og auktionen på det mørke net, og det er den del, der svier. Læren er mere stille: en sofistikeret virksomhed med rigtig håndtering af adgangsoplysninger gik stadig 1,3 terabyte dybt — for dens vault holdt øje med menneskerne, mens bruddet kom ind ad appsene. Maskinoplysningerne er dér, faren er nu, og de er den ene side, der stadig står i det fri. Svaret er ikke at skrubbe dine repositories rene — det er en adgangsoplysning, der aldrig stod i dem at skrubbe, en som selv når den er stjålet kun er gyldig til én afgrænset handling, uden et skab af nøgler bag sig. Lækket forbliver et læk. Det holder bare op med at være nøglerne til alt.
Vi skrev de regler ned, et værktøj til adgangsoplysninger bør holde på app- og agentsiden — alle ti er her.
Clavitor (@clavitorai) er vaulten til adgangsoplysninger, bygget til AI-agenter — og imod dem. clavitor.ai
Kilder
[1] Novo Nordisk (@novonordisk) — Incident update. Bekræfter uautoriseret adgang til et begrænset antal af sine interne IT-systemer.
[2] CybelAngel (@CybelAngel) — Novo Nordisk Was Breached Through JavaScript: what the coverage got wrong. Sporer den første adgang til et højt privilegeret adgangstoken, der var efterladt i minificeret client-side JavaScript på et glemt, offentligt tilgængeligt subdomæne.
[3] TechRepublic (@TechRepublic) — Ozempic Maker Novo Nordisk Confirms Security Incident After $25M Hacker Demand. Gruppen FulcrumSec hævder en opholdstid på ~2,5 måned og ~700.000 filer / 1,3 TB — kildekode, data om markedsførte og ureleasede lægemidler, optegnelser fra kliniske forsøg og interne AI-modeller — efter kloning af repositories og høst af yderligere adgangsoplysninger; data lækkede, efter at løsepengekravet blev afvist.