Investigadores de ciberseguridad han descubierto código vulnerable en paquetes Python heredados que potencialmente podrían allanar el camino para comprometer la cadena de suministro en el Índice de paquetes Python (PyPI) a través de un ataque de adquisición de dominio.
La empresa de seguridad de la cadena de suministro de software, ReversingLabs, dijo que encontró la «vulnerabilidad» en los archivos de arranque proporcionados por una herramienta de automatización de compilación e implementación llamada «zc.buildout».
«Los scripts automatizan el proceso de descarga, construcción e instalación de las bibliotecas y herramientas necesarias», afirmó el investigador de seguridad Vladimir Pezo. «Específicamente, cuando se ejecuta el script de arranque, busca y ejecuta un script de instalación para el paquete Distribuir desde python-distribute(.)org, un dominio heredado que ahora está disponible para la venta en el rango de precios premium mientras se administra para generar ingresos por publicidad».
Los paquetes PyPI que incluyen un script de arranque que accede al dominio en cuestión incluyen tornado, pypiserver, slapos.core, roman, xlutils y testfixtures.
El quid del problema tiene que ver con un antiguo script de arranque («bootstrap.py») que se usó junto con la herramienta zc.buildout para inicializar el entorno Buildout. El script Python también admitía la capacidad de instalar una utilidad de empaquetado llamada «Distribute», una bifurcación de corta duración del proyecto Setuptools, en el entorno local.
Para lograr esto, el script de instalación de Distribute («distribute_setup.py») se obtiene de python-distribute(.)org, un dominio que ha estado a la venta desde 2014. Al agregar la opción, la idea era indicarle al script de arranque que descargara e instalara el paquete Distribute en lugar del paquete anterior de Setuptools para administrar los huevos y las dependencias para la compilación.
Es importante tener en cuenta que la bifurcación Distribute surgió debido a la falta de desarrollo activo de Setuptools, la principal herramienta de administración de paquetes utilizada en ese momento. Sin embargo, las funciones de Distribute se volvieron a integrar en Setuptools en 2013, lo que dejó a Distribute obsoleto.
El problema identificado por ReversingLabs se refiere al hecho de que muchos paquetes han seguido enviando el script de arranque que intenta instalar Distribute de forma predeterminada o cuando se especifica la opción de línea de comandos («-d» o «–distribute»). Esto, junto con el hecho de que el dominio en cuestión está disponible, pone a los usuarios en riesgo latente, ya que un atacante podría utilizar esta configuración como arma para servir código malicioso cuando el script de arranque se ejecuta inadvertidamente y potencialmente robar datos confidenciales.
Si bien algunos de los paquetes afectados han tomado medidas para eliminar el script de arranque, el paquete slapos.core aún continúa enviando el código vulnerable. También está incluido en la versión de desarrollo y mantenimiento de Tornado.
Otro aspecto importante a considerar aquí es que el script de arranque no se ejecuta automáticamente durante la instalación del paquete y está escrito en Python 2. Esto significa que el script no se puede ejecutar con Python 3 sin modificaciones. Pero la mera presencia del archivo deja una «superficie de ataque innecesaria» que los atacantes pueden explotar si se engaña a los desarrolladores para que ejecuten código que desencadene la ejecución del script de arranque.
La amenaza de una adquisición de dominio no es teórica. En 2023, salió a la luz que el paquete npm fsevents fue comprometido por un mal actor que tomó el control de un recurso en la nube no reclamado alojado en fsevents-binaries.s3-us-west-2.amazonaws(.)com para enviar ejecutables maliciosos a los usuarios que instalaban ciertas versiones del paquete (CVE-2023-45311, puntuación CVSS: 9,8).
«El problema radica en el patrón de programación que incluye buscar y ejecutar una carga útil desde un dominio codificado, que es un patrón comúnmente observado en el malware que muestra un comportamiento de descarga», dijo Pezo. «El hecho de no desmantelar formalmente el módulo Distribute permitió que persistieran scripts de arranque vulnerables y dejó un número desconocido de proyectos expuestos a un posible ataque».
La divulgación se produce cuando HelixGuard descubrió un paquete malicioso en PyPI llamado «correctores ortográficos» que afirma ser una herramienta para verificar errores ortográficos usando OpenAI Vision, pero contiene código malicioso diseñado para conectarse a un servidor externo y descargar una carga útil de la siguiente etapa, que luego ejecuta un troyano de acceso remoto (RAT).
El paquete, subido por primera vez a PyPI el 15 de noviembre de 2025 por un usuario llamado leo636722, se descargó 955 veces. Ya no está disponible para descargar.
«Esta RAT puede recibir comandos remotos y ejecutar código Python controlado por el atacante a través de exec(), lo que permite un control remoto total sobre el host de la víctima», dijo HelixGuard. «Cuando el usuario instala y ejecuta el paquete malicioso, la puerta trasera se activa, lo que permite al atacante controlar de forma remota la computadora del usuario».