Ataques á cadea de subministración de software 2025 - paquetes maliciosos - paquetes Python maliciosos - paquetes NPM maliciosos

Unha ollada máis atenta aos ataques á cadea de subministración de software en 2025: comparación das campañas PyPI e npm

Xygeni observou recentemente un patrón preocupante no panorama dos ataques á cadea de subministración de software en 2025., aparecendo en dous xestores de paquetes populares: PyPI npmComo parte dos nosos esforzos continuos de intelixencia sobre ameazas,Alerta temperá de software malicioso (MEW) de Xygeni A ferramenta identificou unha instancia distinta pero metodoloxicamente similar dun paquete malicioso cargado noutro rexistro previamente. Este caso destaca como os actores de ameazas están a evolucionar e a reutilizar as técnicas de ataque en todos os ecosistemas, especialmente a través de paquetes maliciosos de Python paquetes npm maliciosos, o que aumenta o risco de que paquetes maliciosos se infiltren nas cadeas de subministración de código aberto.

O MEW de Xygeni: Detectando as semellanzas

A ferramenta MEW de Xygeni está deseñada para detectar e sinalizar paquetes maliciosos, especialmente os vinculados a ataques na cadea de subministración de software en 2025, en canto se publiquen en rexistros de código aberto. Funciona analizando os novos paquetes en busca de comportamentos sospeitosos.

Neste caso, identificou dúas paquetes maliciosos de Python (graphalgo en PyPI) e paquetes npm maliciosos (express-cookie-parser en npm).

Paquetes maliciosos de Python e npm en ataques á cadea de subministración de software (2025)

Exploremos as características comúns que desencadearon as nosas alertas:

Typosquatting

Ambos intentaron imitar paquetes populares existentes.

  • graphalgo (PyPI): "Paquete Python para crear e manipular grafos e redes."Subido por un usuario chamado "larrytech" O 13 de xuño de 2025, este paquete presentouse como unha alternativa PyPi ao proxecto orixinal non malicioso graphalgo, que posteriormente foi renomeado como graphdict.
  • analizador de cookies express (npm)Este paquete imitou o coñecido paquete analizador de cookies, mesmo duplicando o seu README.md. Esta suplantación de identidade é unha táctica clásica para aproveitar a confianza existente.

A ofuscación como primeira liña de defensa

Ambos paquetes ofuscaron o seu código malicioso dentro dos ficheiros orixinais. Para graphalgo, o código ofuscado atopouse dentro de /utils/load_libraries.py. No caso de que analizador de cookies express, cookie-loader.min.js contiña a carga útil ofuscada.

Esta capa inicial de ofuscación úsase normalmente para dificultar a inspección casual e a análise estática. A ofuscación foi bastante simple: compresión ZLib repetida máis codificación Base64. Este tipo de ofuscación indica claramente que o software está a tentar ocultar o seu comportamento. Xunto con outras probas, isto permitiu a Xygeni MEW clasificar os paquetes como posible software malicioso. Durante a fase de confirmación, os nosos revisores prepararon rapidamente un script de desofuscación que revelou a fase de eliminación obviamente maliciosa.

Entrega de carga útil en varias etapas e un punto de orixe compartido

Ambos paquetes funcionaron como iniciais "contagotas", preparando o escenario para a carga útil real. Compartían unha carga externa común"sementeURL do ficheiro:
https://raw.githubusercontent.com/johns92/blog_app/refs/heads/main/server/.env.example

Este ficheiro semente externo idéntico é un forte indicador dun actor de ameazas compartido. Curiosamente, o contido deste ficheiro semente semella ser simples variables de ambiente (por exemplo, JWT_SECRET, PORT), o que pode levar a unha inspección enganosa sobre a súa función real.

Resolución dinámica C2 cun DGA

Unha táctica sofisticada observada nestes paquetes maliciosos é o uso dun algoritmo de xeración de dominios (DGA) para resolver o servidor de comando e control (C2) de forma dinámica. Esta técnica, que se observa a miúdo en ataques avanzados á cadea de subministración de software en 2025, baséase nun hash SHA256 derivado do contido do ficheiro seed, combinado con outros valores codificados. Ao facelo, a infraestrutura C2 cambia con frecuencia, o que fai que as listas negras tradicionais sexan moito menos eficaces. Neste caso, a variante npm empregou un valor fixo de 496AAC7E como parte da súa lóxica DGA.

Establecemento da persistencia

Ambos os atacantes pretendían establecer unha presenza duradeira nos sistemas afectados. A súa estratexia consistía en soltar un ficheiro, startup.py (para PyPi) ou startup.js (para npm), en directorios comúns de datos de usuarios de Google Chrome en varios sistemas operativos (Windows, Linux, macOS).

Limpeza posterior á execución

Para minimizar os rastros, ambos scripts maliciosos realizaron operacións de limpeza. Isto incluíu a eliminación dos seus ficheiros de eliminación iniciais (load_libraries.py, cookie-loader.min.js) e modificando ficheiros de paquetes lexítimos (__init__.py, index.js) para eliminar as referencias aos compoñentes agora eliminados.

Indicadores de compromiso en paquetes maliciosos de Python e npm

  • Paquete PyPIgraphalgo (publicado por larrytech, 13 de xuño de 2025)
  • Paquete npmexpress-cookie-parser (especificamente a versión 1.4.12)
  • Acceso ao URL da semente compartida

https://raw.githubusercontent.com/johns92/blog_app/refs/heads/main/server/.env.example

  • Nomes de ficheiro persistentes: startup.py (Python) startup.js (JavaScript)
  • Rutas persistentes comúns (dependentes do sistema operativo)Dentro dos directorios de datos de usuario de Google Chrome (por exemplo, AppData\Local\Google\Chrome\UserData\Scripts\ en Windows, ~/.config/google-chrome/Scripts/ en Linux, etc.).

Como defenderse contra paquetes maliciosos nos ataques da cadea de subministración de software en 2025

Unha estratexia recomendada para desenvolvedores

Este incidente serve como un valioso caso práctico na paisaxe de ameazas en evolución dos ataques á cadea de subministración de software en 2025. Destaca como os paquetes maliciosos de Python e os paquetes npm maliciosos poden colarse en ecosistemas de confianza, a miúdo eludindo a detección ata que é demasiado tarde. É por iso que a detección temperá, as ferramentas intelixentes e a hixiene proactiva do sistema son agora partes esenciais de calquera fluxo de traballo DevOps seguro. Anímase aos desenvolvedores a ter en conta o seguinte:

Revisión de dependencias

Se os teus proxectos incluíron graphalgo or analizador de cookies express, sería prudente proceder á súa eliminación.

  • Para PyPI: pip uninstall graphalgo
  • Para npm: npm uninstall express-cookie-parser

Hixiene do sistema

Considere realizar unha análise exhaustiva do sistema. Tamén é recomendable comprobar manualmente as rutas comúns do directorio de datos de usuario de Chrome para detectar calquera erro inesperado. startup.py or startup.js arquivos.

Medidas de seguridade proactivas

  • Avaliar novas dependenciasEstablece unha rutina para avaliar exhaustivamente os novos paquetes antes da integración, centrándote nos de editores descoñecidos.
  • Integrar ferramentas de seguridadeFerramentas como MEW de Xygeni, xunto con outras ferramentas de análise de composición de software (SCA) solucións, poden proporcionar unha capa crítica de defensa ao identificar comportamentos e vulnerabilidades sospeitosas.
  • Mínimo privilexioOperar entornos de desenvolvemento co principio de mínimos privilexios pode axudar a limitar o impacto potencial dun compromiso.
  • Concienciación da redeA monitorización do tráfico de rede de saída para detectar conexións pouco comúns ás veces pode revelar comunicacións C2 xeradas por DGA.

Compoñentes clave de load_libraries.py (de graphalgo)

  • download_remote_content(): Xestiona a obtención de ficheiros desde URLs especificadas.
  • run_process()Executa scripts Python externos de xeito independente, suprimindo a saída para manter a discreción.
  • get_output_file_path()Determina a localización ideal do sistema para o ficheiro startup.py persistente.
  • remove_self(): Orquestra a limpeza posterior á execución dos ficheiros maliciosos iniciais e as modificacións do paquete.
  • simple_shift_encrypt() / simple_shift_decrypt()Funcións criptográficas personalizadas para ocultar canles de comunicación, cruciais para a implementación de DGA.
  • load_libraries()A función central que coordina todo o proceso multietapa, dende a descarga inicial ata a execución e limpeza final da carga útil.

Resultado

Do mesmo xeito que con outros paquetes potencialmente maliciosos identificados por MEW, o cortafuegos de dependencias protexeu inmediatamente os usuarios que incluían estes paquetes maliciosos nas súas dependencias. Tras a confirmación, seguimos os procedementos de notificación para ambos rexistros, que despois da revisión eliminaron ambos paquetes.

ferramentas-sca-tools-software-ferramentas-de-análise-de-composición
Priorizar, corrixir e protexer os riscos do software
Obtén a túa conta gratuíta.
Non se precisa tarxeta de crédito.

Asegura o desenvolvemento e a entrega do teu software

con Xygeni Product Suite