O LiteLLM, o gateway de código aberto que muitas equipas usam para encaminhar pedidos para dezenas de fornecedores de modelos de linguagem, publicou a 21 de outubro uma versão maliciosa. A 1.107.0 chegou ao PyPI e às imagens do projeto no Docker Hub e no GitHub Container Registry depois de os atacantes assumirem o controlo do fluxo de lançamentos, segundo o relatório de incidente assinado pelo presidente executivo, pelo diretor técnico e pelo responsável de segurança da empresa. O LiteLLM afirma que o incidente está contido e que todas as versões anteriores são seguras.
A janela de exposição foi curta, mas abrangente. Os sete pacotes wheel da 1.107.0 puderam ser descarregados do PyPI entre as 11h39 e as 13h23 UTC. No Docker Hub, as etiquetas v1.107.0, latest, main-latest e main-stable apontaram para uma imagem comprometida das 11h46 às 14h20 UTC, enquanto as equivalentes no GHCR foram retiradas até às 13h51. A Datadog Security Labs, que atribui ao LiteLLM cerca de 23 milhões de descargas semanais, avisa que pode estar afetado quem instalou sem fixar a versão ou usou uma dessas etiquetas móveis nesse período. Os clientes do registo privado empresarial do LiteLLM ficaram de fora.
O código malicioso foi pensado para correr mesmo sem o LiteLLM ser importado. Cada pacote deixava em site-packages um ficheiro cook.pth, um programa de roubo chamado cook.py e um script sitecustomize.py, pelo que o código arrancava sempre que o Python era iniciado. De acordo com o registo OSV de pacotes maliciosos e com a análise da Datadog, o programa recolhia chaves de nuvem e metadados de instâncias, chaves SSH e GPG, segredos de Kubernetes, Vault e sistemas de integração contínua, dados de navegadores e pastas de configuração de ferramentas de programação com IA, cifrava tudo e enviava-o para um domínio que imita o oficial, litellm[.]dev. O segundo script consultava de hora a hora um endereço remoto para descarregar e executar código. A Datadog diz que esse ficheiro de controlo só teve valores de teste, pelo que não se observou uma segunda fase do ataque.
A explicação do LiteLLM sobre o que correu mal ainda é provisória. A empresa diz que o atacante tinha tokens da linha de comandos do GitHub pertencentes a três programadores. Um deles, de um dos donos da organização, serviu para contornar a proteção de ramos do fluxo privado de lançamentos e redirecioná-lo para Berri-AI/litellm, uma cópia cujo nome difere do verdadeiro BerriAI/litellm por um único hífen. Um segundo token desbloqueou a aprovação de produção e um terceiro apagou depois os registos da operação. A etiqueta oficial do código-fonte 1.107.0 nunca conteve os ficheiros maliciosos.
A origem dos tokens é a parte mais incómoda. O LiteLLM conta que descobriu uma conta de utilizador inesperada numa instalação interna do próprio LiteLLM acessível pela internet e acredita que o atacante leu os tokens nos registos dessa instalação. Acrescenta que, em situações específicas, o Claude Code pode incluir o token OAuth do GitHub CLI de um utilizador no corpo de uma resposta, que acaba guardado quando as respostas ficam registadas. A empresa ainda não confirmou como o intruso entrou nessa instalação e suspeita de uma vulnerabilidade corrigida recentemente.
É a segunda vez este ano que o LiteLLM serve para espalhar software malicioso. Em março, as versões 1.82.7 e 1.82.8 foram comprometidas numa campanha que a Datadog associa a um grupo a que chama TeamPCP; a OX Security nota que desta vez as ferramentas e a infraestrutura são outras e não foi estabelecida qualquer ligação. O caso mostra como um gateway de IA, que por natureza guarda todas as chaves de fornecedores de uma organização, se torna um alvo valioso.
Os conselhos do LiteLLM e das empresas de segurança são diretos. Quem instalou a 1.107.0 ou correu uma imagem afetada deve considerar a máquina comprometida, apagar os ficheiros deixados pelo ataque antes de voltar a iniciar o Python, reconstruir os ambientes com a versão 1.106.2 fixada e trocar todas as credenciais acessíveis, incluindo as chaves de fornecedores guardadas na base de dados do proxy. O LiteLLM diz que a investigação e a cronologia continuam a ser atualizadas.