Вредонос, который Вы одобрили, потому что не могли его увидеть
GlassWorm прячет полезную нагрузку в невидимых символах Unicode, проходящих проверку кода человеком, а затем считывает учётные данные, оставленные в Вашем рабочем окружении. Невидимый червь не взламывает шифрование. Ему нужен файл.
Ваш ревьюер прочитал pull request. Каждая строка отображалась чистой: обновление версии, небольшой рефакторинг, правка документации. Ничего не выглядело неправильно, потому что неправильная часть так и не была выведена на экран. Она была записана символами Unicode, не имеющими глифа. Невидимо для Ваших глаз, невидимо для diff-представления, невидимо для человеческого подтверждения, на которое до сих пор опирается безопасность цепочки поставок.
Это и есть GlassWorm. С октября исследователи из Koi Security отслеживают первый самораспространяющийся червь, который распространяется через расширения VS Code, и он не остановился [1]. Socket отметил более семидесяти новых вредоносных расширений в каталоге Open VSX с конца января [2]. Загрузчик скрывается в невидимом Unicode, поэтому код проходит проверку, выглядя как рутинная правка.
То, что он делает после установки, — обычное, и именно в этом смысл. Он считывает то, что лежит под рукой. npm-токены. Учётные данные GitHub. Конфигурацию Git. Переменные окружения и секреты CI, открытые в Вашем рабочем окружении. Затем он использует украденные учётные данные, чтобы публиковать новые отравленные пакеты от Вашего имени — так червь и становится червём. Управление и контроль выполняются через транзакции Solana, поэтому сервера, который можно изъять, не существует [3].
Вот как это следует переосмыслить. Никто не взломал @code. Open VSX не был скомпрометирован в классическом смысле. Модель расширений сделала именно то, для чего она создана: Вы устанавливаете помощника, и он выполняется с Вашими правами, внутри Вашего открытого проекта, рядом с Вашими секретами. Эта модель строилась для мира, в котором автор расширения был единственной стороной, которой Вы должны доверять. GlassWorm превращает аккаунт доверенного автора в грузовик доставки и прячет груз в символах, которых Вы не видите. Инструмент не дал сбой. Модель угроз сместилась для всех сразу.
И это приводит к неудобному вопросу о Вашей собственной машине. Когда расширение, которому Вы доверяли, открывает Ваш проект — что там остаётся, что можно забрать?
Для большинства разработчиков ответ: всё. Долгоживущий npm-токен в файле-точке. Персональный токен доступа, который удобное руководство по настройке велело вставить один раз и забыть. Секреты в env-файле, который может прочитать любой процесс на машине. Эти учётные данные лежат в состоянии покоя, ровно там, где выполняется код, и ждут всё, что имеет локальный доступ. Невидимому червю в Вашем редакторе не нужно взламывать шифрование. Ему нужен файл.
Clavitor исходит из противоположного допущения. Учётные данные выдаются в момент, когда они нужны, ограничены ровно той задачей, для которой предназначены, и истекают. Они никогда не записываются в Вашу среду разработки, чтобы быть обнаруженными позже. Поэтому, когда враждебный код просеивает рабочее окружение в поисках ключей, находящихся в покое, там нет постоянного npm-токена, нет бессрочного GitHub PAT, ничего, что пережило бы использованную секунду. Червь открывает ящик, а ящик пуст.
Честная оговорка: учётные данные, находящиеся в активном использовании, остаются действительными, пока используются. Если Ваш сеанс запущен и враждебный код разделяет этот сеанс, он может воспользоваться тем, что активно прямо сейчас, внутри короткого окна и узкой области действия этих учётных данных. Эфемерная выдача с ограничением области действия уменьшает радиус поражения и отсчёт времени. Это не делает безопасной машину, которую Вы передали атакующему. Ничего этого не делает. Но между атакующим, который перехватывает одну ограниченную учётную запись в момент использования, и атакующим, который копирует файл с постоянными ключами и владеет Вами в течение года, лежит большая разница.
Мы составили короткий список того, чего система учётных данных никогда не должна делать. Почти на первом месте: не оставляйте секреты там, где выполняется код. Читайте здесь
Clavitor (@clavitorai) — хранилище учётных данных, созданное для ИИ-агентов и против них. clavitor.ai
Источники
[1] Koi Security — "GlassWorm: The First Self-Propagating Worm Using Invisible Code Hits the Open VSX Marketplace" (исследовательская компания; проверенный аккаунт в X отсутствует)
[2] Socket, через @TheHackersNews — "GlassWorm Supply-Chain Attack Abuses 72 Open VSX Extensions to Target Developers" (@SocketSecurity)
[3] @SecurityWeek — "Supply Chain Attack Targets VS Code Extensions With ‘GlassWorm’ Malware"