Шай Хулуд - npm пакети - атака върху веригата за доставки

Шай-Хулуд: Обяснение на червея npm Packages

TL; DR

На 14 септември 2025 г. изследователите идентифицираха Шай Хулуд, самовъзпроизвеждащ се червей, скрит вътре npm пакети, превръщайки рутинната актуализация на зависимостите в пълномащабна атака на веригата за доставкиЗабелязан за първи път в @ctrl/малък цвят Пакетът от Даниел дос Сантос Перейра, Shai-Hulud, събира тайни, извлича ги чрез хранилища и работни процеси на GitHub и се публикува отново в системния регистър, използвайки откраднати идентификационни данни. В рамките на няколко дни броят на заразените пакети скочи от десетки на стотици, потвърждавайки, че Шайхулуд не е просто още един троянски кон, а червей, предназначен да се разпространява автоматично в екосистемата на npm.

Въздействие: Всеки разработчик или CI изпълнител, инсталиращ публични npm пакети, е изложен на риск.

Незабавни действия: блокиране на известни версии, преминаване към инсталации само с lockfile, ротиране на npm и GitHub токени, одит на работни процеси и наблюдение за индикатори за компрометиране (IoC).

Какво се случва?

- Атака на веригата за доставки Shai-Hulud в npm пакети е един от най-разрушителните инциденти в близкото минало. За разлика от изолираните троянски коне, този червей смесва кражба на идентификационни данни, автоматизирано извличане на данни и саморепликацияВследствие на това, времето за заразяване се сви от седмици до само часове.

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

Възможни първоначални векторни и целеви пълномощия

Ранен анализ показва, че атаката вероятно е започнала с откраднати идентификационни данниНапример, фишинг кампании, подправящи npm login или MFA подканите може да са заловили токени на разработчици. След като атакуващите са получили тази първа опорна точка, червеят се е разпространил, като се е вградил в npm пакети и е откраднал още тайни от:

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

Следователно, кражбата на идентификационни данни се превърна в стартова площадка. С валидни npm токени и GitHub секрети, Shai-Hulud можеше да се саморепликира в множество пакети и хранилища без допълнителни човешки усилия.

Въздействие на атаката Шай-Хулуд върху веригата за доставки върху ръководството

Шай-Хулуд е все още активен днес. Този червей ускорява времето за въздействие. Това, което някога отнемаше седмици с троянски кон, сега се развива за часове. В резултат на това, разпространението е по-бързо и по-трудно за овладяване. Напредва чрез:

  • Кражба на npm publish токени и GitHub тайни.
  • Повторно публикуване в други npm пакети.
  • Добавяне на злонамерени работни потоци на GitHub Actions за постоянство.

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

Всеки екип, който инсталира публични npm пакети, е изложен на риск. Освен това, разработчиците с кеширани npm или GitHub токени са изправени пред висок риск. CI изпълнителите, които използват широкообхватни секрети, също са уязвими.

Бизнес риск

Въздействието върху бизнеса нараства бързо. Откраднатите токени могат да доведат до поглъщане на акаунти, отвличане на пакети и дори злоупотреба с облака. Освен това, постоянството в работните процеси на GitHub затруднява почистването. Следователно, екипите трябва да третират Шай-Хулуд като продължаващ инцидент, а не като приключен.

Как работи атаката Shai-Hulud върху веригата за доставки в npm пакети

Цели и мотив на нападателя

Кампанията е оптимизирана за три неща:

  • Първата цел е да крадат идентификационни данни в голям мащаб от лаптопи на разработчици и CI изпълнители. Това включва npm publish токени, GitHub токени и облачни идентификационни данни. Всъщност, множество анализи потвърждават систематично събиране на секретни данни, като например стартиране на TruffleHog и заявки за крайни точки на облачни метаданни.
  • Втората цел е да разпространява се автоматично чрез злоупотреба с правата за публикуване на компрометираните поддържащи. В резултат на това една опорна точка бързо се разширява в много, тъй като се появяват нови заразени версии на други пакети без допълнителни човешки усилия.
  • Третата цел е да персистират и се отстраняват надеждно чрез инфраструктурата на GitHub. Атакуващите създават публично хранилище с име „Shai-Hulud“ с двойна база64 data.jsonи освен това те внедряват работен процес, който сериализира ${{ toJSON(секрети) }} и го публикува в статичен уеб кукик.

Вероятната полза включва дълготраен достъп до регистри и изходен код, бързо странично движение към облачни акаунти и възможност за допълнително превръщане на веригата за доставки като оръжие. Публичните отчети показват, че частни хранилища са превърнати в публични с... „-миграция“ суфикс, който увеличава експозицията на данни и инерцията

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

Шай-Хулуд кораби като голям, пакетиран с Webpack и силно минифициран JavaScript файл (bundle.js, около 3–3.7 MB) който се изпълнява от след инсталиране закачане package.jsonСледователно, Всяка инсталация задейства автоматично полезния товар. Този дизайн скрива идентификатори, компресира потока на управление и избутва цялата логика в един артефакт, който се изпълнява по време на инсталацията. Анализаторите постоянно потвърждават групирането на Webpack, необичайния размер на файла и изпълнението по време на инсталацията.

Черти на обфускация и антианализ, които ще видите в примерите:

  • Минимизирана графика на модула с числови идентификатори на модули, оскъдни коментари и сплескан поток на управление. Освен това, Тази структура прави ръчния преглед изключително труден.
  • Скриване на низове чрез base64 слоеве и помощни инструменти за изграждане. Например, Повтарящото се base64 кодиране и декодиране обикновено се появява около процедурите за ексфилтрация.
  • Динамично изпращане чрез оценка-стилни шаблони и генерирани тела на функции, като по този начин се позволява на кода да променя поведението по време на изпълнение.
  • Филтриране на ОС да се предпочита изпълнението на Linux и macOS, особено на CI сървъри и лаптопи за разработчици.

От функционална гледна точка, пакетът е модулен. В статиите са описани модули за откриване на операционна система, сканиране на файлова система и git secret, достъп до облачен SDK, операции с GitHub API и механизъм за разпространение, който редактира други пакети, притежавани от поддържащия. Всъщност, StepSecurity и ReversingLabs подчертават функция, която автоматично актуализира пакети със злонамерената кука.

Изпълнение по време на инсталиране в Shai-Hulud: Как npm пакетите задействат червея

Атаката започва, когато след инсталиране изпълнява възел bundle.js. В този момент скриптът инициализира и разопакова работното състояние в паметта, подготвяйки почвата за пълната работа на червея.

Откриване и събиране на реколтата

  • Полезният товар извлича process.env и сканира локалните файлове за секретни данни с висока ентропия и префикси на токени. Освен това, той разширява покритието, като изпълнява TruffleHog.
  • Той запитва крайни точки на метаданни в облака, за да събира краткотрайни идентификационни данни. Така например, обаждания до 169.254.169.254 на AWS или metadata.google.internal върху GCP често се появяват в заразени хостове.
  • Следователно, Всички намерени идентификационни данни стават незабавно използваеми за публикуване на нови npm пакети или за пускане на работни процеси в GitHub.

идваща

  • Червеят създава ново хранилище в GitHub с име Шай Хулуд и записва кодиран с double base64 data.json с подробности за платформата, дъмпове на средата и тайни. Както може да се види, това шумно поведение е лесно за забелязване, ако защитниците знаят къде да търсят.
  • Той също така внедрява работен процес за действия в GitHub, често в клон с име шай-хулуд, който сериализира ${{ toJSON(secrets) }} и публикува данните в статичен уеб кукик. Освен това, този работен процес продължава, докато някой активно не го премахне.

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

  • С всеки открит npm токен, полезният товар изброява всички пакети, собственост на компрометирания разработчик. След това извлича всеки tarball, инжектира bundle.js и запис след инсталация и публикува отново пакета.
  • В резултат на това десетки заразени пакети могат да се появят за няколко часа, умножавайки радиуса на взрива в екосистемата.

Устойчивост и експозиция

  • Червеят поддържа злонамерени работни процеси живи и в няколко случая превръща частните хранилища в публични с... „-миграция“ суфикс. Като цяло това гарантира, че нападателят ще поддържа позиция и ще увеличи максимално изтичането на данни.

Бележка за откриване на ключове
Това необичайно използване на ${{ toJSON(secrets) }} в работните потоци „Действия“ е рядкост. Ето защо, Екипите трябва да го третират като индикатор за висок сигнал по време на лов.

Саниран модел на работен процес, който трябва да търсите

Това необичайно използване на да се JSON(тайни) „в действията“ е индикатор за висок риск в този инцидент.

Псевдокод за разпространение на високо ниво (безопасен, описателен)

Анализаторите наблюдаваха този цикъл в голям мащаб, което обяснява бързия скок от десетки до стотици заразени пакети.

Защо това е червей в екосистема от пакети

Червеят е зловреден софтуер, който се разпространява самостоятелно, без да изисква ръчни действия от оператора на всеки етап. В операционните системи червеите обикновено използват мрежови уязвимости, за да се преместят от една машина на друга. За разлика от това, Shai-Hulud работи в регистъра на npm. Ефективният му път е през повторна употреба на идентификационни данни.

Червеят се възползва от откраднати npm publish токени. Веднага щом получи валидни идентификационни данни, той публикува отново заразените версии под други пакети, собственост на същия разработчик. Впоследствие тези пакети се инсталират от нищо неподозиращи разработчици или CI изпълнители и цикълът се повтаря.

Поради тази причина, анализаторите по сигурността, включително Тъмното четене, класифицират Шай-Хулуд като самовъзпроизвеждащ се червей а не обикновен троянски кон или инцидент с типосквотинг. Разликата е важна: троянският кон обикновено компрометира един хост, но червеят усилва въздействието си автоматично в цялата екосистема.

Шпаргалка „Как работи“

За да обобщим жизнения цикъл на Шай-Хулуд, ето една измамаcisразбивка на основните му стъпки:

  • Пакет с след инсталиране е инсталиран и bundle.js изпълнява.
  • Полезният товар извлича променливите на средата, сканира файловете и историята на git, изпълнява ТрюфелХоги отправя заявки към услуги за метаданни в облака. Следователно всяка намерена тайна става незабавно полезна.
  • Извличането на информация се осъществява по два начина: първо, чрез създаване на публично хранилище с име Шай Хулуд с двойно base64-кодирано data.jsonвторо, чрез внедряване на работен процес за действия в GitHub, който публикува ${{ toJSON(secrets) }} към уеб кукичка.
  • Използвайки всеки откраднат npm токен, червеят публикува отново всички останали пакети, собственост на компрометирания разработчик, със същия злонамерен hook. По този начин инфекцията се размножава бързо.
  • И накрая, нападателят държи повече тайни, повече пакети за разпространение и упоритост в акаунти и хранилища на GitHub.

Как да избегнем този клас атака на практика

Шай-Хулуд е зов за събуждане. Червей, който краде токени и се публикува отново, не е бъдещ риск, той е активен в... екосистема от npm пакети днес. За да се предотврати този тип атака на веригата за доставкиекипите се нуждаят от контроли, които са програмируеми, автоматизирани и се прилагат директно в CI/CD pipelineс. Това са същите защити, които вече можете да внедрите с Ксигени.

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

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

ожесточавам CI/CD по подразбиране

Guardrails in CI/CD са от съществено значение. Те отхвърлят сливания или инсталации, които въвеждат нови скриптове или двоични файлове. В същото време те блокират работни процеси, които сериализират тайни или се опитват за външни публикации. Екипите също трябва да изискват инсталации само с lockfile (npm ci) във всички pipelineтака че наборите от зависимости остават възпроизводими и безопасни.

Намалете радиуса на взривяване на жетони

Тайните не трябва да се превръщат в единични точки на отказ. Непрекъснато сканирайте кода, конфигурациите и pipeline изход за разкрити идентификационни данниТокените трябва да бъдат с ограничен обхват, с кратък живот и да се ротират автоматично при откриване на експозиция. Като правило, всеки токен, използван на хост, който е изпълнил подозрителна постинсталация, трябва да се третира като компрометиран.

Разпознайте поведението на червеите рано

Откриване на аномалия е ключово. Например, внезапни пикове в събитията за публикуване на npm, нови работни потоци, които се появяват без причина, или нови публични хранилища, пълни със странно кодирани файлове, могат да сигнализират за активност на червеи. Следователно екипите трябва бързо да подават предупреждения и да изолират всички поддържащи или изпълняващи, които показват тези предупредителни знаци.

Поправете бързо, без да повредите компилациите

Скоростта и безопасността трябва да вървят ръка за ръка. Автоматизирано pull requests може да замени компрометираните npm пакети с проверени версии. Освен това, достъпност намлява експлоатационност Анализът гарантира, че надстройките остават минимални и стабилни. Накрая, възстановете засегнатите CI runners от чисти изображения, след като експозицията бъде потвърдена, предотвратявайки по-нататъшното разпространение на атаката.

Индикатори за компромис (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) }}.

Поведенчески IoCs

Освен файловите сигнатури, активността на червеите се разкрива и чрез поведение. Например:

  • Внезапни изблици на npm publish събития от един поддържащ.
  • Нови работни потоци, които прехвърлят данни към външни крайни точки.
  • Изходящи POST заявки, задействани от CI runners.
  • Наскоро създадени публични хранилища с кодирани блобове.

Бързи ловове

Заключение: Уроци от Шай-Хулуд

- Атака срещу веригата за доставки на Шай-Хулуд в npm пакетите показва колко крехка е станала днешната верига за доставки на софтуер. Този червей е направил повече от това да добавя злонамерен код. Той е крал токени, изпращал е данни и след това се е публикувал отново автоматично. Поради това атаката се е разпространила за часове, вместо за седмици.

За разработчиците и DevOps екипите, уроците са ясни:

  • Всяка инсталация изпълнява код. Дори един обикновен npm пакет може да крие червей след инсталиране.
  • Всеки токен има висока стойност. След като бъде откраднат, той може да се използва за по-нататъшно разпространение на зловреден софтуер.
  • Всяко pipeline се нуждае от проверки. Без да guardrails по отношение на зависимости, работни процеси и тайни, един компромис може бързо да засегне продукцията.

Следователно, спирането на атаки като Shai-Hulud изисква контроли, които са автоматични и лесни за прилагане. Екипите трябва да сканират npm пакети преди инсталиране, да използват компилации с lockfile, да откриват странна публикационна активност и да поддържат токените краткотрайни. Тези стъпки вече не са незадължителни. Вместо това те са основата на устойчивостта в съвременния... pipelines.

В Xygeni виждаме атаката Shai-Hulud срещу веригата за доставки като предупреждение за цялата екосистема с отворен код. Устойчивият път напред е да се внесе сигурността на веригата за доставки директно в процеса на разработка, в момента, в който кодът, npm пакетите и... pipelineсвързване.

По-долу е пълният списък с npm пакети и версии, докладвани като компрометирани в Shai-Hulud. Използвайте го, за да проверите вашите заключващи файлове, регистри и CI. pipelines за експозиция.

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

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

Име на пакета версия Дата на публикуване
json-rules-engine-опростен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
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/демо0.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/валидация0.1.62025-09-14T20:45:55.595Z
@hestjs/core0.2.12025-09-14T20:45:55.888Z
➡️ Вижте пълния списък с компрометирани пакети
Име на пакета версия Дата на публикуване
json-rules-engine-опростен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
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/демо0.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/валидация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
качване на файлове от ng27.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
разрешения за кондензатор за Android0.0.42025-09-15T04:54:48.753Z
VoIP комплект за обаждания1.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-възел2.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/уеб-приложение1.0.32025-09-15T05:21:20.383Z
@art-ws/ssl-info1.0.92025-09-15T05:21:20.927Z
инструменти за анализ на състава на софтуера SCA Tools
Приоритизирайте, отстранете и защитете софтуерните си рискове
Вземете своя безплатен акаунт.
Не е необходима кредитна карта.

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

с продуктовия пакет Xygeni