Los investigadores de seguridad han descubierto una forma sencilla e inquietante para que los atacantes distribuyan cargas útiles maliciosas a través del repositorio de paquetes PyPI.
La técnica simplemente implica volver a registrar un paquete malicioso en PyPI usando el mismo nombre que cualquier paquete legítimo, previamente registrado pero ahora eliminado del repositorio, y luego esperar a que las organizaciones lo descarguen. Dado que PyPI no prohíbe la reutilización de nombres de paquetes eliminados, es fácil para los adversarios hacer pasar paquetes maliciosos que alguna vez estuvieron disponibles en el registro como paquetes legítimos.
Desvío del renacimiento
“Los atacantes pueden utilizar el método ‘Revival Hijack’ como un simple ataque a la cadena de suministro, dirigido a organizaciones e infiltrándose en una amplia variedad de entornos”, dijeron los investigadores. JFrog advirtió en un informe esta semana. “Los usuarios de PyPI deben permanecer atentos y asegurarse de que sus máquinas CI/CD no intenten instalar paquetes que ya han sido eliminados de PyPI”, señalaron, después de haber descubierto recientemente un actor malicioso que utiliza esta táctica en un aparente intento de distribuir malware.
El método de ataque descubierto por JFrog es uno de varios que los adversarios han utilizado en los últimos años para intentar introducir malware en entornos empresariales a través de repositorios de código públicos como PyPI, npm, Maven Central, NuGet y RubyGems. Las tácticas comunes incluyen clonación e infección repositorios populares, objetos envenenados, y buscando y explotar los secretos revelados como claves privadas y certificados de bases de datos en ataques.
Los actores maliciosos también han intentado engañar a los desarrolladores para que instalen accidentalmente paquetes maliciosos aprovechando errores tipográficos comunes o utilizando ligeras variaciones en el nombre de un paquete legítimo (“g00gle” en lugar de “google, por ejemplo”). ataques tipográficos continúa sin cesar, a pesar de los esfuerzos de organizaciones y gestores de PyPI y otros registros para protegerse de él.
El problema con Revival Hijack es que la técnica no se basa en un error por parte de la víctima, como suele ocurrir con la typosquatting y algunos otros métodos de ataque. “Muchos usuarios consideran seguro actualizar un paquete que alguna vez fue seguro a su última versión (¡aunque no lo sea!)”, señaló JFrog. “Muchas máquinas CI/CD ya están configuradas para instalar estos paquetes automáticamente. »
Reutilizar nombres de paquetes abandonados
Según JFrog, cuando un desarrollador elimina un proyecto de PyPI, los nombres de los paquetes asociados inmediatamente quedan disponibles para cualquier otra persona. Esto significa que un atacante puede secuestrar fácilmente los nombres de los paquetes e infectar a cualquier usuario de los paquetes originales que intente actualizar a la última versión. Cualquier usuario que quiera instalarlo por primera vez suponiendo que sea el original también se vería afectado.
Para probar la efectividad del vector de ataque, los investigadores de JFrog primero crearon un proyecto vacío y lo publicaron en PyPI con el nombre “revival-package versión 1.0.0”, utilizando una cuenta de prueba “origina_autor”. Después de publicar el proyecto, los investigadores lo eliminaron de PyPI y casi inmediatamente publicaron otro paquete vacío con el mismo nombre en PyPI, pero desde una cuenta “new_authr” diferente y un número de versión diferente, 4.0.0.
El ejercicio mostró que PyPI mostraba el segundo paquete vacío de JFrog simplemente como una nueva versión del “paquete de reactivación” original de la compañía, sin indicación de que contuviera un código significativamente diferente. Si el paquete JFrog original hubiera sido en realidad un código legítimo utilizado por los desarrolladores, un sistema CI/CD habría descargado la “nueva” versión asumiendo que era una actualización.
“Habiendo demostrado que el secuestro de paquetes legítimos eliminados puede lograrse fácilmente, [we] “Decidí analizar cuántos paquetes en PyPI probablemente serían víctimas de un ‘Revival Hijack’, lo que significa que habían sido eliminados previamente y ahora pueden ser reemplazados/secuestrados”, dijo JFrog.
Una amenaza clara y presente
Los investigadores de JFrog descubrieron que se habían eliminado 120.000 paquetes y que los piratas informáticos podrían secuestrarlos para introducir malware en PyPI. Cuando los investigadores filtraron los resultados para incluir sólo paquetes que habían estado activos durante al menos varios meses o que los usuarios ya habían descargado más de 100.000 veces, ese número se redujo a alrededor de 22.000 paquetes.
Para evitar que los adversarios hagan un mal uso de estos nombres de paquetes abandonados, los investigadores de JFrog “secuestraron” los más populares de estos paquetes y los reemplazaron con paquetes vacíos. También se aseguraron de que el número de versión de todos los paquetes vacíos fuera 0.0.0.1, para garantizar que nadie que usara los paquetes originales descargara accidentalmente el paquete vacío como una actualización.
A pesar de esta precaución, los paquetes vacíos de JFrog generaron casi 200.000 descargas automáticas y manuales durante un período de tres meses, lo que demuestra que la amenaza de que Revival sea secuestrado es muy real, dijo el proveedor de seguridad. “Esto parece indicar que hay tareas y scripts obsoletos que todavía están buscando paquetes eliminados, o usuarios que han descargado estos paquetes manualmente debido a errores tipográficos”, dijo JFrog.
En un escenario de ataque del mundo real, un adversario probablemente habría adjuntado un número de versión alto a cada paquete secuestrado para que los sistemas CI/CD los descargaran automáticamente pensando que eran actualizaciones, dijo JFrog. La empresa recomendó que PyPI prohibiera por completo la reutilización de nombres de paquetes abandonados. Las organizaciones que utilizan PyPI también deben ser conscientes de este vector de ataque al actualizar a nuevas versiones de paquetes, advirtió JFrog.