Xygeni је недавно приметио забрињавајући образац у пејзажу напада на ланац снабдевања софтвером у 2025. години, који се појављује у два популарна менаџера пакета: ПиПИ нпмКао део наших континуираних напора у вези са обавештајним подацима о претњама,Xygeni-јево рано упозорење о злонамерном софтверу (MEW) Алат је идентификовао посебан, али методолошки сличан пример злонамерног пакета који је претходно отпремљен у други регистар. Овај случај истиче како актери претњи развијају и поново користе технике напада у екосистемима, посебно путем злонамерни Пајтон пакети злонамерни npm пакети, што повећава ризик од инфилтрације злонамерних пакета у ланце снабдевања отвореног кода.
Ксигенијев MEW: Уочавање сличности
Xygeni-јев MEW алат је направљен да детектује и обележи злонамерне пакете, посебно оне повезане са нападима на ланац снабдевања софтвером у 2025. години, чим буду објављени у регистрима отвореног кода. Ради тако што анализира нове пакете у потрази за сумњивим понашањем.
У овом случају, идентификовано је два злонамерни Пајтон пакети (graphalgo на PyPI) и злонамерни npm пакети (express-cookie-parser на npm-у).
Злонамерни Python и npm пакети у нападима на ланац снабдевања софтвером (2025)
Хајде да истражимо заједничке карактеристике које су покренуле наша упозорења:
Типоскуаттинг
Обојица су покушали да имитирају популарне постојеће пакете.
- графалго (PyPI): "Пајтон пакет за креирање и манипулацију графовима и мрежама.„Отпремио корисник под именом „Ларитек“ 13. јуна 2025. године, овај пакет се представио као PyPi алтернатива оригиналном незлонамерном пројекту graphalgo, који је касније преименован у graphdict.
- експресни анализатор колачића (npm)Овај пакет је имитирао добро познати пакет за парсирање колачића, чак га је и пресликао. README.md. Такво лажно представљање је класична тактика за искоришћавање постојећег поверења.
Замагљивање као прва линија одбране
Оба пакета су сакрила свој злонамерни код унутар оригиналних датотека. За графалго, замаскирани код је пронађен унутар /utils/load_libraries.py. У случају експресни анализатор колачића, cookie-loader.min.js садржао је замаскирани корисни терет.
Овај почетни слој обфускације се обично користи да би се отежао повремени преглед и статичка анализа. Обфускација је била прилично једноставна: поновљена ZLib компресија плус Base64 кодирање. Ова врста обфускације јасно указује на то да софтвер покушава да сакрије своје понашање. Заједно са другим доказима, ово је омогућило Xygeni MEW-у да класификује пакете као потенцијални малвер. Током фазе потврде, наши рецензенти су брзо припремили скрипту за деобфускацију која је открила очигледно злонамерну фазу дроппера.
Вишестепена испорука корисног терета и заједничка тачка поласка
Оба пакета су функционисала као почетни „дропперс“, постављајући темеље за прави терет. Делили су заједнички спољни „семеURL адреса датотеке:https://raw.githubusercontent.com/johns92/blog_app/refs/heads/main/server/.env.example
Ова идентична екстерна датотека са почетним подацима је јак показатељ заједничког актера претње. Занимљиво је да садржај ове датотеке изгледа као једноставне променљиве окружења (нпр. JWT_SECRET, PORT), што потенцијално може довести до погрешног увида у њену стварну функцију.
Динамичка C2 резолуција са DGA
Софистицирана тактика примећена у овим злонамерним пакетима је коришћење алгоритма за генерисање домена (DGA) за динамичко решавање командног и контролног (C2) сервера. Ова техника, често виђена у напредним нападима на ланац снабдевања софтвером 2025. године, ослања се на SHA256 хеш изведен из садржаја семенске датотеке, у комбинацији са другим чврсто кодираним вредностима. На тај начин, C2 инфраструктура се често мења, чинећи традиционално стављање на црну листу много мање ефикасним. У овом случају, npm варијанта је користила фиксну вредност 496AAC7E као део своје DGA логике.
Успостављање постојаности
Оба нападача су настојала да успоставе трајно присуство на погођеним системима. Њихова стратегија је укључивала уклањање датотеке, startup.py (за PyPi) или startup.js (за npm), у уобичајене директоријуме корисничких података Google Chrome-а на различитим оперативним системима (Windows, Linux, macOS).
Чишћење након извршења
Да би се трагови минимизирали, оба злонамерна скрипта су извршила операције чишћења. То је укључивало брисање њихових почетних датотека за отпуштање (load_libraries.py, cookie-loader.min.js) и модификовање легитимних датотека пакета (__init__.py, index.js) да бисте уклонили референце на сада обрисане компоненте.
Индикатори компромитовања у злонамерним Пајтон и npm пакетима
- PyPI пакетgraphalgo (објавио larrytech, 13. јуна 2025.)
- npm пакетexpress-cookie-parser (тачније верзија 1.4.12)
- Приступ дељеном URL-у почетног броја:
https://raw.githubusercontent.com/johns92/blog_app/refs/heads/main/server/.env.example
- Трајна имена датотека:
startup.py(Питхон)startup.js(Јаваскрипт) - Уобичајене трајне путање (зависно од оперативног система)Унутар директоријума корисничких података Google Chrome-а (нпр.
AppData\Local\Google\Chrome\UserData\Scripts\на Виндовс-у,~/.config/google-chrome/Scripts/на Линуксу, итд.).
Како се одбранити од злонамерних пакета у нападима на ланац снабдевања софтвером 2025.
Препоручени приступ за програмере
Овај инцидент служи као вредна студија случаја у контексту еволуирајућег пејзажа претњи напада на ланац снабдевања софтвером у 2025. години. Он истиче како злонамерни Пајтон пакети и злонамерни нпм пакети могу да се провуку у поуздане екосистеме, често избегавајући откривање док не буде прекасно. Зато су рано откривање, паметни алати и проактивна хигијена система сада неопходни делови сваког безбедног DevOps тока рада. Програмери се подстичу да размотре следеће:
Преглед зависности
Ако су ваши пројекти укључивали графалго or експресни анализатор колачића, било би разумно наставити са њиховим уклањањем.
- За PyPI:
pip uninstall graphalgo - За нпм:
npm uninstall express-cookie-parser
Хигијена система
Размислите о спровођењу свеобухватног скенирања система. Такође је препоручљиво ручно проверити уобичајене путање директоријума корисничких података у Chrome-у за било какве неочекиване startup.py or startup.js датотеке.
Проактивне мере безбедности
- Процена нових зависностиУспоставите рутину за темељну процену нових пакета пре интеграције, фокусирајући се на оне од непознатих издавача.
- Интегришите безбедносне алатеАлати попут Xygeni-јевог MEW-а, заједно са другим алаткама за анализу састава софтвера (SCA) решења, могу да обезбеде критичан слој одбране идентификовањем сумњивих понашања и рањивости.
- Најмања привилегијаРад развојних окружења са принципом најмањих привилегија може помоћи у ограничавању потенцијалног утицаја компромиса.
- Нетворк АваренессПраћење одлазног мрежног саобраћаја у потрази за необичним везама понекад може открити C2 комуникације које генерише DGA.
Кључне компоненте за load_libraries.py (из графалга)
download_remote_content(): Рукује преузимањем датотека са наведених URL-ова.run_process()Извршава екстерне Пајтон скрипте одвојено, потискујући излаз како би остао дискретан.get_output_file_path(): Одређује идеалну системску локацију за трајну датотеку startup.py.remove_self()Оркестрира чишћење након извршавања од почетних злонамерних датотека и модификација пакета.simple_shift_encrypt()/simple_shift_decrypt()Прилагођене криптографске функције за замагљивање комуникационих канала, кључне за имплементацију DGA.load_libraries()Централна функција која координира цео вишестепени процес, од почетног преузимања до коначног извршавања корисног терета и чишћења.
Последица
Као и код других потенцијално злонамерних пакета које је идентификовао MEW, заштитни зид зависности одмах је заштитио кориснике који би укључили ове злонамерне пакете у своје зависности. Након потврде, пратили смо процедуре обавештавања за оба регистра, који су након прегледа уклонили оба пакета.





