Шај хулуд - npm пакети - напад на ланац снабдевања

Шај-Хулуд: Објашњење црва npm пакета

ТЛ; ДР

Истраживачи су 14. септембра 2025. године идентификовали Схаи Хулуд, црв који се самореплицира и скривен је унутра нпм пакети, претварајући рутинско ажурирање зависности у потпуно ажурирање напад на ланац снабдевањаПрви пут примећен у @ctrl/minycolor Пакет од Данијела дос Сантоса Переире, Шаи-Хулуд прикупља тајне, извлачи их кроз ГитХаб репозиторијуме и радне процесе и поново се објављује у регистру користећи украдене акредитиве. У року од неколико дана, број заражених пакета је скочио са десетина на стотине, потврђујући да Шајхулуд није само још један тројанац, већ црв дизајниран да се аутоматски шири кроз npm екосистем.

Утицај: Сваки програмер или CI покретач који инсталира јавне npm пакете је у опасности.

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

Шта се дешава?

Напад на ланац снабдевања Шаи-Хулуда у npm пакетима је један од најреволуционарнијих инцидената у скорије време. За разлику од изолованих тројанаца, овај црв меша крађа акредитива, аутоматизована ексфилтрација и саморепликацијаСходно томе, временски оквир инфекције се смањио са недеља на само сате.

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

Могући почетни вектор и циљане акредитиве

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

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

Стога је крађа акредитива постала лансирна тачка. Са важећим npm токенима и GitHub тајнама, Шај-Хулуд је могао да се самореплицира на више пакета и репозиторијума без додатног људског напора.

Утицај напада на ланац снабдевања Шаи-Хулуда на руководећу функцију

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

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

Ко је погођен:

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

Пословни ризик

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

Како функционише напад на ланац снабдевања Шаи-Хулуд у npm пакетима

Циљеви и мотив нападача

Кампања је оптимизована за три ствари:

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

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

Унутар Шаи-Хулуд терета: бундле.јс у npm пакетима

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

Особине замагљивања и анти-аналитике које ћете видети у узорцима:

  • График минификованог модула са нумеричким ИД-овима модула, ретким коментарима и спљоштеним током управљања. Штавише, Ова структура изузетно отежава ручни преглед.
  • Сакривање низа преко base64 слојева и помоћних алата за конструкцију. На пример, Поновљено base64 кодирање и декодирање се обично појављује око рутина ексфилтрације.
  • Динамичка отпрема кроз евал-стилски обрасци и генерисана тела функција, што омогућава коду да промени понашање током извршавања.
  • Филтрирање ОС-а да се преферира извршавање Linux-а и macOS-а, посебно на CI рутерима и лаптоповима за програмере.

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

Извршавање током инсталације у Шаи-Хулуд-у: Како npm пакети покрећу црва

Напад почиње када након инсталације, покреће чвор бундле.јс. У овом тренутку, скрипта се иницијализује и распакује радно стање у меморији, постављајући темеље за пуни рад црва.

Откриће и жетва

  • Корисни терет врши дампове process.env и скенира локалне датотеке за тајне датотеке високе ентропије и префиксе токена. Поред тога, проширује покривеност покретањем TruffleHog-а.
  • Упитује крајње тачке метаподатака у облаку како би прикупио краткотрајне акредитиве. На пример, позива 169.254.169.254 на AWS-у или metadata.google.internal на GCP-у се често појављују код заражених домаћина.
  • Сходно томе, Сваки пронађени акредитив постаје одмах употребљив за објављивање нових npm пакета или покретање GitHub токова рада.

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

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

Ширење

  • Са сваким откривеним npm токеном, корисни терет набраја све пакете у власништву угроженог одржаваоца. Затим, преузима сваки tarball, убризгава bundle.js и постинсталациони запис, и поново објављује пакет.
  • Као резултат тога, десетине заражених пакета могу се појавити за неколико сати, множећи радијус експлозије у екосистему.

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

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

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

Дезинфиковани образац тока посла који би требало да тражите

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

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

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

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

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

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

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

Шпаргалка „Како то функционише“

Да сумирамо животни циклус Шаи-Хулуда, ево једне превареcisрасчлањивање његових главних корака:

  • Пакет са након инсталације је инсталиран, и bundle.js извршава.
  • Корисни терет приказује променљиве окружења, скенира датотеке и историју гита, покреће TruffleHogи упите сервисе метаподатака у облаку. Сходно томе, свака пронађена тајна постаје одмах корисна.
  • Извлачење података се дешава на два начина: прво, креирањем јавног репозиторијума под називом Схаи Хулуд са двоструким base64 кодирањем data.json; друго, постављањем тока посла GitHub Actions који објављује ${{ toJSON(secrets) }} до вебхука.
  • Користећи било који украдени npm токен, црв поново објављује све остале пакете у власништву угроженог одржаваоца са истим злонамерним удицом. На овај начин, инфекција се брзо множи.
  • Коначно, нападач држи више тајни, више пакета за ширење и упорност унутар GitHub налога и репозиторијума.

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

Шаи-Хулуд је позив на буђење. Црв који краде токене и поново се објављује није будући ризик, он је активан у екосистем npm пакета данас. Да би се спречила оваква врста напад на ланац снабдевањаТимовима су потребне контроле које се могу програмирати, аутоматизовати и директно спроводити CI/CD pipelineс. То су исте одбрамбене мере које већ можете да имплементирате са Ксигени.

Зауставите лоше артефакте на капији

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

Харден CI/CD подразумевано

Guardrails in CI/CD су неопходни. Они одбијају спајања или инсталације које уводе нове скрипте или бинарне датотеке. Истовремено, блокирају токове рада који серијализују тајне или покушавају спољне објаве. Тимови би такође требало да захтевају инсталације само са закључаним датотекама (npm ci) у свим pipelineтако да скупови зависности остају репродуцибилни и безбедни.

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

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

Рано уочите понашање црва

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

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

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

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

Приликом анализе Шаи-Хулуда, тимови би требало да пазе на оба статични IoC-ови у датотекама и бихевиорални IoC-ови 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 покретача.
  • Недавно креирана јавна складишта са кодираним блобовима.

Брзи ловови

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

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

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

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

Стога, заустављање напада попут Шаи-Хулуда захтева контроле које су аутоматске и лако се примењују. Тимови би требало да скенирају npm пакете пре инсталација, користе lockfile изградње, откривају чудне активности објављивања и краткорочно користе токене. Ови кораци више нису опциони. Уместо тога, они су основа отпорности у модерном... pipelines.

У компанији Xygeni, напад Шај-Хулуда на ланац снабдевања видимо као упозорење за цео екосистем отвореног кода. Одрживи пут напред је директно укључивање безбедности ланца снабдевања у процес развоја, у тренутку када се код, npm пакети и pipelineповезивање.

Испод је комплетна листа npm пакета и верзија пријављених као компромитованих у Shai-Hulud-у. Користите је да проверите своје закључане датотеке, регистре и CI. pipelineс за изложеност.

Листа угрожених пакета

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

Назив пакета верзија Датум објављивања
json-pravila-mehanizam-pojednostavljeno0.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
tvi-cli0.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/config-manager0.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/validation0.1.62025-09-14T20:45:55.595Z
@hestjs/core0.2.12025-09-14T20:45:55.888Z
➡️ Погледајте комплетну листу компромитованих пакета
Назив пакета верзија Датум објављивања
json-pravila-mehanizam-pojednostavljeno0.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
tvi-cli0.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/config-manager0.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/validation0.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
кондензатор-плугин-вонаџ1.0.22025-09-15T04:54:48.501Z
кондензатор-додатак-здравствена апликација0.0.22025-09-15T04:54:48.704Z
дозволе за кондензаторандроид0.0.42025-09-15T04:54:48.753Z
VoIP комплет за позиве1.0.22025-09-15T04:54:49.223Z
кондензатор-додатак-ихеалтх1.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-server2.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-tools-software-composition-analysis-tools
Приоритизујте, отклоните и обезбедите ризике везане за ваш софтвер
Набавите свој бесплатни налог.
Није потребна кредитна картица.

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

са Xygeni пакетом производа