The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

При помощи червя Shai-Hulud скомпрометировано 600 NPM-пакетов

25.11.2025 13:44

Зафиксирована вторая атака на пакеты в репозитории NPM, проводимая с использованием модификации самораспространяющегося червя Shai-Hulud, подставляющего вредоносное ПО в зависимости. В результате атаки опубликованы вредоносные выпуски 605 пакетов, насчитывающих в сумме более 100 млн загрузок.

Для проведения атаки злоумышленники путём фишинга перехватили параметры учётной записи сопровождающего одного из популярных пакетов, используемого в качестве зависимости у большого числа пакетов. Воспользовавшись захваченной учётную записью атакующие опубликовали релиз пакета, в который был добавлен код для активации червя при установке поражённого пакета в числе зависимостей. Запущенный червь выполняет поиск учётных данных в текущем окружении, загружая и запуская утилиту TruffleHog.

В случае обнаружения токена подключения к каталогу NPM червь автоматически публикует новые вредоносные релизы для пакетов, разрабатываемых в текущем окружении. Таким способом по цепочке поражается всё дерево зависимостей. Помимо NPM-токена червь сохраняет ключи доступа к GitHub и облачным сервисам AWS, Azure и GCP (Google Cloud Platform), а также переменные окружения и другие конфиденциальные данные, которые способен обнаружить сканер TruffleHog.

Найденные в системе конфиденциальные данные размещаются в GitHub через создание репозиториев с хаотичными именами (например, "qzx15djl71alh6p80h") и фразой "Sha1-Hulud: The Second Coming" в описании, а также в закодированном виде выводятся в логи GitHub Actions. В создаваемом репозитории размещатся файл в формате JSON (например, jsonactionsSecrets.json или contents.json), в котором присутствует строка с закодированной методом base64 информацией о системе, переменными окружения и захваченными данными. Для передачи информации вовне из систем непрерывной интеграции на базе GitHub червь создаёт обработчик GitHub Actions с именем ".github/workflows/formatter_123456789.yml" и настраивает runner с именем SHA1HULUD.

Отличия от похожей сентябрьской атаки сводятся к иному методу подстановки вредоносного кода в пакет. В формируемых червём вредоносных релизах заявляется реализация поддержи JavaScript-платформы Bun. В файл package.json в секцию "preinstall", определяющую скрипты, запускаемые до начала установки, добавляется команда "node setup_bun.js".

В файле "setup_bun.js" присутствует код для выполнения обфусцированного скрипта "bun_environment.js", содержащего код червя. Для своего дальнейшего распространения червь находит код пакетов, вносит изменения в файл package.json (увеличивает номер версии и включает вызов setup_bun.js), добавляет файлы setup_bun.js и bun_environment.js, переупаковывает пакет и выполняет команду "npm publish" для размещения нового релиза.

Среди скомпрометированных популярных пакетов: @zapier/zapier-sdk (2.8 млн загрузок в неделю), @posthog/core (2.8 млн), posthog-node (1.5 млн), @asyncapi/specs (1.4 млн), @postman/tunnel-agent (1.2 млн). Предполагается, что атака началась с компрометации сопровождающего пакет @asyncapi/specs.

  1. Главная ссылка к новости (https://www.reversinglabs.com/...)
  2. OpenNews: Самораспространяющийся червь поразил 187 пакетов в NPM
  3. OpenNews: NPM для усиления защиты уходит от использования TOTP 2FA и классических токенов
  4. OpenNews: Атакующие получили контроль над NPM-пакетами проекта DuckDB и опубликовали вредоносные выпуски
  5. OpenNews: Скомпрометированы 18 NPM-пакетов, насчитывающих более 2 миллиардов загрузок в неделю
  6. OpenNews: Фишинг позволил получить контроль над несколькими популярными NPM-пакетами
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/64322-npm
Ключевые слова: npm, worm, walware
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (29) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.2, Аноним (2), 14:18, 25/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +7 +/
    Никогда не было, и вот опять.¯\_(ツ)_/¯
     
     
  • 2.48, Аноним (48), 16:37, 25/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Это безопасная компрометация, ошибок памяти нету.
     

  • 1.3, Байкал электроникс (-), 14:26, 25/11/2025 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • –2 +/
     

  • 1.5, Аноним (6), 14:27, 25/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Это вполне предсказуемо.
     
  • 1.7, Лиечка (?), 14:28, 25/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    "Если не удается пройти аутентификацию или установить устойчивое присутствие, вредонос пытается уничтожить весь домашний каталог жертвы, включая все файлы, доступные для записи."
     
  • 1.9, Аноним (9), 14:36, 25/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    npm, cargo, PyPI - это одни большие уязвимости. У Go хотя бы подход децентрализованный, как и у C, C++.
     
     
  • 2.14, Rev (ok), 14:49, 25/11/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Но с cargo обычно работают люди с IQ на 20 выше, чем с npm, поэтому там такого не будет.
     
     
  • 3.23, Кошкажена (?), 15:10, 25/11/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Но это не точно.
     
  • 3.37, Аноним (37), 15:44, 25/11/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Не выше 20. Иначе, им Раст был бы незачем.
     
  • 2.25, Кошкажена (?), 15:11, 25/11/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > У Go хотя бы подход децентрализованный

    Угу, это когда исходники тянутся с гитхаба? Это ДЕцентрализованный называется?

     
     
  • 3.30, Аноним (9), 15:29, 25/11/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >Угу, это когда исходники тянутся с гитхаба? Это ДЕцентрализованный называется?

    Я тебе по секрету скажу, что тянуть исходники может не из гитхаба, а из любого другого источника. Просто чаще всего исходники на гитхабе. Но ты можешь их хостить где угодно и go get оттуда их возмёт. То ли дело cargo, тянет только из crates.io. Или тот же PyPI.

     
     
  • 4.34, Rev (ok), 15:40, 25/11/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Cargo тоже может тянуть с гитхаба или другой репы.
     
  • 4.36, анон (-), 15:41, 25/11/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > То ли дело cargo, тянет только из crates.io. Или тот же PyPI.

    будь так добр, предоставь ссылку на документацию, где подтверждается данное утверждение

     
  • 2.32, Аноним (32), 15:36, 25/11/2025 Скрыто ботом-модератором     [к модератору]
  • +/
     

  • 1.10, Аноним (10), 14:38, 25/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Еще один довод юзать *.deb.
     
     
  • 2.17, Анонимный аноним (?), 14:57, 25/11/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Если ты не знал, все исходники js-проги вендорятся в deb-пакет. И тоже самое для Go, и для Rust. Причем во всех дистрах.
     
     
  • 3.18, Аноним (9), 14:59, 25/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    У тебя не будет уязвимости с JS-прогой, если у тебя не будет стоять эта JS-прога. Просто не нужно использовать Electron'нную хрень. Я давно бойкотирую все эти поделки. Только нативный GTK, Qt, wxWidgets.
     
  • 2.22, Кошкажена (?), 15:10, 25/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    На самом деле есть npm (подставь тут любой пакетник) to nix. Плюсом помимо пакетов самого языка можно управлять системными либами, компиляторами и прочим. И все это для конкретных окружений. Сейчас же с тем же pip нужно самому зависимости сборочные ставить, если компилять надо.
     

  • 1.12, X512 (?), 14:42, 25/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Все дружно переходим на Maven.
     
     
  • 2.21, Фонтимос (?), 15:09, 25/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Думаю, это вопрос времени, Ларри вот скоро разрабов выкинет за ворота.
     

  • 1.15, Аноним (15), 14:51, 25/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Так, и как с этим бороться ?
    https://opennet.ru/63930-npm
     
     
  • 2.20, Аноним (20), 15:08, 25/11/2025 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Перестать пользоваться поделками(зачеркнуть) недоделками из NPM?
     

  • 1.19, Кошкажена (?), 15:07, 25/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    npm, pip, cargo и есть сами черви. Сами докатились, что простая задача вытягивает кучу зависимостей. Только ручной клон зависимостей в репу, только хардкор. Обновления только по делу.
     
     
  • 2.38, User (??), 15:46, 25/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > npm, pip, cargo и есть сами черви. Сами докатились, что простая задача
    > вытягивает кучу зависимостей. Только ручной клон зависимостей в репу, только хардкор.
    > Обновления только по делу.

    Ну, у вас не может быть атак на цепочку поставок при отсутствии этой самой цепочки... А если  вот и кода нет - то прям совсем хорошо!

     

  • 1.43, Аноним (43), 15:58, 25/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Всего лишь надо на дискетке переключатель сдвинуть, кто помнит.
     
  • 1.44, Анонис (?), 16:05, 25/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Да! Давайте делать больше веб-приложений, они ведь такие надёжные и безопасные и заодно выкинем слабое железо, оно ведь явно устарело, и небезшопасно, а все ПК-бояре работают только на машинах с 128 террабайт оперативной памяти! Джаба-скрип во все дома!
     
  • 1.46, 1 (??), 16:20, 25/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Представляю, сколько бабла может срубить аффтар leftpad за внедрение такого червя.
     
  • 1.47, Марк Цукерберг (?), 16:25, 25/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    червь-peedor
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2025 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру