Сигурност

Редакция Overclock.bg ·

ChainDrop: червей в npm зарази 444 пакета

ChainDrop: червей в npm зарази 444 пакета

Нов саморазмножаващ се червей в npm, кръстен ChainDrop, е заразил 444 пакета в 2212 версии за по-малко от четири часа на 4 август 2026 г. Общият им обем е около 2 милиарда изтегляния месечно, а сред жертвите са едни от най-натоварените зависимости в JavaScript екосистемата — keyv, flat-cache, file-entry-cache и cache-manager. Microsoft, която даде името на варианта, го определя като нова издънка на семейството Shai-Hulud, пише The Register.

Какво точно се случи

Всичко тръгва в 09:35 UTC на 4 август, когато в регистъра се появява keyv@6.0.0 — версия с над 150 милиона седмични изтегляния зад гърба си. Атакуващите са компрометирали GitHub акаунта на поддръжника на цяла група помощни библиотеки и са пуснали отровени commit-и директно в хранилищата. Оттам нататък работят собствените release автоматизации на проектите.

Резултатът е неприятен именно защото всичко изглежда наред: пакетите излизат през OIDC trusted publishing на npm, с валидни SLSA Build Level 3 provenance атестации. Подписът е истински — просто източникът вече е бил в чужди ръце. Точно тук се къса логиката „щом има provenance, значи е чисто“.

npm започва да сваля зловредните версии в 10:39 UTC, keyv е върнат на 5.6.0 в 11:15 UTC, а към 18:10 UTC всичките 11 основни носители са ревертнати, според хронологията на StepSecurity. Почистването продължава и след това.

Как работи заразата

Веригата е двустепенна. В package.json се добавя preinstall кука към файл setup.mjs, който се изпълнява преди инсталацията, без каквото и да е действие от ваша страна. Той сваля напълно легитимния Bun v1.3.13 от официалните GitHub releases и с него пуска втория етап — обфускиран payload от 727 KB на име Math_Symbol.js.

Кодът на preinstall куката в package.json на заразен пакет Снимка: Zscaler ThreatLabz

Трикът е в това, че мрежовите индикатори сочат към github.com. Изтеглянето на Bun не изглежда като нищо особено в един CI лог.

Оттам нататък червеят сканира за над 300 шаблона за тайни: npm и GitHub токени, SSH ключове, Kubernetes service accounts, AWS/GCP/Azure ключове и — ново за тази вълна — ключове за AI инструменти като Anthropic, OpenAI, Gemini, Cursor и Codex. В CI среда дъмпва и паметта на GitHub Actions runner-а, за да хване временните publishing токени. Уловеното се компресира, шифрова с AES-256-GCM и RSA, и заминава към домейни като npm-cache[.]com, описва Elastic Security Labs.

Когато намери npm токен с права за писане, червеят сваля последния tarball на пакета, вкарва компонентите си, добавя preinstall куката и публикува нова patch версия. Важното: той не пипа source кода в хранилището — преправя самия tarball. Затова сканиране на repo-то не вижда нищо.

Защо стандартните защити не помагат

Втората новост е в командната инфраструктура. Домейните за управление се резолват през смарт контракт в Ethereum mainnet (адрес 0xE1f2395ee43e45A1556EC6438a88c31B83493103), опитван през 75 публични RPC точки — техника, известна като EtherHiding. Една транзакция сменя цялата инфраструктура, а DNS блоклистите остават без работа. Zscaler ThreatLabz отбелязват още, че при опит за отнемане на токен payload-ът пуска rm -rf ~/ — тоест изтрива домашната директория с всичко в нея.

Най-коварната част обаче е персистенцията. Червеят вписва SessionStart кука в .claude/settings.json и folderOpen задача в .vscode/tasks.json, и с откраднат GitHub токен ги commit-ва в до 50 клона на всяко достъпно хранилище — обикновено като chore: update config от адрес claude@users.noreply.github.com. Тези файлове преживяват премахването на пакета и се задействат просто когато отворите проекта във VS Code или Claude Code. Ако следите темата за автономните агенти, ще разпознаете риска от нашия текст за трите Claude агента на общ сървър.

„Кампанията откри път за изпълнение, за който инструментите за сканиране на зависимости просто не бяха настроени — вътре в същите инструменти, които инженерните организации две години приемаха възможно най-бързо“, коментира пред The Register Аби Кърнс, изпълнителен директор на ActiveState. Според Unit 42 на Palo Alto Networks инфраструктурата на кампанията е била вдигната още между 22 и 25 май, а разследването е стигнало до 453 компрометирани публични хранилища в 5 акаунта.

Какво да направите

Внимание

Ако сте инсталирали или обновявали зависимости на 4 август, приемете всички токени на тази машина и в тези CI пайплайни за компрометирани и ги подменете.

  • Инсталирайте с npm install --ignore-scripts там, където е възможно, или минете на npm 12+, който блокира preinstall куките по подразбиране.
  • Проверете всички клонове на хранилищата за .claude/settings.json и .vscode/tasks.json, които не сте писали вие.
  • Сверете инсталираните версии със списъка на компрометираните пакети на SafeDep.
  • Въведете „отлежаване“ на новите версии — 3 до 7 дни, преди да влязат в production.
  • Ограничете изходящия трафик на CI runner-ите до allowlist.

Заключение

ChainDrop не използва нито една уязвимост в кода на пакетите — използва доверието към publishing веригата и към конфигурационните файлове в хранилището. Практическият извод на Кърнс е и най-краткото обобщение: конфигурацията, която идва заедно с repo-то, вече е изпълним код и трябва да я гледате точно така. Атаката е поредното напомняне, че „подписано и с provenance“ не е синоним на „безопасно“ — тема, която в последните седмици върви ръка за ръка и с активно експлоатираните дупки в macOS.

Харесва ви? Отбележете ни и ще ни виждате по-нагоре в Google.

Предпочитан източник в Google

Прочетете още