
En este documento se analiza en detalle la vulnerabilidad de Pipenv (CVE-2022-21668). Las siguientes secciones cubren el código con el bug en el archivo pipenv/utils.py, que abre la puerta a varios ataques RCE, y también la reciente corrección que valida la conexión SSL/TLS y verifica el nombre de host contra una lista de hosts de confianza.
Pipenv Pipenv es una herramienta que crea y gestiona automáticamente un virtualenv para tus proyectos, además de añadir/eliminar paquetes de tu Pipfile a medida que instalas/desinstalas paquetes.
Para más información haz clic aquí
Necesitamos un archivo requirements.txt siempre que trabajemos con sistemas complejos. Este archivo de texto también resulta útil cuando queremos portar la aplicación a otro entorno. Este archivo contiene todos los paquetes/dependencias necesarios para ejecutar una aplicación correctamente, junto con sus números de versión.
Ejemplo de archivo requirements.txt:
Fuente de la imagen: https://www.idkrtm.com/what-is-the-python-requirements-txt/
Si no tenemos un archivo requirements.txt, puede que no sea posible portar nuestra aplicación a otro sistema con éxito, ya que podría haber un problema de compatibilidad entre las versiones de los paquetes.
Desde la versión 2018.10.9 de Pipenv y antes de la versión 2022.1.8, una falla en el análisis de archivos de requisitos de pipenv permite a un atacante insertar una cadena especialmente diseñada dentro de un comentario en cualquier parte de un archivo requirements.txt, lo que hará que las víctimas que usan pipenv para instalar el archivo de requisitos descarguen dependencias desde un servidor de índice de paquetes controlado por el atacante. El ataque RCE es altamente factible contra estos sistemas altamente vulnerables.
cvedetails califica esta vulnerabilidad como crítica / severa.
Puntuación CVSS de cvedetials:
(Fuente: https://www.cvedetails.com/cve/CVE-2022-21668/)
Esta función se llama de forma iterativa en cada línea de un archivo de requisitos y utiliza el módulo argparse para encontrar y procesar las opciones --index-url, --extra-index-url y --trusted-host
Sin embargo, no ignora estas opciones cuando aparecen en comentarios. El problema del código es que analizará las cadenas que comienzan con "--index-url, --extra-index-url y --trusted-host" en cualquier parte del archivo. Esta funcionalidad lo hace más vulnerable.
Para más información haz clic aquí
Los ataques de ejecución remota de código (RCE) permiten a un atacante ejecutar código malicioso de forma remota en una computadora. El impacto de una vulnerabilidad RCE puede ir desde la ejecución de malware hasta que un atacante obtenga el control total de una máquina comprometida.
Si un atacante logra ocultar una opción maliciosa --index-url en un archivo de requisitos que una víctima instala con pipenv, el atacante puede incrustar código malicioso arbitrario en los paquetes servidos desde su servidor de índice malicioso, que se ejecutará en el host de la víctima durante la instalación (ejecución remota de código/RCE). La explotación mediante esta técnica sería relativamente sencilla para un atacante con conocimientos básicos de Python, ya que el atacante puede simplemente crear una distribución de código fuente para cualquiera de los paquetes especificados en el archivo de requisitos e incrustar código malicioso arbitrario en el archivo setup.py. Cuando pip instala desde una distribución de código fuente, cualquier código en setup.py es ejecutado por el proceso de instalación.
Para más detalles haz clic aquí
Las versiones 2022.1.8 y superiores tienen este problema corregido. Se ha añadido una nueva función “get_host_and_port(url)” en el archivo pipenv/utils.py. Esta función recupera el host y el puerto de la url enviada en el archivo requirements.txt. La dirección del host recuperada se analiza mediante urllib3, que internamente valida la conexión SSL/TLS. La dirección del host también se verifica contra una lista de direcciones de hosts de confianza.
Más información aquí
Los ataques básicos podrían usar el RCE inicial que se desencadena cuando una víctima instala el paquete malicioso del atacante para robar credenciales del host de la víctima, aprovechar los recursos del host para minar criptomonedas, o instalar kits de explotación u otro malware. Los atacantes más sofisticados pueden usar técnicas más avanzadas para mantener el acceso al host de la víctima, ocultar o eliminar evidencia de su ataque borrando referencias al servidor de índice malicioso en el Pipfile y Pipfile.lock generados por pipenv u otros posibles indicadores de compromiso. Los atacantes altamente sofisticados podrían intentar pivotar hacia objetivos adicionales desde el host inicialmente comprometido, y podrían aprovechar cualquier credencial expuesta en el entorno del host comprometido o la autorización implícita otorgada al host para obtener acceso privilegiado a otros sistemas o recursos, como repositorios de código fuente o registros de paquetes. (Fuente: https://github.com/pypa/pipenv/security/advisories/GHSA-qc9x-gjcv-465w)
Un error de análisis que no considera correctamente el análisis de los comentarios, ha creado una vulnerabilidad crítica.
Elemento de lista Con una vulnerabilidad así en mano, incluso configurar el servidor de índice malicioso para servir versiones comprometidas de paquetes es relativamente simple, incluso para un atacante no sofisticado.