Одиннадцатого мая 2026 года была осуществлена скоординированная атака на цепочку поставок программного обеспечения, в ходе которой злоумышленники отравили 170 легитимных пакетов в репозиториях npm и PyPI всего за пять часов. Этот инцидент затронул не только разработчиков, использующих популярные модули, но и пользователей эмулятора игровой приставки Nintendo Wii U, что делает атаку одной из самых масштабных и сложных за последнее время.
Описание
Специалисты компании SafeDep, занимающейся безопасностью цепочек поставок, документировали ключевые жертвы этой кампании. Среди наиболее заметных - вредоносные версии пакета @tanstack/react-router, который еженедельно загружают более трёх миллионов раз. Они были опубликованы с использованием скомпрометированных токенов npm, а также через прямой коммит в официальный репозиторий на GitHub. Одновременно на PyPI попал бэкдорированный пакет mistralai версии 2.4.6, не имеющий соответствующей метки в системе контроля версий. Самое удивительное заключалось в том, что встроенная полезная нагрузка под названием transformers.pyz была обнаружена не только в Python-пакетах, но и на странице релизов эмулятора Cemu для Wii U - проекта, никак не связанного с библиотеками машинного обучения.
При детальном разборе стало ясно, что тот же самый файл transformers.pyz встраивался в образ AppImage эмулятора Cemu версии 2.6. Этот образ был размещён на официальной странице релизов проекта, но загружен не автоматизированной системой, а учётной записью пользователя с ником MangelSpec. Внутри AppImage был спрятан каталог с Python-скриптами startup.pyz, который представлял собой переименованный архив, запускаемый системным интерпретатором Python. Внутри архива обнаружились модули для сбора учётных данных из облачных провайдеров (AWS, Azure, GCP), Kubernetes, файловой системы, а также менеджеров паролей вроде 1Password и Bitwarden.
Исследование страницы релизов Cemu показало, что macOS- и Windows-сборки остались нетронутыми - они были загружены ботом ещё в феврале 2025 года. А вот два Linux-образа (AppImage и zip-архив) удалили и повторно загрузили 7-8 мая 2026 года уже под учётной записью MangelSpec. Замена произошла напрямую через API GitHub, минуя механизмы непрерывной интеграции. Это исключает популярный сценарий кражи токенов GITHUB_TOKEN во время сборки: в ветке репозитория не было запущено ни одного workflow, который мог бы выдать такой токен. Значит, злоумышленники получили доступ к ключам человека, обладающего прямыми правами на запись в репозиторий.
Представители проекта Cemu подтвердили, что MangelSpec был долгосрочным соавтором, чья учётная запись или токен оказались скомпрометированы. Вредоносные Linux-сборки успели скачать 19 897 раз, и это число - только для AppImage. Второй образ в формате zip набрал ещё почти две тысячи загрузок.
Вредоносный код содержал несколько степеней защиты от анализа. Он запускался только на Linux-системах, немедленно завершая работу, если язык интерфейса оказывался русским или количество ядер процессора было меньше четырёх. Для Образ zip-версии использовал двухстадийный механизм: при первом запуске скрипт создавал файл-маркер и аварийно завершал работу, имитируя сбой. Только при повторном выполнении payload активировался полностью, что помогало обойти автоматические песочницы, запускающие код однократно.
После всех проверок на диске создавался файл pgmonitor.py, маскирующийся под инструмент мониторинга PostgreSQL, и регистрировался сервис systemd с именем pgsql-monitor.service. Затем начинался сбор учётных данных из облачных хранилищ, секретов Kubernetes, SSH-ключей и менеджеров паролей. Перехваченная информация отправлялась на командный сервер по адресу 83.142.209[.]194. Если этот канал был недоступен, злоумышленники считывали адрес из публичных коммитов на GitHub, зашифрованный с помощью RSA. Крайним запасным вариантом выступало создание нового репозитория на GitHub под учётной записью жертвы со случайным именем из славянской мифологии - туда загружался файл с результатами.
Особую тревогу вызывает наличие геозонированного деструктивного компонента. Для систем, геолоцирующихся в Израиль или Иран, с вероятностью один к шести запускалось принудительное воспроизведение аудио и удаление файлов командой rm -rf /. По крайней мере один пользователь уже сообщил о потере данных в результате этого механизма. В более поздних версиях полезной нрагруки, не затронувших Cemu, команду заменили на rm -rf /*, чтобы обойти защиту современных систем, требующих флага --no-preserve-root.
Группа, назвавшая себя TeamPCP, публично взяла на себя ответственность за эту кампанию. На командном сервере было размещено соответствующее сообщение. Однако SafeDep подчёркивает, что не может оценить достоверность этого заявления и не присваивает атрибуции никакого уровня уверенности.
Данный инцидент показывает, как злоумышленники могут одновременно атаковать несколько экосистем, комбинируя кражу токенов из репозиториев пакетов с компрометацией аккаунтов разработчиков. Тот факт, что одна и та же полезная нагрузка оказалась и в популярном фреймворке для React, и в эмуляторе игровой приставки, говорит о системном подходе: цель была не просто подменить конкретную библиотеку, а получить доступ к как можно большему числу серверов разработчиков и организаций. В таких атаках особую опасность представляют проекты с большим числом загрузок, особенно когда злоумышленники имеют доступ к аккаунтам людей, обладающих правами на прямую публикацию релизов.
Индикаторы компрометации
IPv4
- 83.142.209.194
URLs
- transformers.pyz/startup.pyz
SHA256
- 0f35abda19fb69430c32228465396094b866d887427bf551e353ab31256a9dd6
- 1bf72f05191d849049d4a38fced2277ac5cfc54b7ae591f564e7a14add7c886d
- d07a29c4458d00e42d5d9e6345932592e91644d6b821bacdb7a543c628e0b41a
- f140e76236b96adf7cdc796227af9808665143bc674debb77729fa3e4b8327cc