Вредонос GlassWorm скомпрометировал сотни репозиториев кода. Доверие разработчиков ПО друг к друг выходит им боком
Зловредная программа, эксплуатирующая особенности популярных репозиториев кода, продолжает расползаться по различным платформам, пытаясь массово «удить» приватные данные.
Пластун злонамеренный
Получивший скандальную известность вредонос GlassWorm скомпрометировал уже более 400 репозиториев кода на крупнейших платформах, таких как GitHub, npm, VSCode и OpenVSX.
GlassWorm впервые попал в сводки в октябре 2025 г. Злоумышленники использовали «невидимые» символы Unicode для того, чтобы скрывать вредоносный код, воровавший данные о криптокошельках и реквизиты доступа разработчиков, использовавших вышеперечисленные репозитории.
Исследователи компаний Aikido, Socket, Step Security, а также сообщества OpenSourceMalware наблюдали несколько волн, в ходе каждой из которых злоумышленники вносили некоторые изменения во вредонос и его modus operandi. Кое-что оставалось, впрочем, неизменным: операторы кампании использовали один и тот же адрес на блокчейне Solana в качестве управляющего сервера и (примерно) одну и ту же базовую инфраструктуру.
Хотя изначально GlassWorm был нацелен на Windows, системы под macOS в итоге тоже оказались в прицеле: сначала через троянизированные версии криптокошельков Trezor и Ledger, а затем — через скомпрометированные расширения в OpenVSX (во втором случае злоумышленники стремились скомпрометировать разработчиков ПО под macOS).
Самая последняя волна стала наиболее масштабной из всех предшествующих: злоумышленникам удалось подсадить вредонос в 200 Python-репозиториях GitHub; 151 репозитории JS/TS в том же GitHub, 72 расширениях VSCode/OpenVSX, а также 10 пакетах npm.
Всего скомпрометированными оказались 433 репозитория.
Эксплуатация доверия
Первые атаки были нацелены на GitHub: через скомпрометированные аккаунты разработчиков злоумышленники внедрили вредоносные коммиты. Затем последовала публикация вредоносных пакетов и расширений в npm и VSCode/OpenVSX, где снова применялись «невидимые» символы Unicode для обеспечения скрытности.
Во всех случаях и на всех платформах вредоносные компоненты каждые пять секунд отправляли запросы к блокчейну Solana на предмет новых инструкций.
Между 27 ноября 2025 г. и 13 марта 2026 г. отмечены 50 новых транзакций: в большинстве случаев это были просто обновления URL-адреса, по которому располагалась «полезная нагрузка». Эти инструкции внедрялись как сопроводительные замечания (memo) к транзакции. В конечном счёте клиент вредоноса скачивал среду выполнения на Node.js и запускал в нём написанный на JavaScript инфостилер.
На данный момент вредонос пытается похитить не только данные криптокошельков и реквизиты доступа, но и токены доступа, SSH-ключи и данные о среде разработки, в которой работает жертва.
Анализ комментариев в коде указывает на то, что родным языком создателей GlassWorm является русский; если вредонос обнаруживает русскую локаль (язык интерфейса операционной системы), он не запускается. Тем не менее, исследователи не торопятся с однозначной атрибуцией.
«Создатели GlassWorm эксплуатируют не просто репозитории, но и доверие разработчиков открытого ПО друг к другу, — доверие, которое теперь выходит им боком, — говорит Дмитрий Пешков, эксперт по информационной безопасности компании SEQ. — Экосистема со временем адаптируется, пока же самый надежный вариант защиты — это регулярный аудит внешних компонентов и библиотек, которые используются в их собственном коде».
В компании Step Security порекомендовали разработчикам под Python, которые используют GitHub или клонированные с него репозитории, проверить свой пул кода поиском: последовательность символов lzcdrtfxyqiplpd на данный момент является индикатором заражения GlassWorm.
Другим признаком является присутствие файла ~/init.json, который обеспечивает «червю» постоянство присутствия, а также внеплановые установки Node.js в домашнем каталоге (например, ~/node-v22*).
В проектах недавно склонированных из GitHub также стоит поискать подозрительные файлы i.js, и провести аудито логов Git на предмет аномалий — например, несоответствие дат.




