Guias de Segurança

LiteLLM 1.107.0 distribuiu um ladrão de credenciais (outubro de 2026): versão afetada no PyPI e imagens Docker, e o que os usuários devem fazer

O LiteLLM 1.107.0 no PyPI e no Docker continha um ladrão de credenciais em 21 de outubro de 2026. Segundo a BerriAI: versões e tags afetadas, a janela de tempo, versões fora deste comprometimento e quais chaves rotacionar.

Publicado 2026-10-22 Atualizado 2026-10-24 Última verificação 2026-10-24 28 min de leitura
Nesta página

Para: desenvolvedores e operadores que usam o LiteLLM, a ferramenta de código aberto para chamar muitas APIs de LLM (modelos de linguagem de grande porte) por uma única interface, seja como biblioteca Python ou como proxy (gateway de LLM) executado no Docker.

Este artigo se baseia no aviso oficial da BerriAI, empresa por trás do LiteLLM, e nas atualizações de status que ela publicou no GitHub. Ele não trata de técnicas de ataque, do conteúdo do malware nem de valores específicos de indicadores de comprometimento (IoC). Consulte os nomes de arquivo e os digests das imagens na página do aviso da empresa.

Em andamento: este artigo será atualizado conforme a organização publicar mais informações

Em 24 de outubro de 2026, 11:00 UTC (20:00 JST)

Ainda não se sabe

  • Mudanças para evitar que se repita (a empresa diz que as compartilhará na semana seguinte)
  • O número de usuários ou ambientes afetados
  • Se os dados roubados foram usados

Em 23 de outubro (UTC) a empresa disse ter concluído sua investigação da cadeia de ataque e publicou uma análise de causa raiz. Ela diz que algumas hipóteses das atualizações de status publicadas durante a investigação eram "imprecisas ou incompletas" e que a análise é a fonte canônica. A primeira publicação do incidente foi mantida na forma original.

O que os usuários precisam fazer (versões e janela afetadas, limpeza, quais chaves rotacionar) não mudou desde a primeira publicação. Em 24 de outubro (UTC) a empresa publicou as versões 1.103.8, 1.104.6, 1.105.4 e 1.106.3, e a versão mais recente no PyPI agora é a 1.106.3. A partir dessas versões, a chave cosign que assina as imagens Docker e os Helm charts mudou (passo 3 abaixo).

O que os usuários do LiteLLM devem fazer hoje

O passo 1 é para todos. Os passos seguintes seguem a orientação da empresa para ambientes que instalaram ou iniciaram uma versão ou imagem afetada.

1

Verifique se você foi afetado: quando instalou e qual tag usou

A empresa lista os seguintes artefatos afetados. Todos os horários são de 21 de outubro de 2026.

CanalAfetadoJanela (UTC)
PyPIlitellm==1.107.0 (todos os sete wheels)11:39 a 13:23
Docker Hubv1.107.0, latest, main-latest, main-stable11:46 a 14:20
GHCR (registro de contêineres do GitHub)As mesmas quatro tags (litellm, litellm-database, litellm-non_root)11:46 até ficarem indisponíveis, no máximo às 13:51

A empresa diz que você foi afetado se instalou o LiteLLM com pip sem fixar a versão durante a janela, ou se iniciou um contêiner a partir de uma dessas tags durante a janela. Se o CI executa pip install litellm a cada build, ou se o seu Dockerfile usa FROM com a tag latest, a versão afetada pode ter sido instalada sem que ninguém fizesse nada.

  • Se um ambiente puder estar afetado, não inicie o Python nem o pip para verificar sua versão. Isole-o primeiro e depois revise os registros de implantação ou os digests das imagens a partir de uma máquina limpa separada. Se não puder descartar a exposição, trate-o como afetado e passe para a reconstrução e a rotação de credenciais abaixo (observação deste site). O comando de verificação de versão da empresa também inicia o Python, portanto não o execute antes da limpeza
  • A empresa publicou os nomes de arquivo a procurar e os digests das imagens. Encontrá-los confirma a exposição, mas não encontrá-los não prova que o ambiente esteja limpo
  • Se você tinha fixado explicitamente a 1.106.2 ou anterior, ou a 1.107.0rc1 ou rc2, você não foi afetado (a empresa diz que as versões anteriores estão fora deste comprometimento)
  • Os clientes que baixam do registro empresarial privado não foram afetados (a empresa)
2

Se foi instalada: não comece com pip install nesse ambiente

Segundo a análise do pesquisador citada no aviso da empresa, o malware é instalado como arquivos que o Python carrega automaticamente toda vez que inicia. Ele é executado de novo em qualquer processo Python, inclusive nos que nunca importam o litellm e no próprio pip.

A ordem de limpeza indicada pela empresa é a seguinte (nomes de arquivo e locais estão na página do aviso):

  • Sem iniciar o Python, exclua pelo shell os arquivos maliciosos indicados pela empresa (e seus arquivos de cache) de todos os diretórios site-packages afetados
  • Pare o processo Python que ficou em execução em segundo plano
  • Só então reinstale fixando em litellm==1.106.2. A empresa diz que reconstruir do zero as imagens e os ambientes virtuais é melhor

Se você executou em contêineres, o caminho mais rápido costuma ser parar os contêineres criados a partir da imagem afetada e recriá-los a partir de uma imagem fixada em uma versão limpa (observação deste site).

3

Fixe uma versão e verifique com a nova chave de assinatura

Na primeira publicação, a empresa pediu que os usuários fixassem 1.106.2 ou qualquer versão explícita publicada antes deste incidente. Em 24 de outubro (UTC), publicou então as versões 1.103.8, 1.104.6, 1.105.4 e 1.106.3. A versão mais recente no PyPI é a 1.106.3, e a 1.107.0 continua removida. Segundo as notas de versão, essas versões removem a autoridade certificadora raiz eMudhra de todos os pacotes de certificados em que o SDK, o proxy e as imagens Docker confiam. O assunto eMudhra é tratado em o que os usuários de Python precisam fazer sobre as chaves da CA intermediária eMudhra.

No Docker, faça referência às imagens por uma tag de versão, ou melhor, por digest (um valor calculado a partir do conteúdo da imagem), e não por tags como latest ou main-stable, cujo conteúdo muda. Assim, uma mudança no que a tag aponta não chega até você.

Segundo as notas de versão, a partir dos lançamentos de 24 de outubro as imagens Docker e os Helm charts são assinados com uma nova chave cosign (cosign é uma ferramenta para assinar e verificar imagens de contêiner), e a verificação com a chave anterior falha. Se você fixa o cosign.pub antigo em scripts de cosign verify, verificações de CI ou políticas do Kubernetes que checam assinaturas (como o Kyverno), substitua-o pela nova chave do commit citado nas notas de versão. As notas de versão também listam o SHA-256 da nova chave; compare a chave que você baixar com ele antes de trocar (observação deste site).

4

Rotacione as chaves: tudo o que o ambiente podia acessar

A empresa diz que, se a 1.107.0 chegou a ser instalada em um host com acesso de saída à internet, você deve presumir que os dados roubados foram enviados com sucesso. Ela cita em especial:

  • A função de nuvem associada ao servidor ou ao contêiner (como uma função IAM de instância ou de tarefa da AWS)
  • Todas as chaves de provedores de LLM guardadas no banco de dados do proxy LiteLLM
  • A chave mestra do proxy e todas as chaves virtuais que você emitiu
  • A senha na string de conexão do banco de dados (DATABASE_URL)
  • Todos os segredos que estavam no ambiente de qualquer processo em execução no host

Na análise do pesquisador, o malware também foi feito para coletar chaves SSH, credenciais de Git e de publicação de pacotes, tokens do Kubernetes, senhas salvas em navegadores e as configurações de assistentes de programação com IA. Se você executou a 1.107.0 em um notebook de desenvolvedor, as credenciais desse notebook também precisam ser rotacionadas.

Emita uma nova chave no painel de cada serviço e revogue a antiga (observação deste site: defina primeiro a nova chave e depois revogue a antiga, para evitar uma interrupção). O tratamento de chaves de API é tratado em o que torna arquivos .env e chaves de API arriscados.

5

Verifique se houve uso indevido: logs de auditoria da nuvem e uso de LLM

A empresa pede que você verifique, no log de auditoria da AWS (CloudTrail), uma chamada de verificação de identidade (GetCallerIdentity) feita com a função da instância na época da instalação e, depois, qualquer uso das credenciais dessa função a partir de fora da sua própria infraestrutura.

Como observação deste site, verifique também nos painéis dos seus provedores de LLM se houve algum aumento inesperado de uso ou de cobranças desde as 11:39 UTC de 21 de outubro (a noite no Japão). Quando uma chave de LLM roubada é usada, isso pode aparecer no uso e na cobrança. O que acontece com chaves roubadas é tratado em como chaves de API roubadas levam ao banimento de contas.

Instalou a 1.107.0 ou iniciou uma tag afetada durante a janela

Trate como comprometido

↓

1. Limpe sem iniciar o Python

Melhor: reconstrua as imagens e os ambientes virtuais

O host tinha acesso de saída à internet

Presuma que os dados foram enviados

↓

2. Rotacione todas as chaves que ele podia acessar

Funções de nuvem, chaves de provedores, chave mestra, banco de dados

Fixou explicitamente a 1.106.2 ou anterior

A empresa diz que as versões anteriores estão fora deste comprometimento

↓

3. Mantenha a versão fixada; verifique as assinaturas das novas versões

No Docker, use uma tag de versão ou um digest. Nova chave cosign a partir dos lançamentos de 24 de outubro

As ações e a ordem para cada caso, com base no aviso da BerriAI. Nomes de arquivo e digests estão na página do aviso da empresa.

Se você executa o proxy LiteLLM

O banco de dados do proxy guarda as chaves de todos os provedores de LLM que você conecta. Na análise do pesquisador, quando o DATABASE_URL estava definido, o malware foi feito para ler as tabelas que guardam as chaves de provedores e as configurações de modelos. Se o seu proxy iniciou na 1.107.0, planeje rotacionar todas as chaves de provedores registradas nele e faça uma lista antes de começar. As chaves virtuais que você distribuiu também precisarão ser reemitidas, então preparar uma mensagem para as pessoas que as usam reduzirá a confusão.

O que aconteceu (segundo a BerriAI)

O que segue se baseia na publicação do blog da BerriAI "Contained: Oct 21, 2026 LiteLLM release v1.107.0 Compromised" (publicada em 21 de outubro de 2026, atualizada às 20:30 UTC desse dia), em sua análise de causa raiz de 23 de outubro "The attack chain behind the v1.107.0 LiteLLM release" e nas atualizações de status que seu diretor de segurança publicou na issue do GitHub. Todos os horários são UTC de 21 de outubro, salvo indicação em contrário. Valores de indicadores, como endereços e nomes usados pelo atacante, não são reproduzidos.

  1. 27 de maio

    Um arquivo de configuração contendo a chave mestra de uma plataforma interna de agentes é enviado por engano a um repositório público. O commit é rapidamente sobrescrito, mas a chave mestra não é revogada (análise de causa raiz).
  2. 10 de outubro

    O atacante usa a chave mestra para chamar a API da plataforma e obtém o token do GitHub CLI do proprietário da organização configurado ali. Cerca de 45 minutos depois, usando esse token, o atacante executa CI nos repositórios da empresa e exfiltra segredos de CI, obtendo os tokens de outros dois mantenedores (análise de causa raiz).
  3. 12 de outubro

    Usando o token do proprietário, o atacante executa CI em vários repositórios privados e exfiltra segredos pela segunda vez: segredos de baixa sensibilidade e chaves de provedores de LLM com saldo mínimo usadas em testes de CI. A empresa diz que eles não fizeram parte do caminho até os artefatos envenenados, e que rotacionou os tokens envolvidos e auditou os logs de segurança (análise de causa raiz).
  4. 10:08

    A proteção de branch rejeita uma alteração no workflow de lançamento privado. Cinco segundos depois, uma credencial ligada a uma conta de desenvolvedor com privilégios é usada para contornar a proteção e aplicar a alteração.
  5. 10:46

    O workflow modificado inicia uma execução de staging construída a partir do repositório semelhante controlado pelo atacante.
  6. 11:11

    O atacante usa outras credenciais roubadas para que o lançamento alterado seja aprovado e publicado.
  7. 11:39 a 11:40

    Sete wheels maliciosos da 1.107.0 são enviados ao PyPI.
  8. 11:46

    As imagens Docker do mesmo lançamento são publicadas.
  9. 12:06

    Um pesquisador externo relata o problema em uma issue do GitHub.
  10. 12:09 a 12:24

    O atacante remove os rastros da alteração do workflow (análise de causa raiz; o log de auditoria da organização manteve um registro).
  11. 13:02

    A empresa inicia sua resposta ao incidente (análise de causa raiz).
  12. Até as 13:23

    O PyPI removeu a 1.107.0.
  13. 14:20

    Todas as tags afetadas do Docker Hub foram removidas ou redirecionadas para imagens limpas.
  14. 20:30

    A empresa atualiza o aviso, dizendo acreditar ter identificado a cadeia de ataque.
  15. 23:37

    A empresa informa que está identificando todos os tokens de autenticação da organização e revogando ou rotacionando cada um. Os registros continuam bloqueados para novos lançamentos e os lançamentos regulares continuam pausados.
  16. 02:19 de 22 de outubro (11:19 JST)

    A empresa informa que não houve novidades relevantes desde a última atualização. Os registros continuam bloqueados e os lançamentos regulares continuam pausados. Ela passa de atualizações a cada duas horas para atualizações quando houver novidades significativas.
  17. Por volta das 21:00 a 21:50 de 23 de outubro (por volta das 06:00 a 06:50 JST de 24 de outubro)

    Por volta das 21:00 a empresa publica sua análise de causa raiz e diz que algumas de suas hipóteses anteriores eram imprecisas ou incompletas. Uma atualização às 21:50 (06:50 JST) da primeira publicação aponta a análise como o registro canônico.
  18. Cerca das 07:56 a 09:15 de 24 de outubro (cerca das 16:56 a 18:15 JST)

    A empresa publica no PyPI as versões 1.103.8, 1.104.6, 1.105.4 e 1.106.3. Elas removem a autoridade certificadora raiz eMudhra dos pacotes confiáveis, e as imagens Docker e os Helm charts passam a uma nova chave de assinatura cosign (notas de versão).
Cerca de 2 horas
Tempo no ar no PyPI (11:39 a 13:23 UTC)
Cerca de 2,5 horas
Tempo em que as tags do Docker Hub apontaram para a imagem maliciosa
1.106.2
Versão que a empresa pede que os usuários fixem
Não afetado
Registro empresarial privado (a empresa)
O que diz o aviso (segundo a BerriAI)
Afetado
litellm==1.107.0 no PyPI (todos os sete wheels). As tags v1.107.0, latest, main-latest e main-stable no Docker Hub e no GHCR (no GHCR: as imagens litellm, litellm-database e litellm-non_root)
O que aconteceu
O pipeline de lançamento foi comprometido e uma 1.107.0 contendo malware foi publicada. A tag oficial v1.107.0 no GitHub não contém os arquivos maliciosos; os artefatos foram construídos a partir de um repositório semelhante controlado pelo atacante
O que o malware faz (conforme divulgado)
Malware compilado que rouba credenciais e carrega ferramentas de execução remota de código. Ele é executado sempre que o Python inicia e deixa um processo em execução em segundo plano
Versões fora deste comprometimento
Todas as versões anteriores estão fora deste comprometimento. Por ora, fixe a 1.106.2 ou outra versão explícita
Causa (análise de causa raiz de 23 de outubro)
Uma chave mestra não revogada de uma plataforma interna de agentes, enviada por engano a um repositório público, foi usada para obter o token OAuth do GitHub CLI de um proprietário da organização. Esse token não estava ligado a uma conta de serviço e não tinha escopo reduzido. Com ele, o atacante exfiltrou segredos de CI e obteve os tokens de dois mantenedores. O token do proprietário foi usado para desativar a proteção de branch e alterar o workflow, e os outros tokens roubados foram usados para fazer o lançamento alterado passar pela aprovação
Aprovação de lançamento (análise de causa raiz)
Normalmente um lançamento precisava ser aprovado por uma conta especial presa a um dispositivo físico no escritório da empresa. No início daquela mesma semana, isso foi flexibilizado para permitir que quaisquer dois engenheiros disparassem e aprovassem um lançamento, para dar suporte a lançamentos de correção mais frequentes
Correção da primeira explicação
A primeira publicação suspeitava que os tokens vieram dos logs de uma implantação interna do LiteLLM. A análise diz que o primeiro token veio de outro serviço
Outras credenciais levadas
Tokens de vários outros sistemas internos também foram levados, e a atividade do atacante se concentrou principalmente em chaves de API de inferência upstream (chaves de provedores de LLM). Em 12 de outubro, segredos de teste de CI de baixa sensibilidade e chaves de provedores com saldo mínimo foram exfiltrados de vários repositórios privados; a empresa diz que eles não fizeram parte do caminho até os artefatos envenenados. A empresa está revogando todos os tokens de todos os sistemas internos e plataformas de fornecedores
A resposta da empresa
Removeu os artefatos do PyPI, do Docker Hub e do GHCR. Revogou os tokens envolvidos, reduziu sua organização no GitHub a um membro não afetado, removeu os vínculos de confiança de seus registros públicos com a organização e está revogando ou rotacionando todos os tokens. Em 24 de outubro (UTC) publicou as versões 1.103.8, 1.104.6, 1.105.4 e 1.106.3 com uma nova chave de assinatura
Números e uso indevido
Não divulgados

O que se sabe e o que não se sabe

Este é o estado em 24 de outubro de 2026. Quando houver novidades, a coluna de situação será atualizada.

ItemO que diz o avisoSituação
Versão afetada (PyPI)litellm==1.107.0, todos os sete wheelsConfirmado (a empresa)
Imagens e tags afetadasv1.107.0, latest, main-latest, main-stable no Docker Hub e no GHCRConfirmado (a empresa)
Janela de tempoPyPI 11:39 a 13:23 UTC; Docker Hub 11:46 a 14:20 UTC; GHCR indisponível até as 13:51 UTCConfirmado (a empresa)
Malware no lançamentoRouba credenciais e carrega ferramentas de execução remota de códigoConfirmado (a empresa)
Credenciais em hosts afetadosSe o host tinha acesso de saída, presuma que os dados foram enviadosPossível (a empresa)
Versões anterioresFora deste comprometimentoNão afetadas (a empresa)
Registro empresarial privadoNão afetadoNão afetado (a empresa)
Tag oficial do código-fonte no GitHubNão contém os arquivos maliciososNão afetada (a empresa)
Como os tokens foram levadosUma chave mestra não revogada, enviada por engano a um repositório público, foi usada para levar o token do proprietário guardado em uma plataforma interna de agentes (análise de causa raiz de 23 de outubro)Confirmado (a empresa)
A explicação da primeira publicação, "obtidos dos logs"Corrigida na análise: o primeiro token veio de outro serviçoCorrigido (a empresa)
Segunda exfiltração em 12 de outubroSegredos de teste de CI e chaves de provedores com saldo mínimo de repositórios privados; não fizeram parte do caminho até os artefatos envenenadosConfirmado (a empresa)
Versões de correção e chave de assinatura1.103.8, 1.104.6, 1.105.4 e 1.106.3 publicadas em 24 de outubro; imagens Docker e Helm charts assinados com uma nova chave cosignConfirmado (a empresa)
Mudanças para evitar que se repitaA serem compartilhadas na semana seguintePlanejado (a empresa)
Número de usuários ou ambientes afetadosNão informado no avisoNão informado
Uso indevido dos dados roubadosNão informado no avisoNão informado

Como ler isto: mesmo com a janela curta, decida pelo fato de você ter instalado ou iniciado a versão

O lançamento ficou no ar no PyPI por cerca de duas horas, mas instalações sem versão fixa no CI ou reconstruções automáticas podem tê-lo obtido nesse intervalo. Este site não faz suposições sobre números. Decida se você foi afetado pelo fato de ter instalado a 1.107.0 ou iniciado uma tag afetada durante a janela.

O aviso e a análise da empresa nomeiam o pesquisador que encontrou o problema, uma empresa de segurança que investigou de forma independente e a ferramenta de desenvolvimento mencionada na primeira publicação. Seguindo a política deste site, apenas a organização que divulgou o incidente é nomeada; as demais são descritas pelo papel.

O que pode acontecer quando um lançamento contém malware

O que segue é geral e não significa que essas coisas aconteceram neste caso. O que a empresa divulgou sobre este malware está em "O que aconteceu" acima.

Um pacote Python é executado com as permissões de quem o instala. Em um servidor ou contêiner, ele pode acessar as variáveis de ambiente, os arquivos e qualquer função de nuvem associada a esse host. Um gateway de LLM existe para guardar em um só lugar as chaves de vários provedores de LLM, de modo que, quando é comprometido, as chaves de todos os provedores a que ele se conecta ficam em risco ao mesmo tempo.

O que o diferencia do typosquatting ou da exploração de uma vulnerabilidade de versão antiga é que o código malicioso veio do canal oficial, com o nome e o número de versão oficiais. Incidentes do mesmo tipo incluem o comprometimento da cadeia de suprimentos do Trivy, os incidentes do TanStack e do Nx Console e o malware no Rank Math PRO, um plugin do WordPress.

O que os usuários do LiteLLM devem revisar: lições dos fatos divulgados

Esta seção não julga a resposta da empresa. Ela seleciona pontos do aviso e da análise de causa raiz sobre os quais os usuários podem agir para se preparar para o próximo incidente.

1

Pare de usar referências cujo conteúdo muda: fixe versões e use digests

Os ambientes afetados foram os que instalaram com pip sem versão fixa, ou usaram tags como latest, main-latest e main-stable, cujo conteúdo muda. Os ambientes que fixaram a 1.106.2 e referenciaram as imagens Docker por digest não foram afetados, mesmo que tenham sido reconstruídos durante a janela.

Como primeiro passo, fixe as dependências usadas em produção e no CI com um arquivo de lock que inclua hashes (pip install --require-hashes, ou arquivos de lock do uv ou do Poetry). Uma configuração que evita versões publicadas muito recentemente (como o exclude-newer do uv, que ignora tudo o que foi publicado depois de um determinado momento) também ajuda contra lançamentos retirados em poucas horas. A abordagem é tratada em auditoria de dependências com o OSV-Scanner.

2

Separe as chaves que você dá ao gateway de LLM, presumindo que terá de rotacioná-las

O banco de dados do proxy guarda as chaves de todos os provedores que você conecta. Quando você precisa rotacioná-las, como agora, não saber qual chave pertence a qual ambiente deixa você entre esquecer algumas ou desligar tudo.

Usar chaves de provedor separadas para desenvolvimento, testes e produção, e definir limites de gastos e alertas no lado do provedor, torna a rotação menor e ajuda a perceber o uso indevido mais cedo. O que fazer quando uma chave vaza é tratado em uma chave de API que vazou de código escrito por IA.

3

Revogue uma chave que você expôs, mesmo depois de sobrescrever o commit

Segundo a análise de causa raiz, o ponto de partida foi uma chave mestra enviada por engano a um repositório público em maio. O commit foi rapidamente sobrescrito e as chaves expostas foram identificadas como precisando de revogação, mas a chave mestra não foi revogada, e foi usada cerca de quatro meses e meio depois. A empresa diz que o incidente é uma forte ilustração do risco de não rotacionar uma chave potencialmente exposta.

Se você enviar um segredo a um repositório público, revogue e substitua a chave antes de se preocupar com o histórico. Depois de rotacionar, confira a lista das chaves que você substituiu para garantir que nenhuma foi esquecida (observação deste site). O problema é tratado em credenciais vazadas que continuam válidas.

4

Não dê a ferramentas de automação o token pessoal de um proprietário

Segundo a análise, o primeiro token levado estava configurado na plataforma de agentes para que ela pudesse abrir pull requests. Ele não estava ligado a uma conta de serviço e não tinha escopo reduzido: era o token pessoal do GitHub CLI de um proprietário da organização. A empresa observa que os tokens do GitHub CLI são emitidos após a autenticação em dois fatores e não estão sujeitos à nova autenticação que o GitHub pede antes de ações sensíveis.

Dê a agentes e bots um token dedicado, com escopo apenas para a sua função (um GitHub App ou um token de granularidade fina), e mantenha os direitos de proprietário separados das contas usadas no dia a dia (observação deste site). Disponibilizar os segredos de CI apenas aos workflows e ambientes que precisam deles também limita até onde um token roubado pode chegar (observação deste site). A proteção de uma conta do GitHub é tratada em como configurar a autenticação em dois fatores do GitHub.

5

Mantenha os logs e a interface de administração do gateway fora da internet

Isso acabou não sendo a causa, mas a primeira publicação da empresa observou que, em situações específicas, um assistente de programação com IA pode incluir o token do GitHub CLI de um usuário no corpo de uma resposta e, onde os corpos de resposta são registrados em log, esses tokens podem aparecer nos logs do LiteLLM.

Para um gateway que você mesmo executa, verifique três coisas: a interface de administração e a API não são acessíveis diretamente pela internet, as configurações de log que guardam corpos de resposta foram revisadas e, se você os guarda, o período de retenção é curto. A proteção de uma conta do GitHub é tratada em como configurar a autenticação em dois fatores do GitHub.

Fontes (registro público)

Os fatos deste artigo vêm das informações públicas abaixo. O conteúdo do malware, os endereços que ele contata e valores específicos de indicadores não são reproduzidos.

  • BerriAI (LiteLLM), "Contained: Oct 21, 2026 LiteLLM release v1.107.0 Compromised" (publicada em 21 de outubro de 2026, atualizada às 20:30 UTC desse dia) — docs.litellm.ai
  • BerriAI (LiteLLM), "The attack chain behind the v1.107.0 LiteLLM release" (análise de causa raiz, publicada em 23 de outubro de 2026) — docs.litellm.ai
  • Issue nº 47826 do GitHub BerriAI/litellm (o relato do pesquisador externo e as atualizações de status da empresa, verificadas até a atualização das 21:15 UTC de 23 de outubro) — github.com
  • A página do projeto litellm no PyPI (verificada às 11:00 UTC de 24 de outubro; a versão mais recente é a 1.106.3 e a 1.107.0 não consta) — pypi.org
  • Releases do GitHub BerriAI/litellm (v1.103.8, v1.104.6, v1.105.4 e v1.106.3, publicadas em 24 de outubro de 2026: mudança da chave de assinatura e remoção da CA raiz eMudhra) — github.com

Histórico de atualizações

2026-10-24 (11:00 UTC): Incorporada a publicação pela empresa das versões 1.103.8, 1.104.6, 1.105.4 e 1.106.3 em 24 de outubro (UTC), substituindo a afirmação de que a versão mais recente no PyPI ainda era a 1.106.2. Acrescentado ao passo 3 e ao FAQ que as imagens Docker e os Helm charts dessas versões são assinados com uma nova chave (a chave anterior não verifica mais) e a remoção da CA raiz eMudhra. Acrescentada a segunda exfiltração de 12 de outubro, vinda da análise de causa raiz (não fez parte do caminho até os artefatos envenenados, segundo a empresa).

2026-10-24: Incorporada a análise de causa raiz que a empresa publicou em 23 de outubro. Reescrito como os tokens foram levados, da hipótese da primeira publicação (logs de uma implantação interna do LiteLLM) para: uma chave mestra enviada por engano a um repositório público e nunca revogada, depois o token do proprietário guardado em uma plataforma interna de agentes, depois segredos de CI. Atualizados a linha do tempo, o FAQ, a tabela e a seção para os usuários. Os relatos de 22 e 23 de outubro descreviam a primeira hipótese (tokens vazando por logs de ferramentas de IA ou do gateway), que a empresa depois corrigiu. O que os usuários precisam fazer não mudou. Valores de indicadores (endereços IP, nomes, commits) não estão incluídos.

2026-10-22 (13:30 JST): Acrescentada a atualização do GitHub das 02:19 UTC de 22 de outubro (sem novidades relevantes; atualizações agora apenas quando houver novidades significativas). O aviso continua sendo a versão das 20:30 UTC. Esclarecidos quais imagens são afetadas no GHCR e a redação da verificação de uso indevido.

2026-10-22: Primeira versão, com base no aviso da BerriAI conforme atualizado às 20:30 UTC de 21 de outubro e na atualização do GitHub das 23:37 UTC desse dia. Será atualizada quando o caminho da intrusão ou os números forem publicados.

Leia a seguir

Notícias urgentes recentes

FAQ

QQuais versões e imagens do LiteLLM são afetadas?
A

Segundo a BerriAI (LiteLLM), os artefatos afetados são o litellm==1.107.0 no PyPI (todos os sete wheels, disponíveis das 11:39 às 13:23 UTC de 21 de outubro de 2026) e as tags v1.107.0, latest, main-latest e main-stable no Docker Hub e no GHCR. No Docker Hub, as tags apontaram para a imagem comprometida das 11:46 às 14:20 UTC; no GHCR, foram retiradas até as 13:51 UTC. A empresa diz que as versões anteriores estão fora deste comprometimento e que os clientes que usam seu registro empresarial privado não foram afetados.

QComo verifico se fui afetado?
A

A empresa diz que você foi afetado se instalou o LiteLLM sem versão fixa com pip durante a janela, ou se iniciou um contêiner a partir de uma das tags afetadas durante a janela. Ela pede que você trate como comprometido qualquer ambiente que tenha iniciado o Python com o litellm==1.107.0. Se um ambiente puder estar afetado, não inicie o Python nem o pip para verificar: isole-o primeiro. A partir de uma máquina limpa separada, revise os registros de implantação ou os digests das imagens. Se não puder descartar a exposição, trate-o como afetado (observação deste site). A empresa publicou os nomes de arquivo a procurar, mas diz que não encontrá-los não prova que o ambiente esteja limpo.

QCorro risco mesmo que meu código nunca importe o litellm?
A

Sim. Segundo a análise do pesquisador citada no aviso da empresa, o malware é instalado como arquivos que o Python carrega automaticamente toda vez que inicia, portanto ele é executado até em processos Python que nunca usam o litellm, e até quando você executa o próprio pip. Por isso a empresa define uma ordem de limpeza e alerta contra começar com pip install em um ambiente afetado.

QQuais credenciais devo rotacionar?
A

A orientação da empresa é rotacionar tudo o que o host podia acessar. Em especial: a função de nuvem associada à instância ou à tarefa (como uma função IAM da AWS), todas as chaves de provedores de LLM guardadas no banco de dados do proxy LiteLLM, a chave mestra do proxy e todas as chaves virtuais, a senha do DATABASE_URL e qualquer segredo no ambiente de qualquer processo do host. Se a 1.107.0 chegou a ser instalada em um host com acesso de saída à internet, a empresa pede que você presuma que os dados foram enviados com sucesso.

QQual foi a causa?
A

Segundo a análise de causa raiz que a empresa publicou em 23 de outubro, um arquivo de configuração enviado por engano a um repositório público em 27 de maio continha a chave mestra de uma plataforma interna de agentes (uma ferramenta de código aberto usada pela empresa). O commit foi rapidamente sobrescrito, mas a chave mestra não foi revogada. Em 10 de outubro o atacante usou a chave para chamar a API da plataforma e obteve o token OAuth do GitHub CLI de um proprietário da organização no GitHub que estava configurado ali. Com esse token, o atacante exfiltrou segredos armazenados no CI e obteve os tokens de outros dois mantenedores e, em 21 de outubro, desativou a proteção de branch, alterou o workflow de lançamento e passou pela aprovação de produção. A primeira publicação da empresa suspeitava que os tokens tivessem sido obtidos dos logs de uma implantação interna do LiteLLM; a análise corrige isso, dizendo que o primeiro token veio de outro serviço.

QDesde 24 de outubro, a verificação das assinaturas das imagens Docker do LiteLLM falha. Por quê?
A

Segundo as notas de versão da empresa, a partir das versões 1.103.8, 1.104.6, 1.105.4 e 1.106.3, publicadas em 24 de outubro (UTC), as imagens Docker e os Helm charts são assinados com uma nova chave cosign, e a verificação com a chave anterior falha. Se você fixa o cosign.pub antigo em scripts de cosign verify, verificações de CI ou políticas do Kubernetes que checam assinaturas, substitua-o pela nova chave do commit citado nas notas de versão. O local da chave e o comando de verificação estão nas notas de versão de cada versão.

QO LiteLLM também foi comprometido em março. É o mesmo incidente?
A

Não. Neste aviso a empresa diz que, após o incidente de março, reforçou seu pipeline de lançamento (movendo os lançamentos para um repositório privado, usando trusted publishing, tornando imutáveis as tags de lançamento do Docker e assinando as imagens), e que desta vez o atacante teve de passar por vários desses controles usando credenciais legítimas. As versões afetadas em março são diferentes da 1.107.0.