Společnost Xygeni nedávno v roce 2025 zaznamenala znepokojivý trend v oblasti útoků na dodavatelský řetězec softwaru., který se objevuje u dvou populárních správců balíčků: PyPI a NpmV rámci našeho probíhajícího úsilí v oblasti zpravodajských informací o hrozbách,Včasné varování před malwarem (MEW) od Xygeni Nástroj identifikoval odlišný, ale metodologicky podobný případ škodlivého balíčku nahraného do jiného registru dříve. Tento případ ukazuje, jak se aktéři útoků vyvíjejí a znovu používají útočné techniky napříč ekosystémy, zejména prostřednictvím škodlivé balíčky Pythonu a škodlivé balíčky npm, což zvyšuje riziko infiltrace škodlivých balíčků do dodavatelských řetězců s otevřeným zdrojovým kódem.
Xygeniho MEW: Hledání podobností
Nástroj MEW od společnosti Xygeni je navržen tak, aby detekoval a označoval škodlivé balíčky, zejména ty spojené s útoky na dodavatelský řetězec softwaru v roce 2025, jakmile jsou publikovány v registrech open-source. Funguje tak, že analyzuje nové balíčky a hledá podezřelé chování.
V tomto případě identifikoval dva škodlivé balíčky Pythonu (graphalgo na PyPI) a škodlivé balíčky npm (express-cookie-parser na npm).
Škodlivé balíčky Pythonu a npm v útocích na dodavatelský řetězec softwaru (2025)
Pojďme se podívat na společné charakteristiky, které spustily naše upozornění:
Typosquatting
Oba se snažili napodobit existující populární balíčky.
- grafalgo (PyPI): "Python balíček pro tvorbu a manipulaci s grafy a sítěmi.„Nahráno uživatelem se jménem „larrytech“ 13. června 2025 se tento balíček prezentoval jako alternativa PyPi k původnímu neškodnému projektu Graphalgo, který byl později přejmenován na Graphdict.
- expresní analyzátor souborů cookie (npm)Tento balíček napodoboval známý balíček cookie-parser, dokonce ho zrcadlil. Soubor README.md. Takové vydávání se za jinou osobu je klasickou taktikou, jak využít stávající důvěry.
Zamlžování jako první obranná linie
Oba balíčky zamaskovaly svůj škodlivý kód v původních souborech. grafalgo, zahalený kód byl nalezen uvnitř /utils/load_libraries.py. V případě expresní analyzátor souborů cookie, cookie-loader.min.js obsahoval zmatený náklad.
Tato počáteční vrstva obfuskace se obvykle používá k zamezení běžné inspekce a statické analýzy. Obfuskace byla poměrně jednoduchá: opakovaná komprese ZLib plus kódování Base64. Tento typ obfuskace jasně naznačuje, že se software snaží skrýt své chování. Spolu s dalšími důkazy to umožnilo Xygeni MEW klasifikovat balíčky jako potenciální malware. Během fáze potvrzení naši recenzenti neprodleně připravili deobfuskační skript, který odhalil zjevně škodlivou fázi dropperu.
Vícestupňové doručení užitečného zatížení a sdílený výchozí bod
Oba balíčky fungovaly jako počáteční „kapátka,“ připravujíc půdu pro skutečné užitečné zatížení. Sdíleli společný externí „semínkoURL souboru:https://raw.githubusercontent.com/johns92/blog_app/refs/heads/main/server/.env.example
Tento identický externí seed soubor je silným indikátorem sdíleného aktéra hrozby. Je zajímavé, že obsah tohoto seed souboru se jeví jako jednoduché proměnné prostředí (např. JWT_SECRET, PORT), což by mohlo vést k zavádějícímu zjištění jeho skutečné funkce.
Dynamické rozlišení C2 s DGA
Sofistikovaná taktika pozorovaná u těchto škodlivých balíčků spočívá v použití algoritmu generování domén (DGA) k dynamickému rozpoznávání serveru Command and Control (C2). Tato technika, která se v roce 2025 často objevovala u pokročilých útoků na dodavatelský řetězec softwaru, se spoléhá na hash SHA256 odvozený z obsahu seed souboru v kombinaci s dalšími pevně zakódovanými hodnotami. Tím se infrastruktura C2 často mění, což tradiční blacklisting činí mnohem méně efektivním. V tomto případě varianta npm používala pevnou hodnotu 496AAC7E jako součást logiky DGA.
Zavedení vytrvalosti
Oba útočníci se snažili trvale etablovat na postižených systémech. Jejich strategie zahrnovala odstranění souboru, startup.py (pro PyPi) nebo startup.js (pro npm) do běžných adresářů uživatelských dat Google Chrome v různých operačních systémech (Windows, Linux, macOS).
Vyčištění po spuštění
Aby se minimalizovaly stopy, oba škodlivé skripty provedly operace čištění. To zahrnovalo smazání jejich původních souborů dropper (load_libraries.py, cookie-loader.min.js) a úpravou legitimních souborů balíčků (__init__.py, index.js) k odstranění odkazů na nyní odstraněné komponenty.
Indikátory kompromitace ve škodlivých balíčcích Pythonu a npm
- Balíček PyPIgraphalgo (publikováno larrytech, 13. června 2025)
- Balíček npmexpress-cookie-parser (konkrétně verze 1.4.12)
- Přístup ke sdílené URL seed:
https://raw.githubusercontent.com/johns92/blog_app/refs/heads/main/server/.env.example
- Trvalé názvy souborů:
startup.py(Krajta)startup.js(JavaScript) - Běžné trvalé cesty (závislé na operačním systému)V adresářích uživatelských dat v prohlížeči Google Chrome (např.
AppData\Local\Google\Chrome\UserData\Scripts\ve Windows,~/.config/google-chrome/Scripts/na Linuxu atd.).
Jak se bránit proti škodlivým balíčkům při útocích na dodavatelský řetězec softwaru v roce 2025
Doporučený přístup pro vývojáře
Tento incident slouží jako cenná případová studie v měnícím se prostředí hrozeb útoků na dodavatelský řetězec softwaru v roce 2025. Zdůrazňuje, jak se škodlivé balíčky Pythonu a škodlivé balíčky NPM mohou propašovat do důvěryhodných ekosystémů a často se vyhýbat odhalení, dokud není příliš pozdě. Proto jsou včasná detekce, inteligentní nástroje a proaktivní hygiena systému nyní nezbytnou součástí každého bezpečného pracovního postupu DevOps. Vývojářům se doporučuje zvážit následující:
Kontrola závislostí
Pokud vaše projekty zahrnovaly grafalgo or expresní analyzátor souborů cookie, bylo by rozumné přistoupit k jejich odstranění.
- Pro PyPI:
pip uninstall graphalgo - Pro npm:
npm uninstall express-cookie-parser
Hygiena systému
Zvažte provedení komplexní kontroly systému. Je také vhodné ručně zkontrolovat běžné cesty k adresářům uživatelských dat Chromu, zda neobsahují neočekávané informace. startup.py or startup.js soubory.
Proaktivní bezpečnostní opatření
- Posouzení nových závislostíZaveďte rutinu pro důkladné vyhodnocení nových balíčků před integrací, se zaměřením na balíčky od neznámých vydavatelů.
- Integrace bezpečnostních nástrojůNástroje jako MEW od Xygeni spolu s dalšími nástroji pro analýzu kompozice softwaru (SCA) řešení mohou poskytnout kritickou vrstvu obrany identifikací podezřelého chování a zranitelností.
- Nejmenší privilegiumProvozování vývojových prostředí s principem nejnižších oprávnění může pomoci omezit potenciální dopad kompromitace.
- Světelnost sítěMonitorování odchozího síťového provozu a vyhledávání neobvyklých připojení může někdy odhalit komunikaci C2 generovanou DGA.
Klíčové součásti load_libraries.py (z grafalga)
download_remote_content(): Zpracovává načítání souborů ze zadaných URL adres.run_process()Spouští externí Python skripty odděleně a potlačuje výstup, aby zůstal diskrétní.get_output_file_path()Určuje ideální umístění v systému pro trvalý soubor startup.py.remove_self()Orchestruje čištění po spuštění od původních škodlivých souborů a úprav balíčků.simple_shift_encrypt()/simple_shift_decrypt()Vlastní kryptografické funkce pro zakrytí komunikačních kanálů, klíčové pro implementaci DGA.load_libraries()Centrální funkce, která koordinuje celý vícestupňový proces, od počátečního stahování až po finální spuštění a vyčištění dat.
Následky
Stejně jako u jiných potenciálně škodlivých balíčků identifikovaných MEW, firewall závislostí okamžitě chránil uživatele, kteří by tyto škodlivé balíčky zahrnuli do svých závislostí. Po potvrzení jsme postupovali podle oznamovacích postupů pro oba registry, které po kontrole oba balíčky odstranily.





