Cómo perder 1,3 TB de secretos, a la manera de Novo Nordisk.
Un token de acceso en el JavaScript de un subdominio olvidado se convirtió en 1,3 TB de secretos robados. Las bóvedas corporativas protegen a las personas. La brecha entró por las credenciales de máquina que nadie gobierna.
Este mes Novo Nordisk —el gigante farmacéutico danés detrás de Ozempic y Wegovy— ha confirmado que los atacantes consiguieron entrar en sus sistemas [1]. La vía de entrada, según los investigadores, fue un token de acceso de alto privilegio que estaba en el JavaScript de un subdominio olvidado y accesible al público: un secreto enviado al navegador, legible por cualquiera que abriera View Source [2]. Descuidado, sí. Pero una empresa de este tamaño no es descuidada con las credenciales en general: casi con certeza dispone de una gestión de credenciales seria, de esa maquinaria de acceso privilegiado que determina quién puede iniciar sesión dónde. Nada de eso sirvió, porque todo ello protege el lado equivocado de la casa.
Qué ocurrió realmente
Ese primer token tenía privilegios suficientes para clonar los repositorios privados de Novo Nordisk. Y los repositorios estaban llenos de más credenciales, porque ahí es donde viven las credenciales de máquina en prácticamente todas las empresas del mundo: codificadas de forma fija en el código fuente, metidas en la configuración, incrustadas en los pipelines de CI, incluidas en un commit una vez y olvidadas. Clonar los repositorios no solo entregó a los atacantes el código fuente. Les entregó el siguiente juego de llaves, y el siguiente.
Así es como un token descuidado se convierte en un compromiso total. Un grupo que se hace llamar FulcrumSec afirma que pivotó de esta forma durante dos meses y medio y se marchó con más de 700.000 archivos —unos 1,3 terabytes—, incluidos código fuente, datos de fármacos comercializados y aún no lanzados, registros de ensayos clínicos, tecnología de fabricación y los modelos de IA internos de la compañía [3]. Cuando se rechazó un rescate de 25 millones de dólares, según se ha informado, empezó a publicar el botín. (Novo Nordisk ha confirmado un acceso no autorizado a un número limitado de sistemas; el alcance completo es afirmación de los atacantes, aún no verificada de forma independiente [1][3].)
Un token filtrado era el pomo de la puerta. Los repositorios llenos de credenciales permanentes eran el edificio abierto que había detrás.
No es negligencia. Es un vacío de categoría.
La gestión de credenciales empresarial —las bóvedas de nivel CyberArk, las herramientas de acceso privilegiado que utiliza toda gran empresa— se construyó para personas: cuentas humanas, sesiones de inicio de sesión, quién puede llegar a qué. Y funciona para eso. Las credenciales que se propagaron en esta brecha estaban en el lado completamente opuesto. El token del JavaScript, los secretos de los repositorios, las claves del pipeline de CI son credenciales de máquina: las que usan las aplicaciones, los servicios y ahora los agentes para autenticarse entre sí, sin intervención humana. Ese lado nunca ha tenido una bóveda.
Y es el lado que está explotando. Cada nueva integración, cada microservicio, cada agente de IA que despliega multiplica las credenciales de máquina permanentes que nadie gobierna. El peligro se desplazó al lado de las aplicaciones y los agentes, y las herramientas no lo siguieron. Así que los análisis posteriores concluirán que «no hay que poner tokens en JavaScript», y eso libra la batalla equivocada. Los tokens se filtrarán siempre: en un registro, en una captura de pantalla, en un bundle olvidado. No se puede ganar por nunca exponer la primera credencial. Lo que convirtió una filtración en 1,3 terabytes fue el edificio de credenciales de máquina permanentes que había detrás, en el código, esperando a ser clonadas. Consiga una y obtendrá el mapa del resto.
Construido para esto, de forma deliberada
Ese vacío es la razón de ser de Clavitor: una bóveda para el lado para el que CyberArk nunca se construyó, las credenciales que usan las aplicaciones y los agentes. Con Clavitor no hay credenciales en los repositorios que cosechar. El código nunca contiene un secreto que pueda llegar a un commit; le pide a la bóveda el uso de una credencial en el instante en que la necesita, y el valor nunca aterriza en el código fuente, en la configuración ni en la compilación. Un atacante que robe el primer token y clone todos los repositorios que usted tenga encontrará exactamente lo que debería estar ahí: código, y ninguna clave. La cadena que convierte una filtración en todo se rompe en el primer eslabón.
Al token de entrada se le quitan las garras del mismo modo. Una credencial de Clavitor está acotada a una única acción y caduca, de modo que un token encontrado en un bundle suelto no es una llave maestra: no puede clonar la organización ni llegar al siguiente secreto, porque solo sirvió para la única cosa para la que fue nombrada. Está vinculada a la máquina para la que se emitió, de modo que una copia utilizada en otro lugar queda inerte. Tampoco ninguna credencial individual se convierte en un canal silencioso de exfiltración: cada concesión tiene límite de tasa y activa un bloqueo ante un pico anómalo, de modo que no se escapan 700.000 archivos, una petición de aspecto razonable cada vez, durante diez semanas. Y cada uso queda registrado fuera de la máquina y encadenado mediante hash, lo que dificulta mucho una residencia silenciosa cuando el registro no está en una máquina que posee el intruso.
Nada de esto le hace inmune a una brecha, y quien se lo prometa le está vendiendo algo. Si codifica de forma fija una clave maestra de larga duración, cualquiera que la encuentre podrá usarla, una vez, para lo que esta permita. Lo que cambia es que encontrar una credencial ya no entrega las demás: no hay ningún repositorio lleno de secretos permanentes detrás, ni cadena alguna desde la filtración hasta los 1,3 terabytes. El alcance del daño de un token filtrado vuelve a reducirse al propio token.
Lo que merece la pena retener
El titular serán las fórmulas de los medicamentos y la subasta en la dark web, y esa es la parte que duele. La lección es más silenciosa: una empresa sofisticada, con una gestión de credenciales real, aun así llegó hasta 1,3 terabytes de profundidad, porque su bóveda vigilaba a las personas mientras la brecha entraba por las aplicaciones. Las credenciales de máquina son hoy el peligro, y son el único flanco que sigue a la intemperie. La respuesta no es limpiar a fondo sus repositorios: es una credencial que nunca estuvo permanente en ellos como para tener que limpiarla, una que, incluso robada, solo sirve para una única acción acotada, sin un armario de llaves detrás. La filtración sigue siendo una filtración. Simplemente deja de ser las llaves de todo.
Hemos anotado las reglas que una herramienta de credenciales debería cumplir en el lado de las aplicaciones y los agentes —las diez completas están aquí.
Clavitor (@clavitorai) es la bóveda de credenciales creada para agentes de IA, y contra ellos. clavitor.ai
Fuentes
[1] Novo Nordisk (@novonordisk) — Actualización sobre el incidente. Confirma el acceso no autorizado a un número limitado de sus sistemas internos de TI.
[2] CybelAngel (@CybelAngel) — Novo Nordisk fue atacada a través de JavaScript: lo que la cobertura no entendió bien. Rastrea el acceso inicial hasta un token de acceso de alto privilegio dejado en el JavaScript del lado del cliente, minificado, de un subdominio público olvidado.
[3] TechRepublic (@TechRepublic) — Novo Nordisk, fabricante de Ozempic, confirma un incidente de seguridad tras la exigencia de 25 millones de dólares por parte de unos hackers. El grupo FulcrumSec afirma una permanencia de unos 2,5 meses y unos 700.000 archivos / 1,3 TB —código fuente, datos de fármacos comercializados y aún no lanzados, registros de ensayos clínicos y modelos de IA internos— tras clonar repositorios y cosechar más credenciales; los datos se filtraron después de que se rechazara el rescate.