En los últimos meses, investigadores han identificado un nuevo vector de ataque que afecta a los instaladores de paquetes de Python. Este método se basa en ambigüedades del formato ZIP y permite la introducción silenciosa de archivos no autorizados durante la instalación.
Los actores maliciosos explotan discrepancias entre los encabezados de los archivos locales y el directorio central del archivo ZIP. Esto les permite crear distribuciones aparentemente inocuas que, al ser descomprimidas por instaladores vulnerables, introducen archivos no autorizados en el entorno objetivo.
Esta técnica aprovecha características heredadas del estándar ZIP, desarrollado en 1989 para permitir actualizaciones incrementales en múltiples volúmenes de almacenamiento. La falta de validación cruzada estricta en muchos instaladores populares de Python facilita esta vulnerabilidad.
Mecanismo de infección mediante la discrepancia en RECORD
El núcleo del ataque radica en que el instalador no verifica las entradas de RECORD con el contenido real del ZIP antes de la extracción. Un programa malicioso puede listar solo archivos benignos en RECORD, como __init__.py y module.py, e incrustar cargas útiles adicionales bajo diferentes nombres de encabezado de archivo local.
Cuando un instalador lee primero el directorio central, confía en la lista de archivos para extraer; sin embargo, implementaciones equivalentes a unzip pueden procesar los encabezados de archivo locales secuencialmente, instalando inadvertidamente puertas traseras ocultas.
Prevención
PyPI ya emplea la detección de «bombas de compresión ZIP» durante las subidas de archivos, lo que refuerza aún más la seguridad. Para abordar esta amenaza emergente, PyPI está implementando una serie de rigurosas comprobaciones de validación en todos los archivos ZIP y Wheel cargados.
Se rechazarán los archivos Wheel con nombres de archivo duplicados entre los encabezados de archivo locales y el directorio central, así como los archivos con datos de encuadre o de seguimiento no válidos.
A partir del 1 de febrero de 2026, cualquier archivo Wheel cuyo contenido no coincida exactamente con el archivo de metadatos RECORD se bloqueará al cargar, tras un período de advertencia de seis meses.
Estas medidas buscan obligar tanto a los empaquetadores como a los proyectos de instalación a adoptar una lógica de análisis robusta y a aplicar comprobaciones cruzadas con las sumas de comprobación integradas.
Los informes iniciales surgieron cuando los encargados del instalador UV notaron que archivos aparecían fuera de los directorios previstos tras la extracción. Los analistas del blog Python Package Index identificaron que ciertos archivos Wheel contenían entradas RECORD y encabezados del directorio central no coincidentes, lo que provocaba que las herramientas de descompresión incluyeran cargas útiles extrañas durante la instalación.
El análisis de los 15.000 paquetes de Python más descargados revela problemas mínimos: de 13.468 proyectos de Wheel, 13.460 no presentan problemas de RECORD ni ZIP, y solo unos pocos presentan archivos faltantes, discrepancias o duplicados.
PyPI no ha detectado incidentes confirmados de explotación en el mundo real hasta la fecha. Sin embargo, el aviso subraya la posibilidad de comprometer la cadena de suministro en uno de los repositorios de software más grandes.