DirtyBlanket: поддельные пакеты Express в npm разносят самораспространяющийся Linux-червь
29 сентября 2026 года исследователи SafeDep описали кампанию, которую они назвали DirtyBlanket. За 33 минуты — с 06:05 до 06:38 UTC — учётная запись npm dirtyblanket опубликовала девять вредоносных пакетов. Восемь из них подделывают популярный фреймворк Express (xeprews, express-javascript, express-nodejs, exprdd, exprrdd, exptrdd, exptred, exptredd), девятый — React (react-nodejs).
Цепочка заражения
Во всех девяти пакетах прописан один и тот же хук preinstall. При установке на Linux он через веб-архив Wayback Machine загружает скрипт node.js из репозитория hellscripter на Codeberg и запускает его. Расчёт тонкий: многие списки доверенных адресов пропускают web.archive.org, а архивная копия остаётся доступной, даже если исходный репозиторий удалят.
Скрипт node.js реагирует только на Linux (ветка для Windows закомментирована — очевидно, автор планирует её позже) и скачивает основного червя linux.sh. Ошибки он глушит, так что установка завершается без единого подозрительного сообщения в консоли.
Что делает червь
linux.sh — сценарий на Bash в 227 строк, работающий с правами того, кто запустил npm install. Под root он доустанавливает Tor, OpenSSH, git и инструменты сборки, после чего разворачивает бэкдор. Тот выдаёт себя за системную службу: бинарный файл сохраняется рядом с настоящими компонентами systemd под именем systemd-fontrenderd, служба описывается как «Font Rendering Service», а файлы помечаются флагом неизменяемости chattr +i, чтобы их нельзя было ни изменить, ни удалить.
Сам бэкдор — это открытый инструмент удалённого доступа CHAOS, собранный на Go. Он связывается с управляющим сервером в сети Tor (адрес .onion), даёт оператору командную оболочку, доступ к файлам и снимки экрана.
Самораспространение
Червь оправдывает своё название. Он собирает все закрытые SSH-ключи на машине и списки known_hosts (включая каталоги пользователей Windows под WSL), пытается войти на известные хосты и запустить себя там. Он обращается к AUR, находит пакеты, которыми владеет жертва, и добавляет в них строку, запускающую червя при установке или обновлении. Наконец, он использует найденные токены .npmrc, чтобы опубликовать новые заражённые версии npm-пакетов жертвы — с тем же хуком preinstall.
Каждый новый хост, каждый пакет AUR и каждая новая версия в npm снова запускают всю цепочку.
Вывод
Если на Linux-машине был установлен хотя бы один из этих пакетов, SafeDep советует считать скомпрометированными и саму машину, и все хранящиеся на ней ключи и токены. Особенно уязвимы ноутбуки разработчиков и раннеры CI, где обычно есть и SSH-ключи, и права на публикацию пакетов.
Источник: Lobsters
Комментарии
Войдите, чтобы комментировать.