Se descubrió que los paquetes de PyPI ‘keep’, ‘pyanxdns’, ‘api-res-py’ contenían una puerta trasera debido a la presencia de una dependencia de ‘solicitud’ maliciosa en algunas versiones.
Por ejemplo, mientras que la mayoría de las versiones del proyecto ‘keep’ utilizan las solicitudes legítimas del módulo de Python para realizar solicitudes HTTP, ‘keep’ v.1.2 contiene ‘request’ (sin s ) que es malware.
BleepingComputer contactó a los autores de cada uno de estos paquetes para comprender si esto fue causado por un mero error tipográfico, autosabotaje o por el secuestro de las cuentas del mantenedor.
El paquete PyPI ‘keep’ usa una ‘solicitud’ maliciosa
Algunas versiones de los paquetes de PyPI, ‘keep’, ‘pyanxdns’ y ‘api-res-py’ se detectaron mediante una dependencia maliciosa, ‘request’
En mayo, el usuario de GitHub, duxinglin1 , notó que las versiones vulnerables contenían la dependencia «solicitud» mal escrita, a diferencia de la biblioteca de solicitudes legítimas .
Como tal, esta semana se han asignado los siguientes CVE con respecto a las versiones vulnerables:
- CVE-2022-30877 : ‘mantener’ la versión 1.2 contiene la ‘solicitud’ de puerta trasera, al contrario de lo que implica el aviso .
- CVE-2022-30882 : ‘pyanxdns’ versión 0.2 afectada
- CVE-2022-31313 : ‘api-res-py’ versión 0.1 afectada
Aunque ‘pyanxdns’ y ‘api-res-py’ pueden ser proyectos a pequeña escala, el paquete ‘keep’, en particular, se descarga más de 8000 veces en una semana en promedio, con su versión 1.2 usando la dependencia maliciosa:
En 2020, Tencent Onion Anti-Intrusion System descubrió una ‘solicitud’ maliciosa de typosquat cargada en el registro PyPI que se hizo pasar por la biblioteca HTTP de solicitudes , pero en su lugar eliminó ladrones de información maliciosos.
«Encontramos una puerta trasera maliciosa en la versión 1.2 de este proyecto, y su puerta trasera maliciosa es el paquete de solicitud. Incluso si PyPI eliminó el paquete de solicitud, muchos sitios espejo no eliminaron completamente este paquete, por lo que aún podría instalarse». escribe el usuario de GitHub duxinglin1 .
El código malicioso dentro de la «solicitud» falsificada se destaca a continuación:
La línea 57 contiene una URL codificada en base64 para el malware ‘check.so’ que se muestra a continuación. Blackorbird , analista de Threat Intel, identificó además otra URL (x.pyx), que también se muestra a continuación, asociada con la dependencia de «solicitud» falsificada:
http://dexy[.]top/x.pyx
El archivo ‘check.so’ entrega un troyano de acceso remoto (RAT), mientras que ‘x.pyx’ obtenido por BleepingComputer contiene malware de robo de información que roba cookies e información personal de navegadores web como Chrome, Firefox, Yandex, Brave y mucho mas:
El troyano que roba información intentará robar los nombres de inicio de sesión y las contraseñas almacenadas en los navegadores web.
Después de obtener acceso a las credenciales del usuario, los actores de amenazas pueden intentar comprometer otras cuentas utilizadas por el desarrollador, lo que podría generar aún más ataques a la cadena de suministro.
¿Secuestro o un error tipográfico genuino?
La presencia de una dependencia maliciosa en varios paquetes de PyPI plantea una pregunta crucial: ¿cómo ocurrió esto?
BleepingComputer contactó a los autores de cada uno de estos paquetes para comprender si esto fue causado por un mero error tipográfico, autosabotaje o por el secuestro de las cuentas del mantenedor.
Recibimos respuesta del autor y mantenedor de ‘pyanxdns’, Marky Egebäck, quien confirma que esto se debe a un error tipográfico en lugar de un compromiso de cuenta.
Y, por lo que parece, parece que los autores de otros dos paquetes también introdujeron inadvertidamente ‘solicitud’ en lugar de las ‘solicitudes’ legítimas debido a un inocente error de tipeo.
«Lamento decirlo por un simple error tipográfico en el archivo setup.py , ya que el historial de git muestra que esto se agregó cuando yo agregué install_requires «, dijo Egebäck a BleepingComputer.
Desde entonces, el desarrollador volvió a cargar una nueva versión en PyPI y eliminó la versión que hace referencia a la dependencia de «solicitud» maliciosa.
«Este fue [un] error honesto basado en un error tipográfico en setup.py . Por lo general, no publico cosas en PyPI, pero hice esto rápidamente para un amigo y para mí. No estoy seguro de si promocionó esto, pero el propósito era principalmente para uso personal en [un] proyecto docker interno», dice Egebäck.
Egebäck agradeció al usuario de GitHub duxinglin1 por resaltar la presencia de la dependencia maliciosa en su proyecto y explicó que últimamente no ha dedicado mucho tiempo a mantener el proyecto Python contribuido:
«Por supuesto, lo que se podría haber hecho mucho mejor habría sido haber solucionado esto antes, pero no entendía la gravedad de esto y, dado que lamentablemente [hoy en día] dedico muy poco tiempo a la codificación, tomó mucho tiempo», dice Egebäck.
Cuando se codifican aplicaciones, los errores de tipeo inocentes por parte del desarrollador pueden dar éxito inadvertidamente a los ataques de typosquatting que cuentan con deslices tan exactos para comprometer la cadena de suministro de software más amplia.
Aunque en este caso, la dependencia maliciosa de ‘solicitud’ se eliminó hace mucho tiempo del registro de PyPI, cualquiera que use una versión vulnerable de los paquetes PyPI y confíe en un espejo para obtener dependencias puede terminar con ladrones de información maliciosos en su sistema.
Fuente: https://www.bleepingcomputer.com