Як втратити 1,3 ТБ секретів: урок від Novo Nordisk
Один токен доступу в JavaScript забутого піддомену перетворився на 1,3 ТБ викрадених секретів. Корпоративні сховища захищають людей. А витік зайшов через облікові дані машин, якими ніхто не керує.
Цього місяця Novo Nordisk — данський фармацевтичний гігант, виробник Ozempic і Wegovy — підтвердила, що зловмисники отримали доступ до її систем [1]. Шляхом усередину, за словами дослідників, став токен доступу з високими привілеями, що залишався в JavaScript забутого піддомену, відкритого для зовнішнього доступу: секрет, який потрапляв у браузер і був читабельним для будь-кого, хто відкривав View Source [2]. Недбало, так. Але компанія такого масштабу загалом не є недбалою щодо облікових даних — майже напевно вона має серйозне керування обліковими даними, механізми привілейованого доступу, які регулюють, хто і куди може входити. Нічого з цього не мало значення, бо все це захищає не той бік будинку.
Що насправді сталося
Той перший токен мав достатньо привілеїв, щоб клонувати приватні репозиторії Novo Nordisk. А репозиторії були наповнені ще одними обліковими даними — бо саме там живуть облікові дані машин, майже в кожній компанії світу: захардкоджені у вихідному коді, в конфігураціях, вбудовані в CI-конвеєри, закомічені одного разу і забуті. Клонування репозиторіїв передало зловмисникам не лише вихідний код. Воно передало їм наступний набір ключів, а потім ще один.
Так один необережний токен перетворюється на повну компрометацію. Група, що називає себе FulcrumSec, стверджує, що розвивала доступ таким чином протягом двох із половиною місяців і винесла понад 700 000 файлів — приблизно 1,3 терабайта — зокрема вихідний код, дані про випущені та невипущені препарати, записи клінічних досліджень, виробничі технології та внутрішні моделі штучного інтелекту компанії [3]. Коли вимаганий, за повідомленнями, викуп у 25 мільйонів доларів відхилили, група почала публікувати здобич. (Novo Nordisk підтвердила несанкціонований доступ до обмеженої кількості систем; повний масштаб — це твердження зловмисників, яке ще не підтверджено незалежно [1][3].)
Один виток токена став дверною ручкою. Репозиторії, повні чинних облікових даних, — це незамкнена будівля за нею.
Це не недбалість. Це прогалина в категорії.
Корпоративне керування обліковими даними — сховища рівня CyberArk, інструменти привілейованого доступу, які має кожна велика компанія — створювалося для людей: людські облікові записи, сеанси входу, хто-куди-має-доступ. Для цього воно працює. Облікові дані, що каскадом пройшли через цей витік, були зовсім з іншого боку. Токен у JavaScript, секрети в репозиторіях, ключі в CI-конвеєрі — це облікові дані машин: ті, якими застосунки, сервіси, а тепер і агенти автентифікуються між собою, без участі людини. На тому боці ніколи не було сховища.
І саме той бік вибухово зростає. Кожна нова інтеграція, кожен мікросервіс, кожен AI-агент, якого Ви розгортаєте, множить чинні облікові дані машин, якими ніхто не керує. Небезпека перемістилася на бік застосунків і агентів, а інструменти за нею не пішли. Тому постмортеми зводитимуться до «не кладіть токени в JavaScript», і це боротьба не з тією проблемою. Токени завжди витікатимуть — у лог, скріншот, забутий бандл. Неможливо виграти в тому, щоб ніколи не розкрити перші облікові дані. Те, що перетворило один витік на 1,3 терабайта, — це будівля з чинних облікових даних машин, що стояла за ним, у коді, і чекала на клонування. Отримав один — отримав мапу до решти.
Створено саме для цього, свідомо
Ця прогалина — єдина причина існування Clavitor: сховище для того боку, для якого CyberArk ніколи не створювали, — облікових даних застосунків і агентів. З Clavitor у репозиторіях немає облікових даних, які можна зібрати. Код ніколи не тримає секрету, який міг би закомітити; він просить у сховища використання облікових даних у ту мить, коли воно потрібне, і значення ніколи не потрапляє у вихідний код, конфігурацію чи збірку. Зловмисник, який вкрав перший токен і клонував кожен Ваш репозиторій, знаходить саме те, що там має бути: код і жодних ключів. Ланцюг, що перетворює один витік на все, розривається на першій ланці.
Токен входу знешкоджується так само. Облікові дані Clavitor обмежені однією дією і мають термін дії, тому токен, знайдений у випадковому бандлі, більше не є відмичкою — він не може клонувати організацію чи дістатися до наступного секрету, бо придатний лише для тієї однієї дії, на яку він названий. Він прив'язаний до машини, для якої виданий, тому копія, використана в іншому місці, мертва. Жодні облікові дані не стають і тихим каналом виведення даних: кожен доступ має обмеження частоти та спрацьовує на блокування за аномального сплеску, тож 700 000 файлів не вислизають по одному запиту, що виглядає розумно, протягом десяти тижнів. А кожне використання фіксується поза машиною та з'єднується хеш-ланцюгом, що значно ускладнює тихе перебування в системі, коли журнал не на машині, якою володіє зловмисник.
Нічого з цього не робить Вас невразливим, і будь-хто, хто обіцяє протилежне, щось продає. Захардкодьте довгоживучий майстер-ключ — і будь-хто, хто його знайде, зможе скористатися ним один раз, у межах того, що він дозволяє. Змінюється те, що знахідка одних облікових даних більше не видає решту: за ними немає репозиторію, повного чинних секретів, немає ланцюга від витоку до 1,3 терабайта. Радіус ураження витоку токена знову зводиться до самого токена.
Те, що варто запам'ятати
Заголовки будуть про формули препаратів і аукціон у даркнеті, і саме це болить. Урок тихіший: досконала компанія з реальним керуванням обліковими даними все одно пішла на 1,3 терабайта углиб — бо її сховище стежило за людьми, тоді як витік зайшов через застосунки. Облікові дані машин — це там, де зараз небезпека, і це єдиний бік, що досі лежить просто неба. Відповідь — не вичищати репозиторії, а облікові дані, яких там ніколи не було і які нема чого вичищати: такі, що навіть викрадені придатні лише для однієї обмеженої дії, без шафи ключів за ними. Витік залишається витоком. Він просто більше не є ключем до всього.
Ми записали правила, які має дотримувати інструмент для облікових даних на боці застосунків і агентів — усі десять тут.
Clavitor (@clavitorai) — сховище облікових даних, створене для AI-агентів і проти них. clavitor.ai
Джерела
[1] Novo Nordisk (@novonordisk) — Incident update. Підтверджує несанкціонований доступ до обмеженої кількості внутрішніх ІТ-систем компанії.
[2] CybelAngel (@CybelAngel) — Novo Nordisk Was Breached Through JavaScript: what the coverage got wrong. Простежує початковий доступ до токена з високими привілеями, залишеного в мінімізованому клієнтському JavaScript на забутому піддомені, відкритому для зовнішнього доступу.
[3] TechRepublic (@TechRepublic) — Ozempic Maker Novo Nordisk Confirms Security Incident After $25M Hacker Demand. Група FulcrumSec заявляє про перебування в системі ~2,5 місяця та ~700 000 файлів / 1,3 ТБ — вихідний код, дані про випущені та невипущені препарати, записи клінічних досліджень і внутрішні моделі штучного інтелекту — після клонування репозиторіїв і збору подальших облікових даних; дані почали витікати після відмови платити викуп.