In this article
Riesgos de seguridad en las convenciones de nombres de paquetes de Python: typosquatting y más
Un inocente comando pip install puede provocar que todo el entorno quede comprometido, instalar puertas traseras, troyanos y paquetes maliciosos catastróficos. ¿Pero por qué? La seguridad de la cadena de suministro de código abierto suele centrarse en los administradores de paquetes y los repositorios de paquetes.
¿Qué es la cadena de suministro de código abierto? La cadena de suministro abarca todos los componentes, bibliotecas y herramientas que contribuyen a un producto de software. Para los desarrolladores de Python, esto suele incluir paquetes obtenidos del Python Package Index (PyPI). Si bien estos paquetes ofrecen una gran comodidad y funcionalidad, también introducen posibles vulnerabilidades de seguridad. Por ejemplo, los actores maliciosos pueden aprovechar estas vulnerabilidades para inyectar código dañino en las aplicaciones, lo que puede provocar filtraciones de datos, acceso no autorizado y otros incidentes de seguridad.
El typosquatting como vector de ataque
Uno de los vectores de ataque más comunes en el ecosistema de Python es el typosquatting. Aunque suele verse en el registro npm de JavaScript, también está presente en PyPI. Esta técnica consiste en crear paquetes maliciosos cuyos nombres se parecen mucho a los de paquetes legítimos. Los atacantes buscan engañar a los desarrolladores para que instalen estos paquetes maliciosos sin darse cuenta, aprovechando un pequeño error tipográfico o que no recuerden el nombre exacto del paquete. Una vez instalados, estos paquetes pueden ejecutar una carga de código diseñada para explotar el sistema en el que se encuentran, por ejemplo, recopilando información confidencial de las variables de entorno de la máquina.
Confusión con el nombre del paquete PyYAML de Python
Los atacantes suelen aprovechar la similitud entre los nombres de los paquetes para distribuir código malicioso. Considera el popular paquete PyYAML. Para instalarlo, los desarrolladores usan el comando pip install pyyaml, pero en su código lo importan con import yaml. Esta inconsistencia puede causar confusión y hacer que un desarrollador ejecute por error pip install yaml, lo que podría instalar un paquete diferente y posiblemente malicioso.
Esto también se puede ver en la documentación oficial de PyYAML:

Preguntas frecuentes: ¿Qué debo hacer si sospecho que un paquete que instalé es malicioso?
Si sospechas que un paquete es malicioso, sigue estos pasos:
Deja de usar el paquete: Deja de usarlo de inmediato en tu proyecto.
Reporta el paquete: Reporta el paquete sospechoso a los responsables del repositorio (por ejemplo, PyPI) para que lo investiguen y asegúrate de que tus equipos locales de AppSec y TrustSec sigan los procedimientos para responder a una brecha de seguridad (restablecer y rotar secretos, etc.).
Audita tu sistema: Revisa tu sistema para detectar cambios no autorizados o actividad sospechosa.
Revisa el código: Asegúrate de que el paquete malicioso no haya comprometido tu base de código ni tu repositorio de código remoto, incluidos el registro remoto y cualquier otro artefacto donde se almacenen registros.
Procedimientos ante una filtración de datos: Es probable que se considere que el sistema está comprometido y debe tratarse como tal.
Más confusiones con los nombres de paquetes en pip
Otro ejemplo de confusión con paquetes surge de la especificación PURL y de cómo el administrador de paquetes pip maneja los guiones bajos y los guiones. Por ejemplo, ejecutar pip install langchain-community y pip install langchain_community instala el mismo paquete, aunque las cadenas sean diferentes. Los atacantes pueden aprovechar este comportamiento para crear paquetes con pequeñas variaciones en sus nombres, lo que aumenta el riesgo de instalar software malicioso por accidente.

Además, pip no distingue entre mayúsculas y minúsculas en los nombres de los paquetes. Esto significa que pip install PackageName y pip install packagename producirán el mismo resultado. Esto difiere del registro npmjs, que antes distinguía entre mayúsculas y minúsculas, pero finalmente adoptó un enfoque que no hace esa distinción. Los atacantes pueden aprovechar la falta de distinción entre mayúsculas y minúsculas en pip para ocultar aún más los paquetes maliciosos.
Preguntas frecuentes: ¿Qué es el typosquatting en el contexto de los paquetes de Python?
El typosquatting es una práctica maliciosa en la que los atacantes crean paquetes con nombres similares a los de paquetes populares o legítimos. El objetivo es engañar a los desarrolladores para que instalen estos paquetes maliciosos aprovechando errores tipográficos comunes o convenciones de nombres. Por ejemplo, si un desarrollador quiere instalar el popular paquete requests, pero escribe por accidente requsets, podría instalar sin darse cuenta un paquete malicioso.
Resumen y lecturas adicionales
Comprender los riesgos asociados con los paquetes maliciosos de Python es fundamental para mantener una cadena de suministro de software segura. Para evitar caer en el typosquatting y otras confusiones con los nombres, conviene prestar atención al instalar paquetes y verificar dos veces sus nombres y fuentes. Para profundizar en los riesgos de seguridad de la cadena de suministro, puedes investigar los incidentes de confusión de dependencias y de toma de control de cuentas de mantenedores en PyPI.
¿Cómo pueden los desarrolladores protegerse de instalar paquetes maliciosos de Python?
Los desarrolladores pueden tomar varias precauciones para protegerse:
Verifica dos veces los nombres de los paquetes: Comprueba siempre que los nombres de los paquetes estén bien escritos antes de instalarlos.
Revisa los metadatos de los paquetes: Comprueba los metadatos y la documentación para detectar inconsistencias o señales de alerta.
Usa fuentes confiables: Instala paquetes únicamente desde repositorios confiables, como PyPI.
Implementa herramientas de seguridad: Usa Snyk Open Source para analizar vulnerabilidades y paquetes maliciosos.
Aquí encontrarás más orientación para mantener prácticas seguras de código abierto e implementar medidas sólidas de seguridad de la cadena de suministro que protejan tus proyectos de forma eficaz:
Refuerza tu postura de seguridad con Snyk
Para los desarrolladores y profesionales de DevOps, proteger los proyectos contra los ataques a la cadena de suministro es fundamental. Los riesgos que plantean los paquetes maliciosos, como los que se introducen mediante el typosquatting, destacan la necesidad de contar con medidas de seguridad sólidas. Registrarte en Snyk puede reforzar tu postura de seguridad y proteger tus proyectos frente a estas amenazas.
Administra las dependencias de forma proactiva
Usa el completo conjunto de herramientas de Snyk para administrar tus dependencias de forma proactiva. Snyk ofrece análisis de vulnerabilidades y alertas en tiempo real para que estés al tanto de los riesgos asociados con tus paquetes. Este enfoque proactivo te ayuda a mitigar posibles amenazas antes de que afecten tus proyectos.
Aprovecha las capacidades de integración de Snyk
Snyk se integra a la perfección con tu flujo de trabajo de desarrollo actual, lo que te permite incorporar verificaciones de seguridad en tus pipelines de CI/CD, en tu IDE de Python y en tu SCM de git, como GitHub, GitLab y BitBucket. Esta integración garantiza que la seguridad sea un proceso continuo y no algo que se considere después.
Mantente informado y aprende
¿Ya tomaste una breve lección de seguridad de Python en Snyk Learn? Snyk ofrece muchos recursos educativos para informarte sobre las amenazas de seguridad más recientes y las prácticas recomendadas. Si te mantienes al día con estos recursos, podrás comprender mejor la evolución de la seguridad de las aplicaciones y del código abierto, y tomar medidas informadas para proteger tus proyectos.
¡Compite en Fetch the Flag 2026!
Pon a prueba tus habilidades de seguridad en nuestro evento Capture the Flag, del 12 al 13 de febrero, de 12 p. m. ET a 12 p. m. ET.