Come perdere 1,3 TB di segreti, alla maniera di Novo Nordisk.
Un access token nel JavaScript di un sottodominio dimenticato è diventato 1,3 TB di segreti rubati. I vault aziendali proteggono le persone. L'intrusione è entrata dalle credenziali delle macchine che nessuno governa.
Questo mese Novo Nordisk — il colosso farmaceutico danese dietro Ozempic e Wegovy — ha confermato che gli aggressori sono entrati nei suoi sistemi [1]. La via d'ingresso, secondo i ricercatori, è stato un access token con privilegi elevati presente nel JavaScript di un sottodominio dimenticato e pubblico: un segreto consegnato al browser, leggibile da chiunque aprisse View Source [2]. Sconsiderato, certo. Ma un'azienda di queste dimensioni non è sconsiderata con le credenziali in generale — con ogni probabilità gestisce un serio credential management, l'infrastruttura di privileged access che stabilisce chi può accedere dove. Nulla di tutto questo è servito, perché tutta questa infrastruttura sorveglia il lato sbagliato della casa.
Cosa è successo davvero
Quel primo token era abbastanza privilegiato da clonare i repository privati di Novo Nordisk. E i repository erano pieni di altre credenziali — perché è lì che vivono le credenziali delle macchine, in quasi ogni azienda al mondo: hard-coded nel sorgente, nei file di config, incorporate nelle pipeline CI, committate una volta e poi dimenticate. Clonare i repository non ha consegnato agli aggressori solo il codice sorgente. Ha consegnato loro il set di chiavi successivo, e quello dopo ancora.
È così che un token sconsiderato diventa un compromissione totale. Un gruppo che si fa chiamare FulcrumSec afferma di aver fatto pivot in questo modo per due mesi e mezzo, uscendo con oltre 700.000 file — circa 1,3 terabyte — tra cui codice sorgente, dati di farmaci commercializzati e non ancora rilasciati, registri di sperimentazioni cliniche, tecnologia produttiva e i modelli AI interni dell'azienda [3]. Quando un riscatto di 25 milioni di dollari è stato rifiutato, il gruppo ha iniziato a pubblicare il bottino. (Novo Nordisk ha confermato l'accesso non autorizzato a un numero limitato di sistemi; la portata completa è una dichiarazione degli aggressori, non ancora verificata in modo indipendente [1][3].)
Un token trapelato era la maniglia della porta. I repository pieni di credenziali attive erano l'edificio aperto dietro di essa.
Non è negligenza. È una lacuna di categoria.
Il credential management aziendale — i vault di livello CyberArk, gli strumenti di privileged access che ogni grande azienda utilizza — è stato costruito per le persone: account umani, sessioni di login, chi può raggiungere cosa. E funziona, per quello. Le credenziali che si sono propagate in questa violazione appartenevano a un lato completamente diverso. Il token nel JavaScript, i segreti nei repository, le chiavi nella pipeline CI sono credenziali delle macchine — quelle che app, servizi e oggi agent usano per autenticarsi tra loro, senza alcun intervento umano. Quel lato non ha mai avuto un vault.
Ed è il lato che sta esplodendo. Ogni nuova integrazione, ogni microservizio, ogni agente AI distribuito moltiplica le credenziali delle macchine attive che nessuno governa. Il pericolo si è spostato sul lato app-e-agent, e gli strumenti non lo hanno seguito. Così i post-mortem si ridurranno a «non mettete i token nel JavaScript», e questo combatte la battaglia sbagliata. I token trapeleranno sempre — in un log, in uno screenshot, in un bundle dimenticato. Non si può vincere sul non esporre mai la prima credenziale. Ciò che ha trasformato una fuga di dati in 1,3 terabyte è stato l'edificio di credenziali delle macchine attive che si trovava dietro, nel codice, in attesa di essere clonato. Ne ottieni una, ottieni la mappa di tutte le altre.
Costruito per questo, di proposito
Quella lacuna è la ragione d'essere di Clavitor: un vault per il lato per cui CyberArk non è mai stato costruito — le credenziali che usano app e agent. Con Clavitor nei repository non ci sono credenziali da raccogliere. Il codice non contiene mai un segreto che potrebbe essere committato: chiede al vault l'uso di una credenziale nel momento in cui gli serve, e il valore non finisce mai nel sorgente, nel config o nel build. Un aggressore che ruba il primo token e clona ogni repository in vostro possesso trova esattamente ciò che dovrebbe esserci: codice, e nessuna chiave. La catena che trasforma una fuga di dati in tutto il resto si spezza al primo anello.
Il token d'ingresso viene disarmato allo stesso modo. Una credenziale Clavitor è limitata a una singola azione e scade, quindi un token trovato in un bundle disperso non è una chiave universale: non può clonare l'organizzazione né raggiungere il segreto successivo, perché è sempre stata valida solo per la singola cosa per cui era stata nominata. È vincolata alla macchina per cui è stata emessa, quindi una copia usata altrove è inutilizzabile. Nessuna singola credenziale diventa nemmeno un canale di esfiltrazione silenzioso: ogni concessione è soggetta a rate limit e attiva un blocco in caso di un picco anomalo, così 700.000 file non sgusciano fuori una richiesta dall'aspetto plausibile alla volta nell'arco di dieci settimane. E ogni utilizzo viene registrato fuori dalla macchina e hash-chained, il che rende una residenza silenziosa molto più difficile da realizzare quando il registro non si trova su una macchina di proprietà dell'intruso.
Niente di tutto questo vi rende inviolabili, e chi lo promette sta vendendo. Se hard-codate una chiave master di lunga durata, chi la trova può usarla, una volta, per ciò che le è consentito. Ciò che cambia è che trovare una credenziale non consegna più tutte le altre: nessun repository pieno di segreti attivi dietro, nessuna catena dalla fuga di dati ai 1,3 terabyte. Il raggio d'impatto di un token trapelato torna a essere il token stesso.
La parte che vale la pena conservare
Il titolo saranno le formule dei farmaci e l'asta sul dark web, ed è la parte che fa più male. La lezione è più silenziosa: un'azienda sofisticata, con un vero credential management, è comunque arrivata in profondità fino a 1,3 terabyte — perché il suo vault sorvegliava le persone mentre la violazione entrava dalle app. Le credenziali delle macchine sono dove si trova oggi il pericolo, e sono l'unico lato ancora esposto all'aperto. La risposta non è ripulire i repository — è una credenziale che non è mai stata attiva al loro interno da ripulire, una che anche se rubata vale per una singola azione circoscritta, senza un armadio di chiavi dietro. La fuga di dati resta una fuga di dati. Smette solo di essere la chiave di tutto.
Abbiamo messo per iscritto le regole che uno strumento per le credenziali dovrebbe rispettare sul lato app-e-agent — le dieci complete sono qui.
Clavitor (@clavitorai) è il credential vault costruito per gli agent AI, e contro di essi. clavitor.ai
Fonti
[1] Novo Nordisk (@novonordisk) — Incident update. Conferma l'accesso non autorizzato a un numero limitato dei suoi sistemi IT interni.
[2] CybelAngel (@CybelAngel) — Novo Nordisk Was Breached Through JavaScript: what the coverage got wrong. Traccia l'accesso iniziale fino a un access token con privilegi elevati lasciato nel JavaScript client-side minificato di un sottodominio pubblico dimenticato.
[3] TechRepublic (@TechRepublic) — Ozempic Maker Novo Nordisk Confirms Security Incident After $25M Hacker Demand. Il gruppo FulcrumSec dichiara una permanenza di circa 2,5 mesi e circa 700.000 file / 1,3 TB — codice sorgente, dati di farmaci commercializzati e non ancora rilasciati, registri di sperimentazioni cliniche e modelli AI interni — dopo aver clonato i repository e raccolto ulteriori credenziali; i dati sono trapelati dopo il rifiuto del riscatto.