Сложная атака на цепочку поставок программного обеспечения, получившая название ForceMemo, активно компрометирует сотни репозиториев Python, используя украденные токены доступа GitHub. Эта кампания представляет собой новую эволюцию более широкой операции вредоносного ПО GlassWorm. По данным компании по безопасности цепочки поставок программного обеспечения StepSecurity, злоумышленники используют скомпрометированные учетные данные разработчиков для получения доступа к аккаунтам, а затем злонамеренно перебазируют последние легитимные коммиты в основной ветке репозитория. Злоумышленники добавляют обфусцированный вредоносный код в ключевые файлы, такие как `setup.py`, `main.py` и `app.py`, перед тем как принудительно отправить (force-push) измененные коммиты обратно в GitHub. Что особенно важно, этот метод сохраняет метаданные оригинального коммита — включая сообщение, автора и дату — что затрудняет обнаружение вредоносных внедрений с первого взгляда. Кампания специально нацелена на широкий спектр проектов Python, включая приложения Django, код для исследований в области машинного обучения, дашборды Streamlit и пакеты PyPI. Любой разработчик, который впоследствии запустит `pip install` из скомпрометированного репозитория или клонирует и выполнит код, непреднамеренно активирует вредоносное ПО.
Техническое выполнение атаки ForceMemo разворачивается по расчетливому четырехэтапному процессу. Сначала злоумышленники компрометируют учетную запись разработчика, скорее всего, с помощью украденных персональных токенов доступа GitHub или учетных данных OAuth. Получив права на запись, они затем извлекают последний коммит из основной ветки репозитория. На третьем, наиболее критическом этапе, они перебазируют этот коммит, внедряя обфусцированный вредоносный код в целевые файлы, прежде чем принудительно отправить измененную историю в удаленный репозиторий. Этот «принудительный пуш» перезаписывает существующую историю ветки, фактически встраивая вредоносное ПО в lineage проекта. StepSecurity сообщает, что самые ранние наблюдаемые внедрения датируются 8 марта 2026 года. Однако анализ блокчейна показывает, что инфраструктура командования и управления (C2) была активна гораздо раньше; транзакции на адрес кошелька Solana злоумышленника начались 27 ноября 2025 года — более чем за три месяца до этого. На этом кошельке было зафиксировано около 50 транзакций, причем злоумышленник часто обновлял URL полезной нагрузки, размещенный там, иногда несколько раз в день, чтобы сохранить контроль и избежать блокировок.
Кампания ForceMemo происходит не изолированно, а является частью устойчивого и многогранного наступления со стороны угрозы GlassWorm. Параллельно компания безопасности Socket идентифицировала отдельную итерацию GlassWorm, нацеленную на экосистему разработки через расширения Visual Studio Code. Этот вариант использует те же основные тактики, но повышает свою живучесть и скрытность, злоупотребляя механизмами `extensionPack` и `extensionDependencies`. Это создает модель транзитивного распространения, при которой установка, казалось бы, безобидного расширения может вызвать загрузку вредоносной зависимости. В параллельном открытии компания Aikido Security связала GlassWorm с отдельной массовой кампанией, которая скомпрометировала более 151 репозитория GitHub, скрывая вредоносный код с помощью невидимых символов Unicode. Что интересно, декодированная полезная нагрузка из этих атак также настроена на получение инструкций с того же адреса кошелька Solana, который использовался в атаках ForceMemo, что strongly указывает на единого, скоординированного злоумышленника, стоящего за этими разнообразными методами.
Схождение этих атак — нацеливание на репозитории GitHub через украденные токены, злоупотребление моделями доверия расширений VS Code и сокрытие кода с помощью уловок Unicode — сигнализирует о зрелом и адаптивном субъекте угрозы, глубоко сфокусированном на целостности цепочки поставок программного обеспечения. Основная цель, по-видимому, заключается в создании постоянного плацдарма в средах разработки для потенциальной кражи учетных данных, интеллектуальной собственности или обеспечения дальнейшего проникновения в сеть. Для разработчиков и организаций последствия серьезны. Это подчеркивает критическую важность защиты учетных записей GitHub с помощью надежных уникальных паролей, включения двухфакторной аутентификации и тщательного аудита персональных токенов доступа и разрешений приложений OAuth. Кроме того, организации должны внедрить надежный мониторинг аномальной активности в репозиториях, такой как принудительные пуши из незнакомых мест, и рассмотреть возможность использования инструментов, способных обнаруживать обфусцированный код и подозрительные зависимости в их жизненном цикле разработки программного обеспечения.



