Aikido

LiteLLM voltou a ser comprometido: foram detetados um infostealer e um RAT na versão 1.107.0

Escrito por
Ilyas Makari

A 21 de outubro de 2026, verificou-se que a versão 1.107.0 do LiteLLM (um popular proxy de código aberto que permite aos programadores encaminhar pedidos através de dezenas de fornecedores de LLM) tinha sido comprometida por um atacante que injetou código malicioso nos seus pacotes Python publicados no PyPI. A imagem oficial do Docker para essa mesma versão também se encontra comprometida.

O pacote contém dois componentes maliciosos distintos: um «infostealer» que extrai credenciais e execut secrets s na primeira execução, e um trojan de acesso remoto (RAT) que permite ao atacante executar código arbitrário nas máquinas infetadas a qualquer momento.

Atualização: O PyPI já colocou em quarentena e removeu a versão 1.107.0. A imagem do Docker (litellm/litellm:1.107.0) foi, entretanto, removida tanto do Docker Hub como do GHCR. O GitHub também retirou o repositório «dead-drop» do atacante (letters9813/pythonclient-test), que o RAT utilizava para recuperar o seu domínio C2.

A LiteLLM confirmou que o incidente já está controlado. Para obter as últimas atualizações e orientações sobre o que fazer caso tenha sido afetado, consulte a publicação da LiteLLM sobre o incidente de segurança. Se instalou a versão 1.107.0 antes de esta ter sido retirada, deve continuar a considerar as suas credenciais como comprometidas e atualizá-las.

Quem é afectado

Estás afetado se tiveres executado pip install litellm==1.107.0 entre Às 11h39 e às 12h47 UTC, no dia 21 de outubro, ou se tiver descarregado a imagem do Docker ou do GHCR através de v1.107.0, mais recente, principal-mais recente, ou main-stable entre Às 11:46 e às 14:20 UTC, no dia 21 de outubro.

Qualquer pessoa que tenha instalado ou removido software durante esse período deve partir do princípio de que as credenciais estão comprometidas e deve alterá-las imediatamente. Verifique se /tmp/.pc_once_* (o programa de exfiltração já foi executado se este ficheiro existir) e /tmp/remote_code_loader.lock (o daemon C2 esteve a funcionar ou ainda está a funcionar, se este ficheiro existir).

O que aconteceu

O atacante explorou uma diretiva no LiteLLM's pyproject.toml para inserir ficheiros nos pacotes «wheels» compilados sem alterar o repositório de código-fonte.

[tool.maturin]
data = "cook"
nome-do-módulo = "litellm.rust_bridge._native"

O data = "cook" A diretiva indica ao maturin (a ferramenta de compilação do LiteLLM para Rust/Python) para agrupar o conteúdo de um diretório chamado cozinhar/ na secção de dados do wheel durante a compilação. Esse diretório não existe no arquivo tar de código-fonte nem no GitHub. Foi criado no ambiente de compilação comprometido e o seu conteúdo foi incluído silenciosamente em todos os wheels compilados que foram posteriormente carregados no PyPI.

Foram introduzidos três ficheiros maliciosos na pasta «site-packages» do Python durante a instalação:

  • cook.pth é um ficheiro de 12 bytes que contém apenas importar cook. Processos em Python .pth ficheiros na pasta «site-packages» sempre que o interpretador é iniciado, o que faz com que cook.py para ser executado automaticamente sempre que o Python for iniciado no computador, sem que seja necessária qualquer ação adicional por parte do utilizador.
  • cook.py contém o programa de roubo de informações, fortemente ofuscado numa única linha que descomprime e executa uma carga útil de 61 000 bytes.
  • sitecustomize.py é o RAT. O Python também executa o ficheiro no arranque do interpretador, antes de qualquer código do utilizador ser executado. Este ficheiro cria um daemon em segundo plano que consulta a infraestrutura do atacante de hora a hora, à procura de novos comandos para executar.

O que ele rouba

Assim que o programa de roubo de informações é executado, recolhe os seguintes dados do computador infetado:

  • Informações do sistema, incluindo nome do anfitrião, nome de utilizador, versão do sistema operativo, processos em execução e interfaces de rede
  • Palavras-passe guardadas em navegadores baseados no Chromium (Chrome, Edge, Brave, Vivaldi, Opera), incluindo valores de palavras-passe descodificados por AES, e o histórico de navegação desses mesmos navegadores
  • Credenciais guardadas no Firefox
  • Chaves privadas SSH de ~/.ssh/
  • Histórico do shell no Bash, Zsh e Fish
  • Cloud credenciais dos fornecedores, incluindo ficheiros de credenciais e configurações da AWS, tokens de autenticação do Azure e cache MSAL, bem como credenciais predefinidas de aplicações do GCP. Além disso, consulta os pontos de acesso de metadados das instâncias ativas da AWS, do GCP e do Azure para extrair as credenciais disponíveis para a instância em execução.
  • Ficheiros de configuração do Docker e Docker Swarm secrets
  • Tokens de conta de serviço Kubernetes
  • secrets de CI/CD, incluindo configurações do GitLab Runner, palavras-passe de administrador e chaves mestras do Jenkins, e tokens do HashiCorp Vault
  • Credenciais e ficheiros de configuração das ferramentas para programadores do Claude Code, Claude Desktop, Cursor, GitHub Copilot, Windsurf, Gemini CLI, Amazon Q, Codex CLI, Aider, Continue, HuggingFace e outras
  • Credenciais do Git, .npmrc, .pypirc, e ficheiros de configuração do pip
  • Chaves privadas GPG e chaves privadas TLS
  • Todas as variáveis de ambiente do processo atual e, no Linux, de todos os outros processos em execução através de /proc/<pid>/environ
  • O conteúdo da base de dados LiteLLM diretamente, incluindo todas as linhas de LiteLLM_CredentialsTable (chaves de API guardadas para cada fornecedor) e LiteLLM_ProxyModelTable (configurações do modelo)

Todos os dados recolhidos são encriptados com uma chave pública de RSA-4096, codificada de forma fixa na carga útil, e enviados via HTTP POST para http://www[.]litellm[.]dev/healthcheck. Note-se que este domínio é controlado por um atacante e não está associado ao projeto legítimo LiteLLM. Existe um ficheiro sentinela em /tmp/.pc_once_72129118c59f5636c0bb impede que o programa de roubo de informações seja executado mais do que uma vez por computador.

Trojan de acesso remoto

sitecustomize.py é executado automaticamente pelo Python no arranque, devido ao nome do ficheiro, antes de qualquer código do utilizador ser executado. Cria um daemon em segundo plano que adquire um bloqueio em /tmp/remote_code_loader.lock para evitar a existência de várias instâncias, entrando assim num ciclo infinito.

A cada hora, o daemon obtém o domínio C2 atual do atacante a partir de um repositório do GitHub (raw[.]githubusercontent[.]com/letters9813/pythonclient-test/main/domain[.]txt), e, em seguida, obtém e executa uma carga útil em Python a partir de http://{domain}/codepy:

async def exec_code(code):
    loop = asyncio.get_running_loop()
    await loop.run_in_executor(
        _executor,
        lambda: exec(compile(code, "<remote>", "exec"), {"__name__": "__main__"}),
    )

Qualquer código Python que o atacante execute nesse ponto de acesso é executado com todos os privilégios do processo Python e sem qualquer isolamento (sandboxing). Isto permite ao atacante executar comandos de shell, colocar ficheiros adicionais, deslocar-se lateralmente, voltar a extrair dados ou implementar qualquer outra carga útil quando quiser, em todas as máquinas infetadas, por tempo indeterminado.

Como a Aikido detecta isso

Se você é um usuário Aikido, verifique seu feed central e filtre por problemas de malware. Isso aparecerá como um problema crítico 100/100. O Aikido reanalisa todas as noites, mas recomendamos acionar uma reanálise manual agora.

Se você ainda não é um usuário Aikido, pode criar uma conta e conectar seus repositórios. Nossa cobertura de malware está incluída no plano gratuito, não é necessário cartão de crédito.

Para proteção futura, considere Aikido Safe Chain (open source). O Safe Chain se integra ao seu fluxo de trabalho existente, interceptando comandos npm, npx, yarn, pnpm e pnpx e verificando pacotes contra Aikido Intel antes da instalação.

Para uma cobertura mais ampla em toda a sua equipe, o Device Protection da Aikido oferece visibilidade e controle sobre os pacotes de software instalados nos dispositivos da sua equipe. Ele abrange extensões de navegador, bibliotecas de código, plugins IDE e dependências de build, tudo em um só lugar. Pare o malware antes que ele seja instalado.

Indicadores de comprometimento

Versões dos pacotes afetadas

  • litellm==1.107.0 Pacote PyPI instalado a partir de qualquer ficheiro «wheel» compilado (todos os sistemas operativos)
    • litellm-1.107.0-cp310-abi3-macosx_10_12_x86_64.whl
      • SHA256: 7598727f209d717041db37f7dca271d3a7d328a279890e0e1d55375729aeb86d
    • litellm-1.107.0-cp310-abi3-macosx_11_0_arm64.whl
      • SHA256: 0aaf7ba346d41ef2f40390436738b001180d5a1c03aa093f121078a9969d9a1a
    • litellm-1.107.0-cp310-abi3-manylinux_2_28_x86_64.whl
      • SHA256: 462d0c9f67ca522d9e0e4acd245e90b36ce0d5353604a66bb7c43a1ec4a6fcf7
    • litellm-1.107.0-cp310-abi3-manylinux_2_28_aarch64.whl
      • SHA256: 668169d35b87bf51324080390b1b1c5ab12bd335cfe5f1a99e3689abd5e02ae6
    • litellm-1.107.0-cp310-abi3-musllinux_1_2_x86_64.whl
      • SHA256: 1bbce8caa94f01c0aaa0b7ddae51553a8a32e1ce53d96d44fe583272aff7ad00
    • litellm-1.107.0-cp310-abi3-musllinux_1_2_aarch64.whl
      • SHA256: c2e32d0ce2548aa662c18bf5001911a79fe5b30cf8357132275add02fdcde054
    • litellm-1.107.0-cp310-abi3-win_amd64.whl
      • SHA256: 12d4ccc5c6f8d35cf4f2cf233b7f3e418e863e657d81ff5f5fc9e210005b9484
  • litellm/litellm:1.107.0 Imagem do Docker (linux/amd64 e linux/arm64), incluindo o download através do mais recente, principal-mais recente, e main-stable etiquetas

Indicadores de ficheiros

  • cook.pth na pasta «site-packages» do Python
    • SHA256: 7f191632e7320705d154b85204f1ae546b543acbd7e8861229b76f5042b92bdb
  • cook.py na pasta «site-packages» do Python
    • SHA256: 9dd0a3926f96a37eb86cf1ee2310d9be93139cc4ebef3ef9e2efe9531390be25
  • sitecustomize.py na pasta «site-packages» do Python
    • SHA256: 34bef04fe88ac9d0aae0475630b1738681d15b94f233ac8aa46eacf5968305fa
  • /tmp/.pc_once_72129118c59f5636c0bb (ficheiro de vigilância que fica após a execução do programa de roubo de informações)
  • /tmp/remote_code_loader.lock (ficheiro de bloqueio mantido pelo daemon C2 enquanto este está em execução)

‍Indicadores de rede

  • http://www[.]litellm[.]dev/healthcheck (ponto final de exfiltração)
  • https://raw[.]githubusercontent[.]com/letters9813/pythonclient-test/main/domain[.]txt (Pesquisa do domínio C2)
  • POST HTTP de saída com User-Agent: Mozilla/4.0 (compatível; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0) e cabeçalho X-Token: XWiA8gZNa7NcX2XRoAEb
Compartilhar:

https://www.aikido.dev/blog/litellm-compromised-infostealer-rat

As vulnerabilidades CVE críticas evoluem rapidamente. Mantenha-se um passo à frente.

Inicie a sua análise gratuita.
4.7/5
Cansado de falsos positivos?

Experimente Aikido como 100 mil outros.
Começar Agora
Obtenha um tour personalizado

Confiado por mais de 100 mil equipes

Agende Agora
Escaneie seu aplicativo em busca de IDORs e caminhos de ataque reais

Confiado por mais de 100 mil equipes

Iniciar Escaneamento
Veja como o pentest de IA testa seu aplicativo

Confiado por mais de 100 mil equipes

Iniciar Testes

Torne-se seguro hoje,
de forma rápida e gratuita.

Proteja o seu código, a cloud e o runtime num sistema central.
Conecte um repositório para descobrir o que os agentes de raciocínio encontram na sua base de código.

Não é necessário cartão de crédito | Resultados do teste em 32 segundos.
Confiado por mais de 150 mil orgs