Шаи хулуд - npm пакети - напад врз синџирот на снабдување

Шаи-Хулуд: Објаснување на црвот за пакети npm

TL; ДР

На 14 септември 2025 година, истражувачите идентификуваа Шаи Хулуд, саморазмножувачки црв скриен внатре npm пакети, претворајќи рутинско ажурирање на зависноста во целосно ажурирање напад на синџирот на снабдувањеПрвпат забележан во @ctrl/tinycolor пакет од Даниел дос Сантос Переира, Шаи-Хулуд собира тајни, ги извлекува низ складиштата и работните процеси на GitHub и се објавува повторно низ регистарот користејќи украдени акредитиви. За неколку дена, бројот на заразени пакети скокна од десетици на стотици, потврдувајќи дека Шајхулуд не е само уште еден тројанец, туку црв дизајниран автоматски да се шири низ npm екосистемот.

Влијание: Секој развивач или CI извршител кој инсталира јавни npm пакети е во опасност.

Непосредни активности: блокирајте познати верзии, префрлете се на инсталации само со заклучување датотеки, ротирајте ги npm и GitHub токените, ревидирајте ги работните процеси и следете ги индикаторите за компромис (IoCs).

Што се случи?

на Напад на синџирот на снабдување Шаи-Хулуд во npm пакети е еден од најреволуционерните инциденти во поново време. За разлика од изолираните тројанци, овој црв се меша кражба на акредитиви, автоматизирана ексфилтрација и саморепликацијаКако резултат на тоа, временската рамка на инфекцијата се намали од недели на само неколку часа.

За DevOps тимовите, лекцијата е јасна: ако секоја инсталација може да изврши код, тогаш секое ажурирање на зависноста е потенцијална точка на прекршување.

Можни почетни векторски и целни акредитиви

Рана анализа укажува дека нападот веројатно започнал со украдени акредитивиНа пример, фишинг кампањи кои лажираат npm login или MFA инструкциите може да ги заробиле токените на програмерите. Откако напаѓачите го добиле тоа прво упориште, црвот се проширил со вградување во npm пакети и крадење повеќе тајни од:

  • npm конфигурациски датотеки како .npmrc, често содржат токени за објавување.
  • Променливи на животната средина и конфигурации со GitHub PATs и CI/CD тајни.
  • Крајни точки на метаподатоци во облак (AWS, GCP, Azure) што дава краткотрајни акредитиви за странично движење.

Затоа, кражбата на акредитиви стана почетна точка. Со валидни npm токени и GitHub тајни, Shai-Hulud можеше да се самореплицира низ повеќе пакети и репозиториуми без дополнителен човечки напор.

Влијание на извршните директори од нападот врз снабдувачкиот синџир Шаи-Хулуд

Шаи-Хулуд е сè уште активен денес. Овој црв го забрзува временската рамка на ударот. Она што некогаш траеше со недели со тројанец сега се одвива за неколку часа. Како резултат на тоа, ширењето е побрзо и потешко за ограничување. Напредува преку:

  • Крадење на npm објавувачки токени и GitHub тајни.
  • Се објавува себеси во други npm пакети.
  • Додавање на злонамерни работни процеси во GitHub Actions за упорност.

Кој е засегнат:

Секој тим што инсталира јавни npm пакети е изложен. Покрај тоа, програмерите со кеширани npm или GitHub токени се соочуваат со висок ризик. CI извршителите што користат тајни со широк опсег се исто така ранливи.

Деловен ризик

Влијанието врз бизнисот брзо расте. Украдените токени можат да доведат до преземање на сметка, киднапирање на пакети, па дури и злоупотреба на облак. Покрај тоа, постојаноста во работните процеси на GitHub го отежнува чистењето. Затоа, тимовите мора да го третираат Шаи-Хулуд како тековен инцидент, а не како завршен.

Како функционира нападот на снабдувачкиот синџир Shai-Hulud во npm пакетите

Цели и мотив на напаѓачот

Кампањата оптимизира за три работи:

  • Првата цел е да крадење на акредитиви во голем обем од лаптопи на програмери и CI извршувачи. Ова вклучува npm објавувачки токени, GitHub токени и cloud акредитиви. Всушност, повеќекратни анализи потврдуваат систематско тајно собирање, како што е извршување на TruffleHog и барање на крајни точки на метаподатоци во cloud.
  • Втората цел е да се пропагирај автоматски со злоупотреба на правата за објавување на компромитирани одржувачи. Како резултат на тоа, едно упориште брзо се шири во многу, бидејќи нови заразени верзии на други пакети се појавуваат без дополнителен човечки напор.
  • Третата цел е да се перзистираат и ексфилтрираат сигурно преку инфраструктурата на GitHub. Напаѓачите креираат јавно складиште наречено „Shai-Hulud“ со двојна база64 податоци.json, и покрај тоа, тие вградуваат работен тек што сериализира ${{ toJSON(тајни) }} и го објавува на статичен вебхук.

Веројатната исплата вклучува долготраен пристап до регистрите и изворниот код, брзо латерално движење во облачни сметки и можност за понатамошно вооружување на синџирот на снабдување. Јавните извештаи покажуваат дека приватните репозиториуми се предадени на јавноста со „-миграција“ суфикс, што ја зголемува изложеноста на податоци и моментумот

Внатре во товарот Шаи-Хулуд: пакет.js во npm пакети

Шаи-Хулуд се испорачува како голем, спакуван во веб-пакет и силно минифициран JavaScript датотека (пакет.js, околу 3–3.7 МБ) што се извршува од постинсталација закачи се пакет.jsonСледствено, Секоја инсталација автоматски го активира товарот. Овој дизајн ги крие идентификаторите, го компресира контролниот тек и ја турка целата логика во еден артефакт што се извршува за време на инсталацијата. Аналитичарите постојано потврдуваат групирање на Webpack, необична големина на датотека и извршување за време на инсталацијата.

Замаглување и анти-анализа карактеристики што ќе ги видите во примероците:

  • Минифициран графикон на модулот со нумерички ID-а на модули, ретки коментари и сплескан контролен тек. Покрај тоа,, Оваа структура го прави рачниот преглед исклучително тежок.
  • Криење на низа преку base64 слоеви и помошници за конструкција. На пример, Повтореното кодирање и декодирање со base64 обично се појавуваат околу рутините за ексфилтрација.
  • Динамично испраќање преку евалуација-стил шеми и генерирани тела на функции, со што се овозможува кодот да го менува однесувањето за време на извршување.
  • Филтрирање на оперативниот систем да се претпочита извршување на Linux и macOS, особено на CI извршувачи и лаптопи за програмери.

Од функционален агол, снопот е модуларен. Во записите се опишани модули за откривање на оперативниот систем, скенирање на датотечен систем и тајни скенирања на git, пристап до cloud SDK, операции на GitHub API и механизам за пропагација што ги уредува другите пакети што ги поседува одржувачот. Всушност, StepSecurity и ReversingLabs истакнуваат функција што автоматски ги ажурира пакетите со малициозната кука.

Извршување во време на инсталација во Shai-Hulud: Како npm пакетите го активираат црвот

Нападот започнува кога постинсталацијата го извршува јазолот пакет.js. Во овој момент, скриптата се иницијализира и ја распакува работната состојба во меморијата, поставувајќи ја сцената за целосно функционирање на црвот.

Откривање и берба

  • Товарот го дампира process.env и ги скенира локалните датотеки за тајни со висока ентропија и префикси на токени. Покрај тоа, го проширува опсегот со извршување на TruffleHog.
  • Ги пребарува крајните точки на метаподатоците во облакот за да собере краткотрајни ингеренции. На пример, повикува на 169.254.169.254 на AWS или metadata.google.internal на GCP често се појавуваат кај заразени домаќини.
  • Како резултат на тоа, Секој пронајден акредитив станува веднаш употреблив за објавување нови npm пакети или поттикнување на работни процеси на GitHub.

Ексфилтрација

  • Црвот создава ново GitHub репозиториум со име Шаи Хулуд и пишува двојно кодирано со база64 data.json со детали за платформата, дампови на околината и тајни. Како што може да се види, ова бучно однесување е лесно да се забележи ако бранителите знаат каде да бараат.
  • Исто така, вградува работен тек на GitHub Actions, честопати на гранка со име шаи-хулуд, што серијализира ${{ toJSON(secrets) }} и ги објавува податоците на статичен веб-хук. Понатаму, овој работен тек продолжува сè додека некој активно не го отстрани.

Размножување

  • Со секој откриен npm токен, payload-от ги набројува сите пакети во сопственост на компромитираниот одржувач. Потоа, го презема секој tarball, инјектира bundle.js и постинсталациски запис и го објавува повторно пакетот.
  • Како резултат на тоа, десетици заразени пакети можат да се појават за само неколку часа, множејќи го радиусот на експлозијата низ екосистемот.

Упорност и изложеност

  • Црвот ги одржува штетните работни процеси активни и, во неколку случаи, ги префрла приватните складишта во јавни со „-миграција“ суфикс. Севкупно, ова му обезбедува на напаѓачот да одржи упориште и го максимизира истекувањето на податоци.

Белешка за откривање на клуч
Оваа необична употреба на ${{ toJSON(secrets) }} работните процеси во Actions се ретки. Затоа, Тимовите треба да го третираат како индикатор за висок сигнал за време на ловот.

Саниран работен образец што треба да го барате

Оваа необична употреба на до JSON (тајни) во Акции е индикатор за висок сигнал во овој инцидент.

Псевдо-код за пропагација на високо ниво (безбеден, описен)

Аналитичарите ја набљудуваа оваа јамка во голем обем, што го објаснува брзиот скок од десетици на стотици заразени пакети.

Зошто ова е црв во екосистем на пакети

Црвот е малициозен софтвер кој се шири сам без да бара рачни чекори од операторот во секоја фаза. Во оперативните системи, црвите обично ги искористуваат мрежните ранливости за да се преместат од една машина на друга. Спротивно на тоа, Shai-Hulud работи во рамките на регистарот npm. Неговиот ефикасен пат е преку повторна употреба на акредитиви.

Црвот ги користи украдените npm publish tokens. Штом добие валидни акредитиви, повторно ги објавува заразените верзии под други пакети во сопственост на истиот одржувач. Последователно, тие пакети ги инсталираат наивни програмери или CI извршители, а циклусот се повторува.

Поради оваа причина, безбедносните аналитичари, вклучувајќи ги и Темно читање, класифицирајте го Шаи-Хулуд како самореплицирачки црв наместо обичен тројанец или инцидент на грешка при пишување. Разликата е важна: тројанец обично компромитира еден домаќин, но црвот автоматски го засилува своето влијание низ екосистемот.

Лист со совети „Како функционира“

За да го сумираме животниот циклус на Шаи-Хулуд, еве еден заклучокcisе. Преглед на неговите главни чекори:

  • Пакет со постинсталација е инсталиран, и bundle.js извршува.
  • Товарот ги вчитува променливите на околината, ги скенира датотеките и историјата на git, извршува Тартуфско свинскои пребарува услуги за метаподатоци во облак. Следствено, секоја пронајдена тајна станува веднаш корисна.
  • Ексфилтрацијата се случува на два начина: прво, со креирање јавно репозиториум со име Шаи Хулуд со двојно кодирано со база64 data.json; второ, со поставување на работен тек на GitHub Actions кој објавува ${{ toJSON(secrets) }} до веб-хук.
  • Користејќи го кој било украден npm токен, црвот ги објавува повторно сите други пакети во сопственост на компромитираниот одржувач со истата злонамерна кука. На овој начин, инфекцијата се размножува брзо.
  • Конечно, напаѓачот чува повеќе тајни, повеќе пакети за ширење и упорност во GitHub сметките и репозиториумите.

Како практично да се избегне овој вид напад

Шаи-Хулуд е повик за будење. Црвот што краде токени и повторно се објавува не е иден ризик, тој е жив во екосистем на npm пакети денес. За да се спречи овој вид на напад на синџирот на снабдување, тимовите имаат потреба од контроли кои се програмабилни, автоматизирани и спроведуваат директно во CI/CD pipelineс. Ова се истите одбрани со кои веќе можете да ги имплементирате Xygeni.

Запрете ги лошите артефакти на портата

Треба да скенирате npm пакети и tarball-ови пред да стигнат до програмерите или CI задачите. Преголеми. bundle.js датотеки, сомнителна постинсталација hooksи маркерите за замаглување служат како рани црвени знамиња. Покрај тоа, спроведувањето на периоди на мирување и закачени верзии во pipelines спречува автоматско консумирање на свежи, непроверени изданија.

Закачам CI/CD стандардно

Guardrails in CI/CD се од суштинско значење. Тие ги отфрлаат спојувањата или инсталациите што воведуваат нови скрипти или бинарни датотеки. Во исто време, тие ги блокираат работните процеси што серијализираат тајни или се обидуваат да објавуваат надворешни објави. Тимовите треба да бараат и инсталации само со заклучување на датотеки (npm ci) низ сите pipelines, така што множествата на зависности остануваат репродуцибилни и безбедни.

Намалете го радиусот на експлозијата на токените

Тајните не смеат да станат единечни точки на грешка. Континуирано скенирајте код, конфигурации и pipeline излез за изложени акредитивиТокените треба да бидат ограничени со тесен опсег, со краток век на траење и автоматски да се ротираат кога ќе се открие изложеност. Како по правило, секој токен што се користи на хост што извршил сомнителна постинсталација треба да се третира како компромитиран.

Видете го однесувањето на црвите рано

Откривање аномалија е клучно. На пример, ненадејните скокови во објавувањето на npm настани, новите работни процеси што се појавуваат без причина или новите јавни репозиториуми исполнети со чудно кодирани датотеки можат да сигнализираат за активност на црви. Затоа, тимовите треба брзо да алармираат и да ги изолираат сите одржувачи или извршители што покажуваат овие предупредувачки знаци.

Брзо поправете без да ги расипете конструкциите

Брзината и безбедноста мора да одат заедно. Автоматизирано. pull requests може да ги замени компромитираните npm пакети со проверени верзии. Покрај тоа, достапност експлоатибилност Анализата гарантира дека надградбите остануваат минимални и стабилни. Конечно, обновете ги засегнатите CI извршувачи од чисти слики откако ќе се потврди изложеноста, спречувајќи го нападот да се шири понатамошно.

Индикатори на компромис (IoCs)

При анализа на Шаи-Хулуд, тимовите треба да внимаваат и на двата статични IoC-ови во датотеки и бихевиорални IoCs in pipelineс. Заедно, овие сигнали помагаат во рано откривање на инфекции и реагирање пред црвот да се прошири понатаму.

Статични IoC-ови

Следните забележани совпаѓања на SHA-256 дигестии bundle.js примероци:

  • 46faab8ab153fae6e80e7cca38eab363075bb524edd79e42269217a083628f09
  • 81d2a004a1bca6ef87a1caf7d0e0b355ad1764238e40ff6d1b1cb77ad4f595c3
  • dc67467a39b70d1cd4c1f7f7a459b35058163592f4a9e8fb4dffcbba98ef210c

Дополнително, внимавајте на овие повторувачки шеми:

  • A bundle.js во коренот на пакетот.
  • "postinstall": "node bundle.js" внатре package.json.
  • Именувани репозиториуми Шаи Хулуд.
  • Работни процеси на GitHub што содржат ${{ toJSON(secrets) }}.

Бихевиорални IoC-и

Освен потписите на датотеките, активноста на црвите се открива преку однесувањето. На пример:

  • Ненадејни налети на npm објавување на настани од еден одржувач.
  • Нови работни процеси што испраќаат податоци до надворешни крајни точки.
  • Излезни POST барања активирани од CI извршители.
  • Неодамна креирани јавни репозиториуми со кодирани blob-ови.

Брзи ловови

Заклучок: Лекции од Шаи-Хулуд

на Напад врз синџирот на снабдување Шаи-Хулуд во npm пакетите покажува колку е кревок денешниот синџир на снабдување со софтвер. Овој црв направи повеќе од додавање на малициозен код. Крадеше токени, испраќаше податоци, а потоа автоматски се објавуваше повторно. Поради ова, нападот се прошири за часови наместо за недели.

За програмерите и DevOps тимовите, лекциите се јасни:

  • Секоја инсталација извршува код. Дури и обичен npm пакет може да скрие црв по инсталацијата.
  • Секој токен има висока вредност. Откако ќе биде украден, може да се користи за понатамошно ширење на малициозен софтвер.
  • секој pipeline потребни се проверки. Без guardrails врз основа на зависности, работни процеси и тајни, еден компромис може брзо да го погоди производството.

Затоа, запирањето на напади како Shai-Hulud бара контроли кои се автоматски и лесни за спроведување. Тимовите треба да ги скенираат npm пакетите пред инсталациите, да користат градби на заклучени датотеки, да детектираат чудна активност на објавување и да ги чуваат токените краткотрајни. Овие чекори повеќе не се опционални. Наместо тоа, тие се основа на отпорноста во современото pipelines.

Во Xygeni, нападот врз синџирот на снабдување Shai-Hulud го гледаме како предупредување за целиот екосистем со отворен код. Одржливиот пат напред е безбедноста на синџирот на снабдување да се внесе директно во процесот на развој, на точката каде што кодот, npm пакетите и pipelines поврзување.

Подолу е целосниот список на npm пакети и верзии пријавени како компромитирани во Shai-Hulud. Користете го за да ги проверите вашите заклучени датотеки, регистри и CI. pipelines за изложеност.

Список на компромитирани пакети

📦 Преглед на компромитирани npm пакети

Име на пакетот верзија Објавување на датум
json-правила-енџин-поедноставен0.2.12025-09-14T17:58:51.203Z
пилот на воздух0.8.82025-09-14T18:35:07.600Z
mcp-графикон-на-знаење1.2.12025-09-14T18:35:09.494Z
воздушна команда0.3.12025-09-14T18:35:09.521Z
скокачка порта0.0.22025-09-14T18:35:09.651Z
ТВИ-КЛИ0.1.52025-09-14T18:35:10.996Z
@thangved/прозорец-на-повратен повик1.1.42025-09-14T20:31:38.479Z
@tnf-dev/api1.0.82025-09-14T20:31:39.547Z
@tnf-dev/js1.0.82025-09-14T20:31:41.251Z
@tnf-dev/mui1.0.82025-09-14T20:31:41.259Z
@tnf-dev/core1.0.82025-09-14T20:31:42.728Z
@teselagen/react-table6.10.202025-09-14T20:37:08.597Z
@hestjs/demo0.1.22025-09-14T20:45:52.348Z
@nexe/eslint-config0.1.12025-09-14T20:45:53.625Z
@hestjs/eslint-config0.1.22025-09-14T20:45:55.044Z
@nexe/менаџер-за-конфигурација0.1.12025-09-14T20:45:55.066Z
@nexe/logger0.1.32025-09-14T20:45:55.170Z
@hestjs/logger0.1.62025-09-14T20:45:55.197Z
@hestjs/валидација0.1.62025-09-14T20:45:55.595Z
@hestjs/core0.2.12025-09-14T20:45:55.888Z
➡️ Погледнете го целиот список на компромитирани пакети
Име на пакетот верзија Објавување на датум
json-правила-енџин-поедноставен0.2.12025-09-14T17:58:51.203Z
пилот на воздух0.8.82025-09-14T18:35:07.600Z
mcp-графикон-на-знаење1.2.12025-09-14T18:35:09.494Z
воздушна команда0.3.12025-09-14T18:35:09.521Z
скокачка порта0.0.22025-09-14T18:35:09.651Z
ТВИ-КЛИ0.1.52025-09-14T18:35:10.996Z
@thangved/прозорец-на-повратен повик1.1.42025-09-14T20:31:38.479Z
@tnf-dev/api1.0.82025-09-14T20:31:39.547Z
@tnf-dev/js1.0.82025-09-14T20:31:41.251Z
@tnf-dev/mui1.0.82025-09-14T20:31:41.259Z
@tnf-dev/core1.0.82025-09-14T20:31:42.728Z
@teselagen/react-table6.10.202025-09-14T20:37:08.597Z
@hestjs/demo0.1.22025-09-14T20:45:52.348Z
@nexe/eslint-config0.1.12025-09-14T20:45:53.625Z
@hestjs/eslint-config0.1.22025-09-14T20:45:55.044Z
@nexe/менаџер-за-конфигурација0.1.12025-09-14T20:45:55.066Z
@nexe/logger0.1.32025-09-14T20:45:55.170Z
@hestjs/logger0.1.62025-09-14T20:45:55.197Z
@hestjs/валидација0.1.62025-09-14T20:45:55.595Z
@hestjs/core0.2.12025-09-14T20:45:55.888Z
@hestjs/cqrs0.1.62025-09-14T20:45:55.966Z
@hestjs/скалар0.1.72025-09-14T20:45:56.386Z
ng2-поставување-на-датотека7.0.32025-09-15T02:44:29.555Z
обработувач за известувања на кондензатор0.0.22025-09-15T04:54:48.431Z
кондензатор-приклучок-vonage1.0.22025-09-15T04:54:48.501Z
апликација за здравје-на-додатокот-на-кондензаторот0.0.22025-09-15T04:54:48.704Z
кондензаторandroid дозволи0.0.42025-09-15T04:54:48.753Z
voip-callkit1.0.22025-09-15T04:54:49.223Z
кондензаторски-приклучок-ihealth1.1.82025-09-15T04:55:08.113Z
@art-ws/common2.0.222025-09-15T05:21:15.411Z
@art-ws/config-eslint2.0.42025-09-15T05:21:17.199Z
ngx-ws1.1.52025-09-15T05:21:17.514Z
@art-ws/slf2.0.152025-09-15T05:21:17.524Z
@art-ws/http-сервер2.0.212025-09-15T05:21:17.745Z
pm2-gelf-json1.0.42025-09-15T05:21:18.413Z
@art-ws/di2.0.282025-09-15T05:21:18.488Z
@art-ws/di-node2.0.132025-09-15T05:21:18.849Z
@art-ws/config-ts2.0.72025-09-15T05:21:19.408Z
@art-ws/db-context2.0.212025-09-15T05:21:19.814Z
@art-ws/openapi0.1.92025-09-15T05:21:19.969Z
@art-ws/web-app1.0.32025-09-15T05:21:20.383Z
@art-ws/ssl-info1.0.92025-09-15T05:21:20.927Z
алатки-за-анализа-на-композиции-на-sca-алатки
Дајте приоритет, санирајте и обезбедете ги вашите софтверски ризици
Добијте ја вашата бесплатна сметка.
Не е потребна кредитна картичка.

Обезбедете го вашиот развој и испорака на софтвер

со Xygeni Product Suite