Pular para o conteúdo

LiteLLM 1.107.0 é sequestrado para distribuir um ladrão de credenciais

Wheels maliciosos do LiteLLM 1.107.0 ficaram no PyPI das 11h39 às 13h23 UTC em 21 de outubro de 2026 e rodavam um ladrão de credenciais a cada início do Python.

Por Tech AI Wire Team

3 min de leitura

XLinkedIn
LiteLLM's incident report page titled Contained: Oct 21, 2026 LiteLLM release v1.107.0 Compromised, with its authors and a status line.

Em números

PyPI wheels carried the malware
7
UTC window the wheels were on PyPI
11:39-13:23
the clean version to reinstall
1.106.2

Atacantes publicaram um LiteLLM 1.107.0 malicioso no PyPI e no Docker em 21 de outubro de 2026, depois de tomar o pipeline de lançamentos do projeto. Toda máquina que o instalou rodava um ladrão de credenciais sempre que o Python iniciava. O LiteLLM pede que as equipes afetadas considerem seus segredos roubados e os troquem.

O LiteLLM é uma ferramenta de código aberto que fica entre os apps e os provedores de modelos de IA. Seu servidor proxy guarda as chaves de API dos provedores, o que o torna um alvo valioso.

O que foi publicado e por quanto tempo

O relatório de incidente do LiteLLM lista todos os artefatos afetados. A tag oficial de código v1.107.0 no GitHub está limpa. A versão foi gerada a partir de um repositório que imitava o original, Berri-AI/litellm, que segundo a StepSecurity tinha dez commits dos atacantes.

ArtefatoAfetadoJanela (UTC, 21 de outubro)
PyPIOs sete wheels de litellm==1.107.0 (macOS, Linux, musl Linux, Windows)11h39 às 13h23
Docker Hubv1.107.0, latest, main-latest, main-stable11h46 às 14h20
GitHub Container RegistryAs mesmas tags de litellm, litellm-database, litellm-non_root11h46 às 13h51

A versão 1.106.2 está limpa, assim como as versões candidatas da 1.107.0, segundo a StepSecurity. O LiteLLM diz que clientes da sua versão corporativa privada não foram afetados.

Como a carga maliciosa funciona

O malware não esperava alguém importar o LiteLLM. Ele adicionava dois ganchos de inicialização, cook.pth e sitecustomize.py. O Python executa os dois sempre que inicia naquele ambiente, mesmo quando o comando é apenas pip.

A primeira carga é um ladrão que se chama "privcollect", informa a StepSecurity. Ele coleta tokens de nuvem, chaves privadas, arquivos de credenciais de ferramentas de IA, dados do navegador e variáveis de ambiente. Também leva as credenciais salvas do proxy do LiteLLM. Os dados são criptografados e enviados para litellm.dev, um domínio registrado em 13 de outubro.

A segunda carga é um carregador que roda como processo oculto em segundo plano. A cada hora, ele lê um nome de host de um arquivo no GitHub, baixa código desse host e o executa. A conta do GitHub por trás desse arquivo foi apagada, mas as máquinas infectadas continuam consultando o mesmo endereço.

Como os atacantes entraram

O ataque passou pelas contas do GitHub de três engenheiros, disse ao The Hacker News Oliver Jensen, diretor de segurança do LiteLLM. Uma credencial desligou a proteção de branch, outra aprovou o lançamento em produção e uma terceira apagou os registros dos workflows.

Na atualização das 20h30 UTC, o LiteLLM diz acreditar que o atacante pegou tokens do GitHub CLI em logs. Esses logs eram de uma implantação interna do LiteLLM acessível pela internet. A empresa observa que o Claude Code pode incluir o token do GitHub CLI de um usuário no corpo de uma resposta. Se esses corpos são registrados, o token vai parar nos logs. Antes, Jensen tinha dito que o método ainda não estava identificado.

No mesmo dia, o GitHub abriu uma prévia pública de tokens do GitHub CLI com prazo de validade. Segundo o changelog do GitHub, um token vazado passa a ficar "inutilizável em poucas horas, em vez de durar indefinidamente".

O que isso significa para desenvolvedores

Se você usa o LiteLLM, verifique hoje, na ordem que o LiteLLM indica.

  • Não comece com pip install. Os ganchos de inicialização rodam de novo a cada início do Python. Primeiro encontre e pare o processo que segura /tmp/remote_code_loader.lock.
  • Remova os ganchos e depois reinstale. Apague cook.pth, cook.py e sitecustomize.py de site-packages. Instale litellm==1.106.2 ou, melhor ainda, recrie o ambiente ou a imagem do zero.
  • Considere os segredos perdidos. O LiteLLM diz que, se a 1.107.0 rodou em um host com acesso de saída à internet, deve-se supor que o roubo deu certo. Troque as chaves de provedores guardadas no proxy, suas chaves mestra e virtuais, a senha do banco de dados e o papel de nuvem da máquina.
  • Fixe por digest. Tags como latest apontaram para a imagem maliciosa por mais de duas horas. Fixe imagens por digest e pacotes por hash.
  • Encurte os seus próprios tokens. Ative os tokens do GitHub CLI com validade usando gh auth login --expiring, disponível a partir do gh 2.103.0. Mantenha tokens fora dos corpos de requisição e resposta que vão para os logs.

É o segundo lançamento do LiteLLM sequestrado neste ano, depois das versões 1.82.7 e 1.82.8 em março. Chaves de provedores guardadas também foram o alvo em Vazamento no OpenCode Console expõe chaves guardadas de provedores de IA na semana passada.

Fontes

  1. Contained: Oct 21, 2026 LiteLLM release v1.107.0 Compromised - LiteLLM
  2. LiteLLM Compromised in Supply Chain Attack Delivering Credential Stealer and Backdoor - The Hacker News
  3. litellm 1.107.0 Compromised on PyPI: Backdoored Wheels Drop a Credential Stealer and an Hourly Remote Code Loader - StepSecurity
  4. GitHub CLI: Opt in to expiring, auto-refreshing OAuth tokens - GitHub Changelog
securitypythonllmsupply-chain

Artigos relacionados

Chrome's About page showing the browser up to date on version 153, next to the Settings menu.
Ferramentas dev

Chrome passa a um ciclo de duas semanas

O Chrome 153 inicia um ciclo de marcos de duas semanas, contra quatro antes. Segundo o Google, o Chrome 149 e o 150 corrigiram sozinhos 1.072 falhas de segurança.