In this article
Riscos de segurança na convenção de nomes de pacotes Python: typosquatting e outros perigos
Um simples comando pip install pode levar ao comprometimento total da segurança do ambiente, com backdoors, trojans e pacotes maliciosos — mas por quê? A segurança da cadeia de suprimentos de código aberto costuma se concentrar em gerenciadores e repositórios de pacotes.
O que é a cadeia de suprimentos de código aberto? Ela abrange todos os componentes, bibliotecas e ferramentas que contribuem para um produto de software. Para quem desenvolve em Python, isso geralmente inclui pacotes obtidos no Python Package Index (PyPI). Embora esses pacotes ofereçam praticidade e funcionalidade, também podem trazer vulnerabilidades de segurança. Por exemplo, agentes maliciosos podem explorar essas vulnerabilidades para injetar código nocivo em aplicações, causando violações de dados, acesso não autorizado e outros incidentes de segurança.
Typosquatting como vetor de ataque
Um dos vetores de ataque mais comuns no ecossistema Python é o typosquatting. Essa técnica é frequentemente observada no registro npm do JavaScript e também está presente no PyPI. Ela consiste em criar pacotes maliciosos com nomes muito parecidos com os de pacotes legítimos. Os invasores tentam levar desenvolvedores a instalar esses pacotes sem perceber, aproveitando um pequeno erro de digitação ou o esquecimento do nome exato do pacote. Depois de instalados, esses pacotes podem executar uma carga de código que tenta explorar o sistema, por exemplo, coletando informações confidenciais das variáveis de ambiente da máquina.
Confusão com o nome do pacote PyYAML para Python
Os invasores costumam explorar a semelhança entre nomes de pacotes para distribuir código malicioso. Considere o popular pacote PyYAML. Para instalá-lo, os desenvolvedores usam o comando pip install pyyaml, mas, no código, fazem a importação com import yaml. Essa diferença pode causar confusão e levar alguém a executar por engano pip install yaml, o que pode instalar outro pacote, possivelmente malicioso.
Isso também fica evidente na documentação oficial do PyYAML:

Perguntas frequentes: o que fazer se eu suspeitar que um pacote instalado é malicioso?
Se você suspeitar que um pacote é malicioso, siga estas etapas:
Pare de usar o pacote: interrompa imediatamente o uso do pacote no seu projeto.
Denuncie o pacote: denuncie o pacote suspeito aos responsáveis pelo repositório (por exemplo, o PyPI) para que seja investigado. Garanta também que as equipes locais de AppSec e TrustSec sigam os procedimentos para violações de segurança, como redefinir e alternar segredos.
Audite seu sistema: verifique se há alterações não autorizadas ou atividades suspeitas no sistema.
Revise o código: verifique se o pacote malicioso não comprometeu sua base de código nem o repositório remoto de código, incluindo o registro remoto e quaisquer outros artefatos que armazenem registros.
Procedimentos em caso de violação de dados: é provável que o sistema seja considerado comprometido e deve ser tratado como tal.
Mais confusão com nomes de pacotes no pip
Outro exemplo de confusão com pacotes envolve a especificação PURL e a forma como o gerenciador de pacotes pip lida com sublinhados e hífens. Por exemplo, executar pip install langchain-community e pip install langchain_community instala o mesmo pacote, apesar das strings diferentes. Os invasores podem explorar esse comportamento criando pacotes com pequenas variações no nome, o que aumenta o risco de instalar um software malicioso por engano.

Além disso, pip não diferencia letras maiúsculas e minúsculas nos nomes dos pacotes. Isso significa que pip install PackageName e pip install packagename terão o mesmo resultado. Isso é diferente do registro npmjs, que antes diferenciava maiúsculas e minúsculas, mas acabou adotando uma abordagem que não faz essa distinção. Os invasores podem aproveitar a ausência dessa distinção no pip para disfarçar ainda mais os pacotes maliciosos.
Perguntas frequentes: o que é typosquatting no contexto de pacotes Python?
Typosquatting é uma prática maliciosa em que invasores criam pacotes com nomes parecidos com os de pacotes populares ou legítimos. O objetivo é induzir desenvolvedores a instalar esses pacotes maliciosos, explorando erros de digitação comuns ou convenções de nomenclatura. Por exemplo, se alguém quiser instalar o popular pacote requests, mas digitar requsets por engano, poderá instalar inadvertidamente um pacote malicioso.
Resumo e outras leituras
Entender os riscos associados a pacotes maliciosos em Python é essencial para manter uma cadeia de suprimentos de software segura. Para não cair em armadilhas de typosquatting e outras confusões com nomes, tenha cuidado ao instalar pacotes e confira os nomes e as fontes. Para saber mais sobre os riscos à segurança da cadeia de suprimentos, explore casos de confusão de dependências e de invasão de contas de mantenedores no PyPI.
Como desenvolvedores podem evitar a instalação de pacotes Python maliciosos?
Você pode tomar várias precauções para se proteger:
Confira os nomes dos pacotes: sempre verifique a grafia dos nomes antes de instalar.
Revise os metadados dos pacotes: confira os metadados e a documentação em busca de inconsistências ou sinais de alerta.
Use fontes confiáveis: instale pacotes somente de repositórios confiáveis, como o PyPI.
Use ferramentas de segurança: use o Snyk Open Source para detectar vulnerabilidades e pacotes maliciosos.
Veja mais orientações para adotar práticas seguras de código aberto e implementar medidas robustas de segurança da cadeia de suprimentos, protegendo seus projetos com eficiência:
Reforce sua postura de segurança com a Snyk
Para desenvolvedores e profissionais de DevOps, proteger projetos contra ataques à cadeia de suprimentos é essencial. Os riscos de pacotes maliciosos, como os distribuídos por meio de typosquatting, reforçam a necessidade de medidas robustas de segurança. Ao se cadastrar na Snyk, você pode fortalecer sua postura de segurança e proteger seus projetos contra essas ameaças.
Gerencie dependências de forma proativa
Use o conjunto abrangente de ferramentas da Snyk para gerenciar suas dependências de forma proativa. A Snyk oferece análise de vulnerabilidades e alertas em tempo real, para que você conheça os riscos associados aos seus pacotes. Essa abordagem proativa ajuda a reduzir possíveis ameaças antes que afetem seus projetos.
Aproveite as integrações da Snyk
A Snyk se integra perfeitamente ao seu fluxo de desenvolvimento atual, permitindo incorporar verificações de segurança aos pipelines de CI/CD, ao IDE Python e a sistemas de controle de versão Git, como GitHub, GitLab e BitBucket. Assim, a segurança se torna um processo contínuo, e não algo deixado para depois.
Mantenha-se informado e aprenda sempre
Você já fez uma rápida aula de segurança em Python no Snyk Learn? A Snyk oferece diversos recursos educacionais para manter você por dentro das ameaças de segurança mais recentes e das práticas recomendadas. Ao acompanhar esses materiais, você entende melhor o cenário em constante evolução da segurança de aplicações e de código aberto e pode tomar decisões bem informadas para proteger seus projetos.
Participe do Fetch the Flag 2026!
Teste suas habilidades de segurança no nosso evento Capture the Flag, de 12 a 13 de fevereiro, das 12h às 12h (horário do leste dos EUA).