El repositorio PyPI contienen código potencialmente inseguro
Investigadores de la Universidad de Turku (Finlandia) dieron a conocer hace poco los resultados de un análisis que realizaron a los paquetes en el repositorio de PyPI para el uso de construcciones potencialmente peligrosas que podrían generar vulnerabilidades. En el análisis que se realizó a cerca de 197.000 paquetes se identificó a 749.000 posibles problemas de seguridad.
Es decir, el 46% de los paquetes tiene al menos uno de esos problemas, que de ellos entre los problemas más comunes se encuentran los relacionados con el manejo de excepciones y el uso de capacidades de sustitución de código.
De los 749 mil problemas identificados, 442 mil (41%) fueron marcados como menores, 227 mil (30%) como moderadamente peligrosos y 80 mil (11%) como peligrosos.
El conjunto de datos se basa en una instantánea de todos los paquetes almacenados en el índice de paquetes de Python (PyPI)…
En términos de los tipos de problemas, como el manejo de excepciones y las diferentes inyecciones de código han sido los problemas más comunes. En este sentido, destaca el módulo de subprocesos. Reflexionando el tamaño generalmente pequeño de los paquetes, las métricas del tamaño del software no predice bien la cantidad de problemas revelados a través del análisis.
Algunos paquetes están fuera de lo común y contienen miles de problemas: por ejemplo, se encontraron 2589 problemas en el paquete PyGGI, principalmente relacionados con el uso de la construcción «try-except-pass» y se encontraron 2356 problemas en appengine- paquete sdk. También hay una gran cantidad de problemas en los paquetes genie.libs.ops, pbcore y genie.libs.parser.
Cabe señalar que los resultados se obtuvieron sobre la base de un análisis estático automatizado, que no tiene en cuenta el contexto de la aplicación de determinadas estructuras.
El desarrollador de Bandit, que se utilizó para escanear el código, sugirió que debido a la gran cantidad de falsos positivos, los resultados del escaneo no pueden considerarse vulnerabilidades directamente sin una revisión manual adicional de cada problema.
Por ejemplo, el analizador considera el uso de generadores de números aleatorios no confiables y algoritmos hash como MD5 como un problema de seguridad, mientras que en el código dichos algoritmos pueden usarse para propósitos que no afectan la seguridad.
El analizador también considera que cualquier procesamiento de datos externos en funciones inseguras como pickle, yaml.load, subprocess y eval es un problema, pero este uso no está necesariamente asociado con una vulnerabilidad y, de hecho, el uso de estas funciones puede ser un problema implementado sin una amenaza a la seguridad.
Entre los controles utilizados en el estudio:
- Uso de funciones potencialmente inseguras exec, mktemp, eval, mark_safe, etc.
- Configuración insegura de derechos de acceso a archivos.
- Conecte un enchufe de red a todas las interfaces de red.
- Uso de contraseñas y claves codificadas.
- Usando un directorio temporal predefinido.
- Usar pasar y continuar en manejadores de excepciones catch-all-style.
- Lanzamiento de aplicaciones web basadas en el marco web Flask con el modo de depuración habilitado.
- Usar métodos inseguros para deserializar datos.
- Utilizando funciones hash MD2, MD4, MD5 y SHA1.
- Uso de cifrados y modos de cifrado DES inseguros.
- Usar una implementación HTTPSConnection insegura en algunas versiones de Python.
- Especificando el esquema file://en urlopen.
- Usar generadores de números pseudoaleatorios al realizar tareas criptográficas.
- Usando el protocolo Telnet.
- Utilizando analizadores XML inseguros.
Adicionalmente, se menciona la detección de 8 paquetes maliciosos en el directorio PyPI. Los paquetes problemáticos se descargaron más de 30 mil veces antes de ser eliminados. Para ocultar la actividad maliciosa y evitar las advertencias de analizadores estáticos simples en los paquetes, usamos la codificación de bloques con código usando el formato Base64 y organizamos su ejecución después de la decodificación llamando a eval.
El código que se encuentra en los paquetes noblesse, genesisbot, are, suff, noblesse2 y noblessev2 para interceptar números de tarjetas de crédito y contraseñas almacenadas en los navegadores Chrome y Edge, así como transferir tokens de cuenta desde la aplicación Discord y enviar datos del sistema, incluidas capturas de pantalla del contenido de la pantalla. … Los paquetes pytagora y pytagora2 incluían la capacidad de descargar y ejecutar código ejecutable de terceros.
Finalmente si estás interesado en conocer más al respecto, puedes consultar los detalles en el siguiente enlace.