Ejecución automática de código al descargar un paquete del gestor de paquetes de Python

Se ha descubierto un ataque que puede exponer a desarrolladores, se descubrió que casi un tercio de los paquetes en PyPI, el índice de paquetes de Python, pueden provocar la ejecución de código automáticamente al descargarlos.

«Una función preocupante en pip/PyPI permite que se ejecute código de forma automática cuando los desarrolladores se limitan a descargar un paquete».

Yehuda Gelb, investigador de Checkmarx, en un informe técnico publicado esta semana.

Una de las formas de instalar paquetes para Python es ejecutando el comando «pip install», llamando al fichero «setup.py» que se incluye junto al módulo. Este script se utiliza para especificar los metadatos asociados a un paquete, incluyendo sus dependencias.

Si bien los atacantes han recurrido a la incorporación de código malicioso en el script «setup.py», Checkmarx descubrió que podrían lograr los mismos objetivos ejecutando el comando «pip download». Esta función hace la misma descarga que «pip install», pero no instala las dependencias sino que solo las descarga. Este comando de descarga también ejecuta el script «setup.py», ejecutando así el código malicioso que contenga.

Cabe destacar que el problema solo se produce cuando el paquete a instalar o descargar contiene un archivo tar.gz en lugar de un archivo .whl, lo que elimina la ejecución de «setup.py».

Esta característica es alarmante debido a que gran parte de los paquetes maliciosos encontrados utilizan esta técnica de ejecución de código al instalarse, logrando así mayores tasas de infección.

Paquetes con ficheros «tar.gz» y «whl» | Imágen de Checkmarx

Aunque pip utiliza por defecto archivos .whl en lugar de archivos .tar.gz, un atacante podría aprovechar este funcionamiento para publicar intencionadamente paquetes de python sin un archivo .whl, lo que provocaría la ejecución de código malicioso.

«Cuando un usuario descarga un paquete python desde PyPi, pip utilizará preferentemente el archivo .whl, pero recurrirá al archivo tar.gz si falta el archivo .whl».

Yehuda Gelb, investigador de Checkmarx.

Más información:

Automatic Execution of Code Upon Package Download on Python Package Manager

La entrada Ejecución automática de código al descargar un paquete del gestor de paquetes de Python se publicó primero en Una al Día.