Xygeni va observar recentment un patró preocupant en el panorama dels atacs a la cadena de subministrament de programari el 2025., que apareixen a través de dos gestors de paquets populars: PyPI i npmCom a part dels nostres esforços continus d'intel·ligència d'amenaces,Alerta precoç de programari maliciós (MEW) de Xygeni L'eina va identificar una instància diferent però metodològicament similar d'un paquet maliciós carregat anteriorment a un altre registre. Aquest cas destaca com els actors d'amenaces estan evolucionant i reutilitzant tècniques d'atac en tots els ecosistemes, especialment a través de paquets Python maliciosos i paquets npm maliciosos, cosa que augmenta el risc que paquets maliciosos s'infiltrin a les cadenes de subministrament de codi obert.
El MEW de Xygeni: Detectant les similituds
L'eina MEW de Xygeni està dissenyada per detectar i marcar paquets maliciosos, especialment els vinculats als atacs de la cadena de subministrament de programari del 2025, tan bon punt es publiquen als registres de codi obert. Funciona analitzant els nous paquets per detectar comportaments sospitosos.
En aquest cas, va identificar dos paquets Python maliciosos (graphalgo a PyPI) i paquets npm maliciosos (express-cookie-parser a npm).
Paquets Python i npm maliciosos en atacs a la cadena de subministrament de programari (2025)
Explorem les característiques comunes que van desencadenar les nostres alertes:
typosquatting
Tots dos van intentar suplantar paquets populars existents.
- graphalgo (PyPI): "Paquet de Python per a la creació i manipulació de grafs i xarxes."Penjat per un usuari anomenat «larrytech» El 13 de juny de 2025, aquest paquet es va presentar com una alternativa PyPi al projecte original no maliciós graphalgo, que més tard va ser rebatejat com a graphdict.
- analitzador de galetes exprés (npm)Aquest paquet imitava el conegut paquet analitzador de galetes, fins i tot duplicant-lo README.md. Aquesta suplantació d'identitat és una tàctica clàssica per aprofitar la confiança existent.
L'ofuscació com a primera línia de defensa
Tots dos paquets van ofuscar el seu codi maliciós dins dels fitxers originals. Per a grafalgo, el codi ofuscat s'ha trobat dins de /utils/load_libraries.py. En el cas de analitzador de galetes exprés, cookie-loader.min.js contenia la càrrega útil ofuscada.
Aquesta capa inicial d'ofuscació s'utilitza normalment per dificultar la inspecció casual i l'anàlisi estàtica. L'ofuscació era bastant senzilla: compressió ZLib repetida més codificació Base64. Aquest tipus d'ofuscació indica clarament que el programari intenta ocultar el seu comportament. Juntament amb altres proves, això va permetre a Xygeni MEW classificar els paquets com a possible programari maliciós. Durant la fase de confirmació, els nostres revisors van preparar ràpidament un script de desofuscació que revelava la fase de dropper, òbviament maliciosa.
Lliurament de càrrega útil en diverses etapes i un punt d'origen compartit
Tots dos paquets funcionaven com a inicials "comptagotes", preparant l'escenari per a la càrrega útil real. Compartien una càrrega externa comuna"llavorURL del fitxer ”:https://raw.githubusercontent.com/johns92/blog_app/refs/heads/main/server/.env.example
Aquest fitxer de llavor extern idèntic és un fort indicador d'un actor d'amenaces compartit. Curiosament, el contingut d'aquest fitxer de llavor sembla ser simples variables d'entorn (per exemple, JWT_SECRET, PORT), cosa que pot induir a error la inspecció de la seva funció real.
Resolució dinàmica C2 amb un DGA
Una tàctica sofisticada que s'observa en aquests paquets maliciosos és l'ús d'un algorisme de generació de dominis (DGA) per resoldre dinàmicament el servidor de comandament i control (C2). Aquesta tècnica, que sovint es veu en atacs avançats de la cadena de subministrament de programari el 2025, es basa en un hash SHA256 derivat del contingut del fitxer llavor, combinat amb altres valors codificats. En fer-ho, la infraestructura C2 canvia amb freqüència, cosa que fa que les llistes negres tradicionals siguin molt menys efectives. En aquest cas, la variant npm utilitzava un valor fix de 496AAC7E com a part de la seva lògica DGA.
Establiment de la persistència
Tots dos atacants pretenien establir una presència duradora als sistemes afectats. La seva estratègia consistia a deixar anar un fitxer, startup.py (per a PyPi) o startup.js (per a npm), en directoris comuns de dades d'usuari de Google Chrome en diversos sistemes operatius (Windows, Linux, macOS).
Neteja posterior a l'execució
Per minimitzar els rastres, tots dos scripts maliciosos van realitzar operacions de neteja. Això incloïa la supressió dels seus fitxers inicials (load_libraries.py, cookie-loader.min.js) i modificant fitxers de paquets legítims (__init__.py, index.js) per eliminar les referències als components ara eliminats.
Indicadors de compromís en paquets maliciosos de Python i npm
- Paquet PyPIgraphalgo (publicat per larrytech, 13 de juny de 2025)
- Paquet npmexpress-cookie-parser (específicament la versió 1.4.12)
- Accés a l'URL de llavor compartida:
https://raw.githubusercontent.com/johns92/blog_app/refs/heads/main/server/.env.example
- Noms de fitxer persistents:
startup.py(Python)startup.js(JavaScript) - Rutes persistents comunes (dependents del sistema operatiu)Dins dels directoris de dades d'usuari de Google Chrome (per exemple,
AppData\Local\Google\Chrome\UserData\Scripts\a Windows,~/.config/google-chrome/Scripts/a Linux, etc.).
Com defensar-se contra paquets maliciosos en atacs a la cadena de subministrament de programari el 2025
Un enfocament recomanat per a desenvolupadors
Aquest incident serveix com a valuós cas d'estudi en el panorama d'amenaces en evolució dels atacs a la cadena de subministrament de programari el 2025. Destaca com els paquets maliciosos de Python i els paquets npm maliciosos poden colar-se en ecosistemes de confiança, sovint evadint la detecció fins que és massa tard. És per això que la detecció precoç, les eines intel·ligents i la higiene proactiva del sistema són ara parts essencials de qualsevol flux de treball DevOps segur. S'anima els desenvolupadors a tenir en compte el següent:
Revisió de dependències
Si els vostres projectes han inclòs grafalgo or analitzador de galetes exprés, seria prudent procedir a la seva eliminació.
- Per a PyPI:
pip uninstall graphalgo - Per a npm:
npm uninstall express-cookie-parser
Higiene del sistema
Penseu en la possibilitat de dur a terme una anàlisi completa del sistema. També és recomanable comprovar manualment les rutes comunes del directori de dades d'usuari de Chrome per detectar qualsevol error inesperat. startup.py or startup.js arxius.
Mesures de seguretat proactives
- Avaluar noves dependènciesEstabliu una rutina per avaluar a fons els nous paquets abans de la integració, centrant-vos en els d'editors desconeguts.
- Integrar eines de seguretatEines com el MEW de Xygeni, juntament amb altres eines d'anàlisi de composició de programari (SCA) solucions, poden proporcionar una capa crítica de defensa identificant comportaments i vulnerabilitats sospitoses.
- Privilegi mínimOperar entorns de desenvolupament amb el principi de mínims privilegis pot ajudar a limitar l'impacte potencial d'una vulneració.
- Conscienciació de la xarxaEl seguiment del trànsit de xarxa sortint per detectar connexions inusuals de vegades pot revelar comunicacions C2 generades per DGA.
Components clau de load_libraries.py (de graphalgo)
download_remote_content(): Gestiona l'obtenció de fitxers des d'URL especificades.run_process()Executa scripts Python externs de manera independent, suprimint la sortida per mantenir la discreció.get_output_file_path()Determina la ubicació ideal del sistema per al fitxer startup.py persistent.remove_self(): Orquestra la neteja posterior a l'execució dels fitxers maliciosos inicials i les modificacions del paquet.simple_shift_encrypt()/simple_shift_decrypt()Funcions criptogràfiques personalitzades per ocultar els canals de comunicació, crucials per a la implementació de DGA.load_libraries()La funció central que coordina tot el procés multietapa, des de la descàrrega inicial fins a l'execució i neteja final de la càrrega útil.
Seqüeles
Igual que amb altres paquets potencialment maliciosos identificats per MEW, el tallafocs de dependències va protegir immediatament els usuaris que incloguessin aquests paquets maliciosos a les seves dependències. Després de la confirmació, vam seguir els procediments de notificació per a tots dos registres, que després de la revisió van eliminar tots dos paquets.





