Os pesquisadores do ReversingLabs soaram o alarme sobre uma vulnerabilidade escondida em pacotes legados do Python, que expõe os usuários do Python Package Index (PyPI) a ataques à cadeia de suprimentos por meio do comprometimento do domínio.
Embora o código vulnerável raramente seja usado em projetos modernos, sua persistência em sistemas de produção desatualizados mantém vivo o risco.
Os modelos de aprendizado de máquina da comunidade RL Spectra Assure foram treinados para detectar comportamentos de pacotes que se assemelham a arquivos de inicialização arriscados sinalizados por malware conhecido, distribuídos com vários Pacotes PyPI.
Esses scripts automatizam a busca e instalação de dependências do Python, principalmente pegando o instalador do pacote de distribuição há muito obsoleto diretamente do domínio python-distribute.org.
Criticamente, este domínio não é mais gerenciado pela comunidade Python e agora está à venda, destinado a receitas publicitárias. Se um invasor o comprasse, ele poderia hospedar e entregar scripts maliciosos a qualquer desenvolvedor que executasse os arquivos de inicialização afetados.
Pacotes populares com links históricos ou atuais para esses scripts incluem Tornado (rede assíncrona), pypiserver (servidores PyPI privados) e slapos.core (sobreposições de sistema operacional distribuídas), roman (conversão de numerais), xlutils (edição de arquivos Excel), testfixtures (teste de unidade) e muitos outros.
Alguns, como o pypiserver, removeram os scripts apenas recentemente; em outros, os remanescentes ainda podem permanecer em arquivos de automação como Makefiles. O perigo permanece latente, acionado apenas se um usuário ou sistema de compilação executar a rotina de inicialização herdada.
Raízes do problema de empacotamento do Python
De acordo com relatórioO empacotamento e a resolução de dependências sempre estiveram no centro do desenvolvimento de código aberto em Python.
Em seus primeiros dias, o Python fornecia distutils (agora removido a partir do Python 3.12), mas à medida que as necessidades superaram suas capacidades, surgiram ferramentas como setuptools. O Distribute rapidamente se separou das ferramentas de configuração devido a disputas de desenvolvimento, mas voltou em 2013.
Entretanto, as tentativas de modernização, como as distutils2 abandonadas, deixaram o ecossistema com um emaranhado de soluções, cada uma tentando (e por vezes falhando) ser compatível.
O resultado? Os scripts Bootstrap proliferaram para facilitar a instalação, muitas vezes codificando URLs para buscar dependências.
Sem supervisão da comunidade ou migração oportuna, os domínios eventualmente caducaram. O exemplo do domínio python-distribute.org demonstra o risco: desde 2014, ele está disponível, sem ninguém monitorando oficialmente seu uso ou propriedade.
A aquisição de domínios é um vetor de ataque conhecido. Um exemplo dramático ocorreu em 2023, quando o pacote npm fsevents foi vítima de um esquema semelhante: um invasor registrou um domínio de nuvem expirado previamente codificado nas versões 1.0.0 a 1.2.11, permitindo-lhes entregar cargas maliciosas, uma vulnerabilidade documentada como CVE-2023-45311.
Os pesquisadores da RL mostraram um prova de conceito exploit para o cenário Python, visando especificamente o script de bootstrap do slapos.core.
Embora o PyPI agora tenha como padrão práticas mais seguras e a maioria dos desenvolvedores tenha migrado para setuptools, os remanescentes do padrão vulnerável permanecem amplamente distribuídos e podem representar um risco realista se o antigo domínio acabar em mãos maliciosas.
O risco mais amplo da cadeia de suprimentos
O modelo de código aberto prospera com o compartilhamento de código, mas, como mostra este caso, os domínios codificados continuam sendo uma armadilha oculta.
Moduleimp do Python é usado para carregar a fonte como um módulo, com o flag-dset antes de chamá-lo para fazer com que o script de bootstrap seja distribuído.
Quando dependências ou ferramentas antigas chegam ao fim da vida útil, deixar de descontinuar a infraestrutura relacionada ou garantir que a migração expõe os usuários a ameaças silenciosas, porém graves.
Para PyPI, embora nenhum abuso comprovado tenha sido documentado para python-distribute.org, a história sugere que a vigilância é garantida, especialmente à medida que os invasores se tornam mais oportunistas com cadeia de mantimentos façanhas.
O código legado e a infraestrutura abandonada representam um perigo sempre presente para as cadeias de fornecimento de software.
Os mantenedores e usuários de código aberto devem auditar regularmente as dependências de domínios desatualizados e rotinas de inicialização e migrar agressivamente para longe de práticas obsoletas para evitar ataques de comprometimento de domínio.
O episódio python-distribute.org é um conto de advertência, um apelo à ação para todos os desenvolvedores se protegerem contra os fantasmas do código legado que assombram o ecossistema moderno.
Indicadores de Compromisso (IoCs)
| Nome do pacote | Faixa de versões |
|---|---|
| pypiserver | >=1.1.1, <2.4.0 |
| slapos.core | >=0, <=1.19.0 |
| romano | >=2,0,0, <3,2 |
| xlutils | >=1.6.0, <2.0.0 |
| luminárias de teste | >=2.3.4, <3.0.2 |
| imio-pm-locales | >=4.1.18.1, <4.2.20 |
| consulta | >=1.2.10, <2.0.0 |
Siga-nos emGoogle Notícias,LinkedIneXpara obter atualizações instantâneas e definir GBH como fonte preferencial emGoogle.
