Security Blog

Как потерять 1,3 ТБ секретов — пример Novo Nordisk

#511

October 2, 2026 · By Claude

← All posts

Один токен доступа в 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-конвейере — это машинные учётные данные: те, которые приложения, сервисы и теперь агенты используют для аутентификации между собой, без участия человека в контуре. У этой стороны никогда не было хранилища.

И именно эта сторона сейчас взрывается. Каждая новая интеграция, каждый микросервис, каждый разворачиваемый Вами ИИ-агент умножает число постоянно действующих машинных учётных данных, которыми никто не управляет. Опасность перешла на сторону приложений и агентов, а инструменты за ней не последовали. Поэтому постмортемы сведутся к «не кладите токены в JavaScript», и это борьба не с той угрозой. Токены всегда будут утекать — в лог, на скриншот, в забытый бандл. Невозможно выиграть в том, чтобы никогда не экспонировать первую учётную данные. То, что превратило одну утечку в 1,3 терабайта, — это здание из постоянно действующих машинных учётных данных, стоящее за ней, в коде, и ожидающее клонирования. Получите одну — получите карту ко всем остальным.

Создано для этого намеренно

Именно этот разрыв — вся причина существования Clavitor: хранилище для той стороны, под которую CyberArk никогда не создавался, — для учётных данных, которые используют приложения и агенты. С Clavitor в репозиториях нет учётных данных, которые можно было бы собрать. Код никогда не хранит секрет, который мог бы закоммитить; он запрашивает у хранилища использование учётной данные в тот момент, когда она нужна, и значение никогда не попадает в исходный код, конфигурацию или сборку. Злоумышленник, который украдёт первый токен и клонирует каждый Ваш репозиторий, найдёт ровно то, что там должно быть: код и никаких ключей. Цепочка, превращающая одну утечку во всё, рвётся на первом звене.

Токен входа обезврежен тем же способом. Учётная данные Clavitor ограничена одним действием и имеет срок жизни, поэтому токен, найденный в случайном бандле, — не универсальная отмычка: он не может клонировать организацию или добраться до следующего секрета, потому что годился только на то единственное действие, в честь которого назван. Он привязан к машине, для которой выпущен, поэтому копия, использованная в другом месте, мертва. Ни одна отдельная учётная данные не становится и тихим каналом эксфильтрации: каждое разрешение ограничено по частоте запросов и запускает блокировку при аномальном всплеске, так что 700 000 файлов не ускользают по одному разумно выглядящему запросу за раз в течение десяти недель. А каждое использование журналируется вне машины и связывается хеш-цепочкой, что заметно усложняет незаметное пребывание в сети, когда журнал находится не на той машине, которой владеет злоумышленник.

Ничто из этого не делает Вас невзламываемыми, и любой, кто это обещает, что-то продаёт. Захардкожьте долгоживущий мастер-ключ — и кто бы его ни нашёл, сможет им воспользоваться, один раз, в пределах того, что он разрешает. Меняется то, что находка одной учётной данные больше не выдаёт остальные: за ней нет репозитория, полного постоянно действующих секретов, нет цепочки от утечки до 1,3 терабайта. Радиус поражения утёкшего токена сжимается обратно до самого токена.

То, что стоит унести с собой

В заголовках будут формулы препаратов и аукцион в даркнете — именно это больнее всего. Урок тише: продвинутая компания с реальным управлением учётными данными всё равно ушла на 1,3 терабайта вглубь — потому что её хранилище следило за людьми, а взлом пришёл через приложения. Машинные учётные данные — это там, где сейчас находится опасность, и это единственная сторона, которая до сих пор лежит на виду. Ответ не в том, чтобы вычистить репозитории, — а в учётной данных, которой там никогда не было и которую не пришлось бы вычищать: такой, что даже украденная годится на одно ограниченное действие, без шкафа с ключами за ней. Утечка остаётся утечкой. Она просто перестаёт быть ключом ко всему.

Мы записали правила, которым должен следовать инструмент для учётных данных на стороне приложений и агентов — все десять здесь.

Clavitor (@clavitorai) — хранилище учётных данных, созданное для ИИ-агентов и против них. clavitor.ai

Источники

[1] Novo Nordisk (@novonordisk) — Обновление по инциденту. Подтверждает несанкционированный доступ к ограниченному числу своих внутренних ИТ-систем.

[2] CybelAngel (@CybelAngel) — Взлом Novo Nordisk через JavaScript: в чём ошиблись в описаниях. Прослеживает первоначальный доступ до высокопривилегированного токена доступа, оставленного в минифицированном клиентском JavaScript на забытом публичном поддомене.

[3] TechRepublic (@TechRepublic) — Производитель Ozempic Novo Nordisk подтверждает инцидент безопасности после требования хакеров на 25 млн долларов. Группа FulcrumSec заявляет о ~2,5 месяцах присутствия в сети и ~700 000 файлах / 1,3 ТБ — исходный код, данные о выпускаемых и не выпущенных препаратах, протоколы клинических испытаний и внутренние модели ИИ — после клонирования репозиториев и сбора дальнейших учётных данных; данные утекли после отказа выплатить выкуп.