Xygeni a observat recent un model îngrijorător în peisajul atacurilor asupra lanțului de aprovizionare software în 2025., apărând în două manageri de pachete populare: PyPI și NPMCa parte a eforturilor noastre continue de analiză a amenințărilor,Avertizare timpurie împotriva programelor malware (MEW) de la Xygeni Instrumentul a identificat o instanță distinctă, dar metodologic similară, a unui pachet rău intenționat încărcat anterior într-un alt registru. Acest caz evidențiază modul în care actorii amenințători evoluează și reutilizează tehnicile de atac în diferite ecosisteme, în special prin pachete Python rău intenționate și pachete npm rău intenționate, ceea ce crește riscul ca pachete rău intenționate să se infiltreze în lanțurile de aprovizionare open source.
MEW-ul lui Xygeni: Identificarea asemănărilor
Instrumentul MEW de la Xygeni este conceput pentru a detecta și semnala pachete rău intenționate, în special pe cele legate de atacurile din lanțul de aprovizionare software din 2025, imediat ce sunt publicate în registrele open-source. Funcționează prin analizarea noilor pachete pentru comportamente suspecte.
În acest caz, a identificat două pachete Python rău intenționate (graphalgo pe PyPI) și pachete npm rău intenționate (express-cookie-parser pe npm).
Pachete Python și npm rău intenționate în atacurile asupra lanțului de aprovizionare software (2025)
Să explorăm caracteristicile comune care au declanșat alertele noastre:
typosquatting
Amândoi au încercat să imite pachete populare existente.
- graphalgo (PyPI): "Pachet Python pentru crearea și manipularea grafurilor și rețelelor.„Încărcat de un utilizator numit „larrytech” Pe 13 iunie 2025, acest pachet s-a prezentat ca o alternativă PyPi la proiectul original non-răufăcios graphalgo, care a fost ulterior redenumit graphdict.
- analizor de cookie-uri expres (npm)Acest pachet a imitat binecunoscutul pachet de analiză a cookie-urilor, chiar oglindindu-i README.md. O astfel de uzurpare a identității este o tactică clasică de a valorifica încrederea existentă.
Obfuscarea ca primă linie de apărare
Ambele pachete au ascuns codul malițios din fișierele originale. Pentru grafalgo, codul ofuscat a fost găsit în /utils/load_libraries.py. În cazul în care analizor de cookie-uri expres, cookie-loader.min.js conținea sarcina utilă ofuscată.
Acest strat inițial de ofuscare este de obicei folosit pentru a împiedica inspecția ocazională și analiza statică. Ofuscarea a fost destul de simplă: compresie ZLib repetată plus codare Base64. Acest tip de ofuscare indică în mod clar că software-ul încearcă să-și ascundă comportamentul. Împreună cu alte dovezi, acest lucru a permis Xygeni MEW să clasifice pachetele drept potențiale programe malware. În timpul etapei de confirmare, recenzorii noștri au pregătit prompt un script de deofuscare care a dezvăluit etapa de dropper evident malițioasă.
Livrarea sarcinii utile în mai multe etape și un punct de origine comun
Ambele pachete au funcționat ca „ inițiale”picurătoare„, pregătind scena pentru sarcina utilă reală. Au împărtășit o sarcină externă comună”sămânţăURL-ul fișierului ”:https://raw.githubusercontent.com/johns92/blog_app/refs/heads/main/server/.env.example
Acest fișier extern identic este un indicator puternic al unui actor de amenințare comun. Interesant este că, în conținutul acestui fișier, acesta pare a fi reprezentat de simple variabile de mediu (de exemplu, JWT_SECRET, PORT), ceea ce ar putea induce în eroare o inspecție a funcției sale reale.
Rezoluție dinamică C2 cu un DGA
O tactică sofisticată observată în aceste pachete malițioase este utilizarea unui Algoritm de Generare a Domeniului (DGA) pentru a rezolva dinamic serverul de Comandă și Control (C2). Această tehnică, adesea observată în atacurile avansate asupra lanțului de aprovizionare software din 2025, se bazează pe un hash SHA256 derivat din conținutul fișierului seed, combinat cu alte valori hardcoded. Procedând astfel, infrastructura C2 se schimbă frecvent, ceea ce face ca listarea tradițională pe liste negre să fie mult mai puțin eficientă. În acest caz, varianta npm a folosit o valoare fixă de 496AAC7E ca parte a logicii sale DGA.
Stabilirea persistenței
Ambii atacatori au căutat să stabilească o prezență durabilă pe sistemele afectate. Strategia lor a implicat eliminarea unui fișier, startup.py (pentru PyPi) sau startup.js (pentru npm), în directoarele comune de date ale utilizatorilor Google Chrome din diverse sisteme de operare (Windows, Linux, macOS).
Curățenie post-execuție
Pentru a minimiza urmele, ambele scripturi rău intenționate au efectuat operațiuni de curățare. Acestea au inclus ștergerea fișierelor dropper inițiale (load_libraries.py, cookie-loader.min.js) și modificarea fișierelor legitime ale pachetului (__init__.py, index.js) pentru a elimina referințele la componentele acum șterse.
Indicatori de compromitere în pachetele Python și npm rău intenționate
- Pachet PyPIgraphalgo (publicat de larrytech, 13 iunie 2025)
- Pachet npmexpress-cookie-parser (în special versiunea 1.4.12)
- Acces la URL-ul seminței partajate:
https://raw.githubusercontent.com/johns92/blog_app/refs/heads/main/server/.env.example
- Nume de fișiere persistente:
startup.py(Piton)startup.js(JavaScript) - Căi persistente comune (dependente de sistemul de operare)În directoarele cu date de utilizator din Google Chrome (de exemplu,
AppData\Local\Google\Chrome\UserData\Scripts\pe Windows,~/.config/google-chrome/Scripts/pe Linux etc.).
Cum să te aperi împotriva pachetelor rău intenționate în atacurile asupra lanțului de aprovizionare software în 2025
O abordare recomandată pentru dezvoltatori
Acest incident servește drept studiu de caz valoros în peisajul amenințărilor în continuă evoluție reprezentat de atacurile asupra lanțului de aprovizionare software în 2025. Evidențiază modul în care pachetele Python rău intenționate și pachetele npm rău intenționate pot pătrunde în ecosisteme de încredere, adesea evitând detectarea până când este prea târziu. De aceea, detectarea timpurie, instrumentele inteligente și igiena proactivă a sistemului sunt acum părți esențiale ale oricărui flux de lucru DevOps securizat. Dezvoltatorii sunt încurajați să ia în considerare următoarele:
Revizuirea dependenței
Dacă proiectele dumneavoastră au inclus grafalgo or analizor de cookie-uri expres, ar fi prudent să se procedeze la îndepărtarea lor.
- Pentru PyPI:
pip uninstall graphalgo - Pentru npm:
npm uninstall express-cookie-parser
Igiena sistemului
Luați în considerare efectuarea unei scanări complete a sistemului. De asemenea, este recomandabil să verificați manual căile comune ale directorului de date al utilizatorilor Chrome pentru orice erori neașteptate. startup.py or startup.js fișiere.
Măsuri de securitate proactive
- Evaluarea noilor dependențeStabiliți o rutină pentru a evalua temeinic noile pachete înainte de integrare, concentrându-vă pe cele de la editori necunoscuți.
- Integrați instrumentele de securitateInstrumente precum MEW de la Xygeni, împreună cu alte instrumente de analiză a compoziției software (SCA) soluții pot oferi un nivel critic de apărare prin identificarea comportamentelor suspecte și a vulnerabilităților.
- Cel mai mic privilegiuOperarea mediilor de dezvoltare cu principiul privilegiilor minime poate ajuta la limitarea impactului potențial al unei compromiteri.
- Conștientizarea rețeleiMonitorizarea traficului de rețea de ieșire pentru conexiuni neobișnuite poate dezvălui uneori comunicații C2 generate de DGA.
Componentele cheie ale load_libraries.py (din graphalgo)
download_remote_content(): Gestionează preluarea fișierelor de la adresele URL specificate.run_process()Execută scripturi Python externe într-o manieră detașată, suprimând ieșirea pentru a rămâne discret.get_output_file_path()Determină locația ideală în sistem pentru fișierul startup.py persistent.remove_self()Orchestrează curățarea post-execuție a fișierelor inițiale rău intenționate și a modificărilor pachetului.simple_shift_encrypt()/simple_shift_decrypt()Funcții criptografice personalizate pentru mascarea canalelor de comunicație, cruciale pentru implementarea DGA.load_libraries()Funcția centrală care coordonează întregul proces în mai multe etape, de la descărcarea inițială până la execuția finală a sarcinii utile și curățare.
Consecință
Ca și în cazul altor pachete potențial malițioase identificate de MEW, firewall-ul de dependențe a protejat imediat utilizatorii care ar include aceste pachete malițioase în dependențele lor. După confirmare, am urmat procedurile de notificare pentru ambele registre, care, după revizuire, au eliminat ambele pachete.





