GitHub, “asediado” por repositorios con malware y confusión entre repositorios: por qué no tienes de qué preocuparte
12 de marzo de 2024
0 minutos de lecturaA medida que evoluciona el desarrollo de software de código abierto, también aumenta su vulnerabilidad ante las amenazas de ciberseguridad. Un ejemplo de ello es el reciente descubrimiento de repositorios con malware en GitHub. En este ciberataque, los actores de amenazas lograron subir código malicioso a GitHub, una plataforma que aloja millones de repositorios de código y que usan desarrolladores de todo el mundo.
Estos repositorios con malware en GitHub representan una amenaza no solo para los desarrolladores individuales, sino también para las organizaciones. Cuando se clonan los repositorios maliciosos o se incorpora su código a otros proyectos, el malware puede propagarse y provocar posibles filtraciones de datos o comprometer sistemas. En publicaciones anteriores de Snyk, hemos abordado amenazas relacionadas, como el typosquatting y la confusión de dependencias. Si sigues las prácticas recomendadas generalmente aceptadas, puedes evitar este tipo de riesgos. A continuación, reiteramos esas prácticas y presentamos algunas herramientas de Snyk, como Snyk Advisor y Snyk Learn. Después analizamos en profundidad este ataque específico contra GitHub. Cabe señalar que este tipo de ataque no se limita necesariamente a GitHub. Cualquier sistema de repositorios de código fuente que permita compartir y copiar código libremente podría alojar este tipo de código malicioso.
La función hipotética de Python anterior, al ejecutarse, puede ejecutar un comando de shell para descargar y ejecutar un script malicioso desde un servidor externo. Esto demuestra la importancia de examinar detenidamente el código de repositorios externos.
Cómo protegerte a ti y a tu equipo del malware en GitHub: prácticas recomendadas e higiene de seguridad
En una época en la que el desarrollo de software de código abierto es la norma y los repositorios de GitHub son una mina de oro de código reutilizable, es cada vez más importante mantener una buena higiene de seguridad en el código que usamos. En esta sección, analizamos la importancia de evaluar los repositorios de código, verificar su legitimidad, los peligros de clonar repositorios maliciosos y las pautas para que los equipos de seguridad preparen a sus desarrolladores.
Evaluar los repositorios de código
En el desarrollo de software, evaluar los repositorios de código es un paso crucial que no debe subestimarse. Al examinarlos minuciosamente, los desarrolladores pueden evitar integrar código potencialmente malicioso en sus proyectos. GitHub, por ejemplo, aloja una enorme cantidad de repositorios, y no es raro encontrar malware disfrazado de código útil.
Es fundamental revisar el código minuciosamente antes de incorporarlo a tu proyecto. Esto incluye verificar el historial del repositorio, sus colaboradores y los problemas registrados. Los repositorios con un solo colaborador, un historial breve o problemas de seguridad sin resolver deben tratarse con cautela.
Para evaluar bibliotecas y paquetes de software de código abierto en npm, PyPI, RubyGems y otros registros de paquetes, se recomienda ampliamente que los desarrolladores usen la herramienta web Snyk Advisor, que ofrece una puntuación de estado de los paquetes y las bibliotecas de código abierto, incluida información sobre su postura de seguridad, mantenimiento y licencias.

Pautas para que los equipos de seguridad preparen a sus equipos de desarrollo
Los equipos de seguridad desempeñan un papel fundamental para garantizar la seguridad del entorno de desarrollo. Estas son algunas pautas:
Capacita a los desarrolladores: Organiza talleres o sesiones de capacitación periódicos sobre la importancia de evaluar el código, verificar la legitimidad de los repositorios y conocer los ataques a la cadena de suministro de código abierto, como el typosquatting y la confusión de dependencias.
Implementa herramientas de seguridad: Usa herramientas de seguridad que puedan analizar automáticamente los repositorios en busca de vulnerabilidades conocidas o actividades sospechosas.
Establece prácticas de codificación segura: Promueve prácticas de codificación segura en el equipo. Esto puede incluir revisiones de código entre pares, el uso de linters con reglas de seguridad y auditorías periódicas.
Plan de respuesta a incidentes: Ten preparado un plan de respuesta a incidentes por si se produce una brecha de seguridad a causa de un repositorio malicioso.
Si sigues estas prácticas recomendadas y mantienes una buena higiene de seguridad, podrás proteger tu proceso de desarrollo de software frente a las amenazas ocultas en los repositorios de GitHub.
Entender la confusión entre repositorios
El término “confusión entre repositorios” describe una estrategia que usan los atacantes en este contexto. Consiste en crear repositorios con nombres similares a los de proyectos legítimos existentes. El objetivo es engañar a los desarrolladores para que usen el repositorio equivocado y, sin darse cuenta, descarguen y ejecuten código malicioso.
Por ejemplo, si existe un repositorio popular llamado legitimate_repo, un atacante podría crear uno llamado legitimate-repo o legitimate_repo1. Los desarrolladores desprevenidos podrían confundirlos con el original y clonarlos sin saber que están cayendo en una trampa. Otra variante frecuente, observada en los incidentes de repositorios con malware en GitHub, consiste en usar una bifurcación de un repositorio popular y publicarla como un repositorio nuevo.
Ataques de malware, typosquatting y confusión de dependencias
La confusión entre repositorios está estrechamente relacionada con otras dos amenazas de ciberseguridad: los ataques de typosquatting y de confusión de dependencias. El typosquatting consiste en registrar nombres de dominio similares a los populares o publicar paquetes en registros de código abierto, como npm y PyPI, con la esperanza de aprovecharse de los desarrolladores que escriben mal una URL o el nombre de un paquete al instalarlo. En el contexto de GitHub, esto puede implicar la creación de repositorios con nombres muy parecidos a los de otros populares: con solo un carácter de diferencia o desde otra cuenta, usando el mismo nombre que un repositorio popular.
Por otro lado, los ataques de confusión de dependencias aprovechan la forma en que los administradores de paquetes gestionan las dependencias. Si un proyecto de software depende de un paquete que no se encuentra en el repositorio público, pero sí está disponible en uno privado, un atacante puede crear un paquete con el mismo nombre en el repositorio público. El administrador de paquetes podría entonces descargar el paquete malicioso en lugar del legítimo.
En el ejemplo anterior, si private-package no existe en el registro público de npm, pero un atacante publicó allí una versión maliciosa, ejecutar npm install podría hacer que se descargue e instale el paquete malicioso.
El ataque de repositorios con malware en GitHub, junto con la confusión entre repositorios, el typosquatting y los ataques de confusión de dependencias, representa una grave amenaza para la seguridad del desarrollo de software de código abierto. Esto pone de relieve la necesidad de que los desarrolladores tengan cuidado al usar código de terceros y adopten medidas sólidas de ciberseguridad.
Entender el ataque de repositorios con malware en GitHub
¿Qué ocurrió en el ataque con repositorios maliciosos de GitHub? Veamos los detalles de este incidente, un método para infiltrarse en las estaciones de trabajo de los desarrolladores de software. Analizaremos cómo se llevó a cabo el ataque, las tácticas de los atacantes y los daños potenciales.
El primer caso registrado de este ataque se remonta al 28 de febrero de 2024. En un hecho que parecía inofensivo, un usuario anónimo bifurcó un popular repositorio de código abierto y lo publicó como un repositorio nuevo. Sin embargo, pronto se descubrió que el nuevo repositorio no era tan inofensivo como parecía.
Los responsables habían incluido malware ofuscado en el código y convertido el repositorio en un campo minado de código malicioso. Los desarrolladores desprevenidos que clonaron o bifurcaron estos repositorios introdujeron el malware en sus sistemas locales sin saberlo.
Método de los atacantes: bifurcar repositorios de código e insertar malware
Los atacantes usaron una técnica ingeniosa y sutil. Bifurcaron repositorios existentes de código abierto, una práctica habitual entre los desarrolladores que quieren contribuir a un proyecto de código abierto. Sin embargo, luego agregaron código malicioso ofuscado a esos repositorios.
A continuación, se muestra un ejemplo de cómo bifurcar y crear un repositorio nuevo:
En el proceso normal de bifurcación que se muestra arriba, el atacante agregaría el código malicioso en esta etapa y luego volvería a subir el repositorio a GitHub.
El malware ofuscado se diseñó de tal manera que fuera difícil de detectar mediante el proceso tradicional de revisión de código. Cuando se descubrió el código malicioso, ya había infectado los sistemas de varios desarrolladores.
Daños potenciales: robo de criptomonedas y contraseñas
El objetivo principal del malware insertado era robar información confidencial de los dispositivos infectados. En concreto, el malware apuntaba a las billeteras de criptomonedas y las contraseñas almacenadas en los sistemas de los desarrolladores.
Una vez instalado en el sistema, el malware buscaba archivos específicos relacionados con billeteras de criptomonedas, como Bitcoin y Ethereum, y los enviaba al atacante. También intentaba robar contraseñas almacenadas en texto sin cifrar o con un cifrado débil.
A continuación, se muestra una representación simplificada en pseudocódigo de los objetivos del malware:
El pseudocódigo anterior ofrece una idea simplificada de lo que podría hacer el malware una vez que se infiltra en un sistema.
El ataque de repositorios con malware en GitHub es un claro recordatorio de la importancia de aplicar medidas de seguridad estrictas al desarrollar software y de los peligros potenciales que acechan en el ecosistema de código abierto. Como desarrolladores y profesionales de seguridad, debemos mantenernos alerta y seguir las prácticas recomendadas para prevenir estos ataques.
Ataques de typosquatting y confusión de dependencias: amenazas estrechamente relacionadas
En relación con los ataques de malware en GitHub, encontramos otras dos amenazas de ciberseguridad comunes, pero peligrosas: el typosquatting y los ataques de confusión de dependencias. Ambos están estrechamente relacionados con el reciente ataque de repositorios con malware en GitHub. Para entender a fondo esta relación y los riesgos potenciales, primero definiremos estos conceptos y luego veremos algunos casos reales en los que estos ataques se llevaron a cabo con éxito.
Definición de los ataques de typosquatting y confusión de dependencias
El typosquatting, en el contexto de los repositorios de código y el software de código abierto, es un tipo de ciberataque dirigido a desarrolladores que escriben mal el nombre de una biblioteca al instalar paquetes. Por ejemplo, npm install riact-dom en lugar de npm install react-dom. Los atacantes crean paquetes maliciosos con nombres similares a los de paquetes populares y esperan a que los desarrolladores cometan errores tipográficos. Cuando los desarrolladores instalan esos paquetes maliciosos, los atacantes pueden robar información confidencial o introducir malware en el sistema del desarrollador.
Por otro lado, un ataque de confusión de dependencias es un tipo de ataque a la cadena de suministro dirigido a los procesos de desarrollo de software de código abierto. En este ataque, un hacker crea un paquete malicioso con el mismo nombre que un paquete privado usado en el entorno de desarrollo de un proyecto. Cuando el sistema de compilación del proyecto obtiene las dependencias, recoge por error el paquete público malicioso, creyendo que es el privado. Esto permite que el código malicioso ingrese en el código base del proyecto y lo infecte.
Ejemplos reales de ataques de typosquatting y confusión de dependencias
Uno de los ejemplos más notorios de typosquatting fue el ataque de 2017 al repositorio oficial de paquetes de Python, PyPI. Los atacantes subieron paquetes maliciosos con nombres muy similares a los de paquetes populares, lo que afectó a miles de usuarios que los instalaron por accidente.
El investigador de seguridad Alex Birsan descubrió un ejemplo reciente de un ataque de confusión de dependencias. Aprovechó esta vulnerabilidad en varias empresas de alto perfil, como Apple, Microsoft y PayPal, al inyectar su propio código en sus sistemas internos. Creó paquetes maliciosos con los mismos nombres que los paquetes privados que estas empresas usaban y los subió a repositorios públicos de paquetes. Cuando los sistemas de compilación de las empresas descargaron los paquetes, usaron sin darse cuenta los paquetes maliciosos de Birsan, lo que permitió que su código se ejecutara en sus sistemas.
En conclusión, tanto la suplantación mediante errores tipográficos como los ataques de confusión de dependencias representan una amenaza importante para el desarrollo de software de código abierto. Es fundamental que los desarrolladores y las organizaciones conozcan estos vectores de ataque e implementen medidas adecuadas para proteger sus sistemas y bases de código.
Conclusión
En resumen, analizamos el problema de los repositorios con malware en GitHub y cómo pueden aprovechar vulnerabilidades comunes en la seguridad del código abierto. En particular, hablamos de cómo estos repositorios pueden recurrir a tácticas como la suplantación mediante errores tipográficos y los ataques de confusión de dependencias para infiltrarse en sistemas desprevenidos.
Como desarrolladores y profesionales de seguridad, somos la primera línea de defensa ante este tipo de amenazas de ciberseguridad. Es fundamental seguir las prácticas recomendadas y mantener una buena higiene de seguridad para proteger nuestro código y nuestros sistemas.
Implementar algunas estrategias clave puede contribuir mucho a protegerte de estas amenazas:
Verifica siempre la integridad de los repositorios y paquetes antes de usarlos. Esto puede ser tan sencillo como revisar el nombre de usuario de quien mantiene el repositorio o tan complejo como verificar las firmas criptográficas de los paquetes.
Presta atención a los errores tipográficos al clonar repositorios o instalar paquetes.
Usa fuentes privadas de paquetes para los paquetes internos y así reducir el riesgo de ataques de confusión de dependencias.
Actualiza y aplica parches a tus sistemas con regularidad para protegerte de las vulnerabilidades conocidas.



