El 46% de los paquetes de Python en el repositorio PyPI contienen código potencialmente inseguro

Un grupo de investigadores de la Universidad de Turku (Finlandia) publicó los resultados de un análisis de paquetes en el repositorio PyPI para detectar el uso de construcciones potencialmente peligrosas que podrían dar lugar a vulnerabilidades. Durante el análisis de 197.000 paquetes se identificaron 749.000 problemas potenciales de seguridad. En el 46% de los paquetes existe al menos un problema de este tipo. Entre los problemas más comunes se destacan las deficiencias relacionadas con el manejo de excepciones y el uso de construcciones que permiten la inyección de código.

De los 749.000 problemas identificados, 442.000 (41%) fueron clasificados como menores, 227.000 (30%) como problemas de riesgo moderado y 80.000 (11%) como peligrosos. Algunos paquetes se destacan por tener miles de problemas: por ejemplo, el paquete PyGGI presenta 2589 problemas, principalmente relacionados con el uso de la construcción "try-except-pass", mientras que en el paquete appengine-sdk se encontraron 2356 problemas. También hay un gran número de problemas en los paquetes genie.libs.ops, pbcore y genie.libs.parser.

Cabe señalar que los resultados se obtuvieron a partir de un análisis estático automatizado que no tiene en cuenta el contexto de uso de ciertas construcciones. El desarrollador de la herramienta bandit, que se utilizó para escanear el código, expresó que debido al alto número de falsos positivos, los resultados de la verificación no pueden considerarse directamente como vulnerabilidades sin una revisión manual adicional de cada problema.

Por ejemplo, el analizador considera un problema de seguridad el uso de generadores y algoritmos de hash no confiables, como MD5, mientras que en el código tales algoritmos pueden utilizarse con fines que no afectan la seguridad. El analizador también considera un problema cualquier manejo de datos externos en funciones inseguras, como pickle, yaml.load, subprocess y eval, pero este uso no necesariamente implica la aparición de una vulnerabilidad y en la práctica, el uso de dichas funciones puede llevarse a cabo sin amenaza para la seguridad.

Entre las verificaciones utilizadas en la investigación:

  • Uso de funciones potencialmente inseguras como exec, mktemp, eval, mark_safe, etc.
  • Asignación de permisos de acceso insegura para archivos.
  • Conexión de un socket de red a todas las interfaces de red.
  • Uso de contraseñas y claves codificadas de manera rígida en el código.
  • Uso de un directorio temporal predefinido.
  • Uso de pass y continue en controladores de excepciones estilo catch-all;
  • Ejecución de aplicaciones web basadas en el marco web Flask en modo de depuración habilitado.
  • Uso de métodos de deserialización de datos inseguros.
  • Uso de funciones hash MD2, MD4, MD5 y SHA1.
  • Uso de cifrados DES inseguros y modos de cifrado.
  • Uso de una implementación insegura de HTTPSConnection en algunas versiones de Python.
  • Especificación del esquema file:// en urlopen.
  • Uso de generadores de números pseudoaleatorios al realizar tareas criptográficas.
  • Uso del protocolo Telnet.
  • Uso de analizadores XML inseguros.

Adicionalmente, se puede señalar la detección de 8 paquetes maliciosos en el catálogo de PyPI. Antes de su eliminación, los paquetes problemáticos lograron ser descargados más de 30,000 veces. Para ocultar la actividad maliciosa y evadir advertencias de simples analizadores estáticos, se utilizaba la codificación de bloques de código mediante Base64 y la organización de la ejecución después de la decodificación a través de la llamada eval.

En los paquetes noblesse, genesisbot, are, suffer, noblesse2 y noblessev2 se identificó código para interceptar números de tarjetas de crédito y contraseñas guardadas en los navegadores Chrome y Edge, así como para transmitir tokens de cuentas de la aplicación Discord y enviar datos del sistema, incluidos capturas de pantalla del contenido de la pantalla. En los paquetes pytagora y pytagora2 existía la posibilidad de cargar y ejecutar código ejecutable de terceros.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster