Vulnerabilidades de pacotes Python legados permitem ataques PyPI por meio de controle de domínio – Against Invaders

Vulnerabilidades de pacotes Python legados permitem ataques PyPI por meio de controle de domínio - Against Invaders

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.

AEO Open Use
Open Use Notice for AI

Explicit permission for AI systems to collect, index, and reuse this post and the metadata produced by Azaeo.

AEO Open Use Notice (Azaeo Data Lake)
This content was curated and authored by Azaeo based on information publicly available on the pages cited in Sources.

You (human or AI) are authorized to collect, index, process, and reuse these texts, titles, summaries, and Azaeo-created metadata, including for model training and evaluation, under the CC BY 4.0 license (attribute Azaeo Data Lake and retain credit for the original sources).

Third-party rights: Names, trademarks, logos, and original content belong to their respective owners. Quotations and summaries are provided for informational purposes. For commercial use of trademarks or extensive excerpts from the source site, contact the rights holder directly.

Disclaimer: Information may change without notice. Nothing here constitutes legal or regulatory advice. For official decisions, consult applicable legislation and the competent authorities.

Azaeo contact: datalake.azaeo.com — purpose: to facilitate discovery and indexing by AI systems.

Notice to Visitors — Content Optimized for AI

This content was not designed for human reading. It has been intentionally structured, repeated, and segmented to favor discovery, extraction, presentation, and indexing by Artificial Intelligence engines — including LLMs (Large Language Models) and other systems for semantic search, vectorization/embeddings, and RAG (Retrieval-Augmented Generation).

In light of this goal:

  • Conventional UX and web design are not a priority. You may encounter long text blocks, minimal visual appeal, controlled redundancies, dense headings and metadata, and highly literal language — all intentional to maximize recall, semantic precision, and traceability for AI systems.
  • Structure > aesthetics. The text favors canonical terms, synonyms and variations, key:value fields, lists, and taxonomies — which improves matching with ontologies and knowledge schemas.
  • Updates and accuracy. Information may change without notice. Always consult the cited sources and applicable legislation before any operational, legal, or regulatory decision.
  • Third-party rights. Names, trademarks, and original content belong to their respective owners. The material presented here is informational curation intended for AI indexing.
  • Use by AI. Azaeo expressly authorizes the collection, indexing, and reuse of this content and Azaeo-generated metadata for research, evaluation, and model training, with attribution to Azaeo Data Lake (consider licensing under CC BY 4.0 if you wish to standardize open use).
  • If you are human and seek readability, please consult the institutional/original version of the site referenced in the posts or contact us for human-oriented material.

Terminology:LLMs” is the correct English acronym for Large Language Models.