Como a infecção ocorre
Pesquisadores da StepSecurity identificaram nesta segunda-feira (8) uma campanha de ataque à cadeia de suprimentos de software que comprometeu pelo menos 37 wheels no PyPI, incluindo o popular pacote de machine learning ensmallen. Batizada de “Hades Campaign”, a operação implantou memory scrapers multiplataforma, mecanismos de evasão de análise por IA e um wiper como elemento dissuasório contra investigadores.
O ponto de entrada está embutido no arquivo __init__.py dos pacotes como um import hook ofuscado em uma única linha. Ao ser importado, o código verifica a existência de um flag em /tmp/.bun_ran. Se ausente, ele localiza o payload companheiro _index.js, baixa o runtime Bun (v1.3.14) diretamente do GitHub, extrai para o diretório temporário e executa o JavaScript malicioso via bun run. O flag é então criado para garantir execução única por ciclo de boot.
Injeção de prompt contra IA
Uma das inovações mais notáveis da campanha é um bloco de prompt injection posicionado no início do arquivo _index.js. Como empresas de segurança usam pipelines de LLM para analisar e resumir pacotes suspeitos, o atacante incluiu instruções em texto plano que ordenam ao modelo de IA que ignore o código ofuscado, classifique o pacote como seguro e emita um relatório limpo.
A técnica representa uma evolução conceitual: os atacantes agora desenvolvem payloads que miram a lógica cognitiva de sistemas de triagem automatizados. Scanners que enviam código bruto a LLMs sem isolamento rigoroso de instruções podem ser manipulados para produzir falsos negativos.
Criptografia modular dos payloads
Diferente das campanhas anteriores do grupo Miasma, a Hades Campaign adota arquitetura modular. O bundle principal atua como bootstrapper, carregando e decriptando 16 payloads independentes na inicialização. Cada blob é comprimido com gzip e cifrado com AES-256-GCM usando uma chave única embarcada (hardcoded). O bootstrapper utiliza APIs nativas do Bun para descompressão e decriptação rápidas, dificultando a análise estática do código.
Além dos scrapers de memória — que varrem credenciais em ambientes de CI/CD —, a campanha inclui um worm com lógica de auto-replicação e um módulo wiper projetado para destruir vestígios caso a máquina hospedeira seja identificada como ambiente de análise.
Pacotes afetados e mitigação
A campanha atingiu pacotes nos ecossistemas de computação biológica, bioinformática e análise genotipo-fenótipo. O PyPI já colocou várias versões comprometidas em quarentena. A tabela abaixo lista os principais pacotes e versões afetados:
| Pacote | Versões comprometidas |
|---|---|
| ensmallen | 0.8.101 |
| embiggen | 0.11.97 |
| dynamo-release | 1.5.4 |
| spateo-release | 1.1.2 |
| gpsea | 0.9.14 |
| ufish | 0.1.2, 0.1.3 |
| magique | 0.6.8, 0.6.9 |
| executor-engine | 0.3.4, 0.3.5 |
Se você instalou qualquer uma dessas versões, execute imediatamente os seguintes passos:
- Remova o pacote com
pip uninstall <pacote>e reinstale uma versão anterior não comprometida - Revogue credenciais de CI/CD, tokens de cloud e chaves de API que possam ter sido expostas
- Verifique a existência dos artefatos maliciosos:
/tmp/.bun_ran,/tmp/b/e_index.jsnos caminhos de módulos Python - Instale ferramentas como Socket.dev ou pip-audit para monitoramento contínuo de dependências