- Атакуващ е компрометирал npm акаунта на основния разработчик на Axios и е пуснал версии 1.14.1 и 0.30.4 с фантомна зависимост plain-crypto-js, която е внедрила междуплатформен RAT по време на инсталацията.
- Зловредният софтуер се е свързал с C2 сървър (sfrclak[.]com) и е изтеглил специфични полезни товари за Windows, macOS и Linux, извършвайки системно разузнаване, поддържайки периодични маяци и в някои случаи установявайки постоянство.
- Атаката, приписана от Google и други изследователи на севернокорейския актьор UNC1069, комбинира период на експозиция от около три часа със сложна кампания за социално инженерство срещу поддържащия софтуер, за да открадне техните идентификационни данни.
- Организациите, които са успели да инсталират засегнатите версии, трябва да се ангажират да предприемат действия, като търсят артефакти за RAT, ротират идентификационни данни, закрепват защитени версии на Axios и укрепват веригата си за доставки, CI/CD и контролите за управление на зависимостите.
Общността на JavaScript разработчиците току-що преживя един от онези плашещи моменти, които те карат да преосмислиш колко се доверяваш на зависимостите си, както се вижда от проблеми с уязвимостите на библиотеките . Axios, една от най-широко използваните HTTP библиотеки в екосистемата, беше манипулирана в npm, за да разпространява троянски кон за отдалечен достъп (RAT) чрез привидно легитимни версии. Инцидентът продължи само няколко часа, но ясно показа, че веригата за доставки на софтуер виси на много по-тънка нишка, отколкото мнозина предполагаха.
Сериозният проблем не е само в това, че нападателите са успели да промъкнат зловреден софтуер в пакет, свалян десетки или стотици милиони пъти седмично. Истинският проблем е, че са го направили, като са откраднали npm акаунта на основния разработчик, публикувайки „официални“ версии, които са изглеждали нормално и не са докосвали нито един ред от изходния код на Axios . Цялото злонамерено поведение се е намирало във фантомна зависимост, специално проектирана за атаката.
Как се стигна до ангажимента на Axios към npm
За да разберем мащаба на инцидента, трябва да започнем с входната точка. Нападателят успя да поеме контрола над npm акаунта на „jasonsaayman“, основният поддържащ Axios, и промени свързания имейл адрес на такъв под техен контрол , хостван в Proton Mail. От този момент нататък той имаше пълната свобода да публикува нови версии на пакета, сякаш беше поддържащият.
Използвайки тези идентификационни данни, той качи две злонамерени версии на Axios: 1.14.1 и 0.30.4 , обхващащи и двата основни клона на проекта. Качванията бяха направени само с интервал от 39 минути и, според анализа на StepSecurity, бяха направени директно от npm, използвайки класически дългоживеещ токен, напълно заобикаляйки обичайния CI/CD конвейер, базиран на GitHub Actions.
Осемнадесет часа преди финалната атака, злонамереният злонамерен пакет вече беше публикувал „чиста“ версия, свързана със злонамерената зависимост, в системния регистър на npm . Тази предварителна стъпка послужи за генериране на история и предотвратяване на задействането на някои автоматизирани проверки, когато по време на атаката се появи напълно нов пакет.
Поразителното е, че нападателите не са модифицирали изходния код на Axios, нито са направили видими промени в хранилището на GitHub . Всъщност, версии 1.14.1 и 0.30.4 не са имали съответстващи коммити или тагове в GitHub; те са съществували само в npm. Ключовата разлика е била във файла със зависимости на пакета, който е бил публикуван в системния регистър.
При нормални обстоятелства Axios декларира само три зависимости: follow-redirects, form-data и proxy-from-env . В компрометираните версии обаче се появи четвърта зависимост, която преди това не съществуваше в проекта: plain-crypto-js, версия 4.2.1. Тази фантомна библиотека не беше използвана никъде в кодовата база на Axios, но включваше скрипт след инсталиране, който се изпълняваше автоматично при инсталиране на пакета с npm, pnpm или подобни инструменти.
plain-crypto-js: фантомната зависимост, внедрена от RAT
Ключът към атаката се криеше в тази допълнителна зависимост. plain-crypto-js беше публикуван в npm от потребител с име „nrwise“, също с имейл адрес от Proton Mail, и единствената му цел беше да изпълни обфускиран пост-инсталационен скрипт в Node.js (setup.js) . Този скрипт действаше като dropper, тоест като първоначален инсталатор за втората фаза на зловредния софтуер.
При инсталиране на Axios в една от заразените му версии, жизненият цикъл на npm след инсталиране автоматично задейства кода plain-crypto-js, без да се изискват специални действия от разработчика . Дропърът се свързва със сървър за командни и контролни операции (C2), активен в домейна sfrclakcom, слушайки на порт 8000, и изтегля полезен товар, специфичен за операционната система на засегнатата машина; това поведение може да бъде идентифицирано чрез анализ на мрежовия трафик.
Изследователи от StepSecurity и други аналитични екипи описват много внимателно поведение. След изпълнение на злонамерения полезен товар, дропърът премахва собствените си следи: изтрива скрипта след инсталация, заменя файла package.json с „чиста“ версия и оставя файл node_modules, който на пръв поглед изглежда безобиден . По този начин последваща ръчна проверка не открива злонамерения код директно в Axios.
За да се идентифицира манипулацията, единствената надеждна улика бяха заключващите файлове (package-lock.json, pnpm-lock.yaml, yarn.lock) и наличието на специфични версии: axios 1.14.1 или 0.30.4 и plain-crypto-js 4.2.1, в допълнение към две версии на този пакет с междинни номера (4.2.0, 4.2.2), свързани в някои анализи. Socket, от своя страна, по-късно откри, че същият зловреден софтуер се разпространява и чрез пакетите @shadanai/openclaw (различни версии 2026.3.xx) и @qqbrowser/openclaw-qbot (0.0.130), а техники за сигурност като honeypots също могат да помогнат за идентифициране на подобни кампании.
Междуплатформен RAT: Windows, macOS и Linux в светлината на прожекторите
След изпълнение, скриптът setup.js действаше като оркестратор, способен да открие операционната система и да следва специфичен за платформата път на атака . Кампанията очевидно беше предварително подготвена: според StepSecurity, нападателите имаха три отделни предварително компилирани полезни натоварвания, по един за всяка система.
В macOS системи, процесът след инсталиране стартира AppleScript, който изтегля троянизиран двоичен файл от сървъра sfrclakcom:8000 . Този двоичен файл е запазен в директорията /Library/Caches/com.apple.act.mond, разрешенията му са коригирани, за да стане изпълним, и накрая е стартиран във фонов режим с помощта на /bin/zsh. След като RAT се стартира, самият AppleScript е изтрит, за да се усложни допълнително криминалистичният анализ.
На машини с Windows, зловредният софтуер е локализирал двоичния файл на PowerShell на системата, копирал го е в %PROGRAMDATA%\wt.exe, за да го прикрие като терминала на Windows, и е генерирал временен VBScript . След това този VBScript се е свързал със сървъра C2, за да изтегли допълнителен PowerShell RAT скрипт, изпълнил го е и след това е изтрил изтегления файл. Освен това, вариантът за Windows е създал файла %PROGRAMDATA%\system.bat с рутина за изтегляне, която е позволявала на зловредния софтуер да се изтегля при всяко влизане в системата и е добавял ключ за изпълнение към системния регистър на Windows, за да осигури устойчивост.
В Linux и други Unix-подобни системи, освен macOS, дропърът използва execSync на Node.js, за да стартира команда, която изтегля Python скрипт от sfrclakcom, запазва го като /tmp/ld.py и го изпълнява с nohup, за да работи във фонов режим . За разлика от Windows, този вариант не показва стабилен механизъм за персистиране, което предполага по-бърз подход, ориентиран към извличане на данни, или от време на време внедряване на персистиране чрез последващи команди.
SafeDep и Elastic Security Labs анализираха полезните товари от второ ниво и заключиха, че RAT-овете за macOS (C++ Mach-O двоичен файл) и Linux (Python скрипт) споделят един и същ набор от команди, C2 протокол, формат на съобщенията и оперативно поведение . Този тип анализ обикновено разчита на услуги за сканиране като VirusTotal , които улесняват корелацията на пробите и IOC-овете.
Във всички случаи всеки компрометиран хост е извършил незабавно системно разузнаване: потребителски директории, корени на дискове, активни процеси и други метаданни . Тази информация е била изпратена до командния и контролен сървър, а агентът е поддържал цикъл на маяк от около 60 секунди, чакайки нови инструкции, включително изпълнение на допълнителни скриптове или инжектиране на двоични файлове в паметта.
Период на експозиция, цели и приписване на Северна Корея
Злонамерените версии на Axios бяха достъпни в npm за около три часа, през внимателно избран период от време. Компрометираните пакети бяха публикувани малко преди полунощ в неделя (време, което увеличи максимално времето за реакция на защитниците), а инцидентът беше овладян до ранната сутрин в понеделник , след като фирми за сигурност предупредиха властите за аномалното поведение.
През този сравнително кратък период, Huntress е открила поне 135 системи, свързващи се със сървъра на нападателя . Като се има предвид, че Axios регистрира над 80-100 милиона изтегляния седмично (според различни източници, дори над 300 милиона в някои периоди), това число вероятно представлява само върхът на айсберга, ограничено до системите, които попадат в полезрението на аналитичните фирми, които са направили данните си публични.
Google, чрез своя екип за разузнаване на заплахи, приписа атаката на предполагаем севернокорейски актьор с обозначение UNC1069 . Elastic Security Labs подкрепи тази хипотеза, като откри силно сходство между RAT, доставен на macOS, и WAVESHAPER, C++ задна врата, открита от Mandiant и също свързана със същата група заплахи.
Анализатори на Google подчертаха, че свързани със Северна Корея групи са се специализирали в атаки срещу вериги за доставки и кражба на криптовалути от години . Моделът е постоянен: компрометиране на инфраструктура за разработка, широко използвани библиотеки или надежден софтуер, за да се премине странично към цели, които управляват високоценни активи, частни ключове или идентификационни данни.
Няколко доклада също така подчертават, че модерирането и дизайнът на атаката предполагат добре координиран екип : три паралелни имплементации на един и същ RAT (PowerShell, C++ и Python), последователен C2 протокол, почти идентично поведение във всички варианти и ясна стратегия за самопочистване, за да се избегне оставянето на следи. Elastic подчертава, че тази последователност сочи към един разработчик или група, работещи по споделен дизайнерски документ, далеч от импровизация.
Отвъд чисто техническите аспекти, един от най-обезпокоителните моменти в случая е как е бил отвлечен npm акаунтът на основния администратор. Самият мениджър на Axios по-късно обясни, че е имал активирано двуфакторно удостоверяване за почти всичките си услуги и въпреки това е предоставил достъп, без да го осъзнава.
Според анализа след смъртта, споделен от екипа, нападателите са осъществили сложна операция по социално инженерство, подкрепена от инструменти, задвижвани от изкуствен интелект, за да спечелят доверието им . Те са се представяли за основател на компания, копирайки нейната визуална идентичност, снимка и дори корпоративния брандинг. Те са създали истинско Slack пространство с логото на компанията, канали с публикации, за които се предполага, че са синхронизирани с LinkedIn, и дори фалшиви профили на служители и други разработчици на софтуер с отворен код.
В тази среда те насрочиха среща чрез Microsoft Teams, в която изглежда участва цяла група професионалисти . По време на срещата те симулираха технически проблем и посочиха, че компонент от системата им е остарял. Техникът по поддръжката, приемайки, че това е легитимно изискване, свързано със самия инструмент за видеоконферентна връзка, изтегли и инсталира предложения файл.
Този файл всъщност е бил троянският кон за отдалечен достъп, който е позволил на нападателите да се обърнат към идентификационните данни на жертвата и в крайна сметка да поемат контрола над npm акаунта, използван за публикуване на Axios . Целият процес е бил толкова добре организиран, с толкова много правдоподобни детайли, че жертвата го е описала като „перфектно координиран, професионален и напълно убедителен“.
Този човешки елемент на инцидента ясно показва, че дори технически мерки като 2FA са недостатъчни, когато социалното инженерство на високо ниво се комбинира с визуална имитация, дълбочинни фалшиви данни или детайлно клониране на организации . Най-слабото звено, отново, е човешкото взаимодействие.
Въздействие върху организации и разработчици, използващи Axios
От практическа гледна точка, основният проблем е да се определи кой е бил действително засегнат. Всяка организация, която е инсталирала [email protected] или [email protected] през периода, в който са били налични, трябва да предположи, че машината или каналът, извършил инсталацията, може да е компрометиран.
Препоръките от фирми като StepSecurity, Aikido, Huntress и Elastic са недвусмислени. В случай на съмнение е необходим проактивен подход, а не просто „изтриване и преинсталиране на node_modules “. Разумният начин на действие е да се възстановят засегнатите машини или среди от надеждни образи и внимателно да се прегледат CI/CD регистрационните файлове, за да се идентифицират кои задачи или канали може да са изпълнили компрометираните версии.
Освен това е изключително важно да се ротират всички идентификационни данни и тайни данни, до които RAT може да е получил достъп от тези възли : npm токени, ключове на облачни доставчици, тайни на канали, идентификационни данни за база данни, SSH ключове и др. Оставянето на тези идентификационни данни в обращение след такава атака оставя вратата отворена за тихо странично движение.
На техническо ниво екипите трябва да прегледат своите заключващи файлове (package-lock.json, pnpm-lock.yaml, yarn.lock) за препратки към компрометираните версии на Axios и plain-crypto-js . Ако тези елементи бъдат открити, следващата стъпка е да се проверят засегнатите системи за потенциални RAT артефакти: /Library/Caches/com.apple.act.mond на macOS, %PROGRAMDATA%\wt.exe и %PROGRAMDATA%\system.bat на Windows или /tmp/ld.py на Linux.
Успоредно с това се препоръчва изрично да се зададат защитени версии на Axios, като например 1.14.0 и 0.30.3, и да се използват презаписвания или резолюции, за да се предотврати разрешаването на транзитивни зависимости към нежелани версии . Блокирането на изходящия трафик към домейна sfrclakcom също е разумна мярка за ограничаване, поне докато се анализира пълният обхват на атаката.
Уроци по сигурност за веригата за доставки на софтуер
Инцидентът с Axios не е изолирано събитие, а поредно звено във верига от атаки срещу веригата за доставки, която включва случаи като SolarWinds, Kaseya, 3CX, Polyfill.io и уязвимости, използвани в Log4j. Основната идея е винаги една и съща: да се компрометира широко използван, надежден компонент, за да се увеличи максимално обхватът , вместо да се опитва да се атакува машина по машина.
Един от най-често повтаряните уроци от експертите е, че доверието не може да разчита единствено на популярността на дадена библиотека или репутацията на разработчика . Ако каналът за пускане на код (npm акаунтът, CI/CD конвейерът, инфраструктурата за изграждане) е компрометиран, всичко, пуснато през него, наследява този риск. Ръчният преглед на кода също е недостатъчен, ако зловредният софтуер се крие в транзитивни зависимости и се самоизтрива след изпълнение.
Също така беше подчертано, че „скоростта по подразбиране“ за актуализации на зависимостите има цена по отношение на повърхността за атака . Винаги автоматичното приемане на най-новата версия е изключително удобно, но отваря вратата за разпространение на злонамерена актуализация за минути. Някои организации вече обмислят политики, като например изискване новата версия да е била в екосистемата за определен период преди приемането ѝ или изискване промените в критичните пакети да преминат през допълнителен ръчен преглед.
Що се отнася до инфраструктурата за разработка, CI/CD средите трябва да се третират като силно чувствителни активи . Всеки RAT, изпълнен по време на инсталиране на зависимости, почти сигурно ще търси секретни данни от конвейера и достъп до други среди. Сегментирането на тези възли, по-внимателното им наблюдение и периодичното им въртене на секретните данни вече не е „идеална“ препоръка, а необходимост.
И накрая, откриването на тези видове атаки изисква комбиниране на информация от множество източници: инсталирани версии, заключващи файлове, индикатори за компрометиране на операционната система и мрежова телеметрия . Инструментите, които генерират и управляват софтуерни спецификации (SBOM), помагат за бързото проследяване на кои проекти използват кои пакети, което е жизненоважно, когато се задействат масивни предупреждения като това.
Целият този епизод с Axios илюстрира степента, до която екосистемата от зависимости, колкото и зряла и консолидирана да изглежда, все още разчита до голяма степен на доверие и постоянна бдителност. Една на пръв поглед безобидна библиотека, поддържана от един-единствен човек, който става жертва на добре изпълнена атака чрез социално инженерство, може за часове да се превърне в глобален вектор за внедряване на междуплатформени RAT-ове срещу компании, фрийлансъри и организации от всякакъв мащаб . Засилването на контрола около публикуването на акаунти, канали за обработка и критични зависимости вече не е незадължителна най-добра практика, а предпоставка за непрекъснато развитие в среда, където нападателите са все по-търпеливи, находчиви и оборудвани с по-добри инструменти.

