olimposec.com
Radar / Bugs / OS-2026-776
risco altoSUPPLY2026-10-24 · 3 min de leitura
0

Chave mestra da LiteLLM vazada permite roubo de tokens do GitHub e sequestro do pipeline de release

Resumo executivo

Uma master key da plataforma de agentes da LiteLLM, exposta por engano em um repositório público em maio de 2026 e nunca revogada, foi usada por um atacante em outubro para extrair um token OAuth do GitHub com privilégios de owner, desativar proteções de branch e publicar uma versão maliciosa do pacote no PyPI, Docker Hub e GHCR. O pacote comprometido (1.107.0) instalava um backdoor persistente e um coletor de credenciais que era ativado automaticamente na inicialização do Python, independentemente de a aplicação importar a LiteLLM ou não.

Em 27 de maio de 2026, um arquivo de configuração commitado no repositório público LiteLLM-Labs/lite-harness expôs a chave mestra da Agent Platform da LiteLLM. O commit foi sobrescrito rapidamente, mas a chave nunca foi revogada — um erro operacional que ficou latente por quase cinco meses até ser explorado, em 10 de outubro, por um atacante que a usou para acessar a plataforma e extrair um token OAuth do GitHub CLI com escopo de proprietário da organização, dando acesso irrestrito aos repositórios da empresa.

Com esse acesso, o atacante executou workflows do GitHub Actions em repositórios internos para coletar tokens de dois engenheiros com permissão de merge, escondendo os commits maliciosos em branches efêmeras do tipo "ci-tmp-<hex>" apagadas em minutos. Em 21 de outubro, ele removeu a proteção de branch, redirecionou o pipeline de release para um fork falsificado ("Berri-AI/litellm" em vez de "BerriAI/litellm") e publicou a versão 1.107.0 simultaneamente no PyPI, Docker Hub e GHCR, apagando em seguida os logs de execução para cobrir rastros. O pacote malicioso continha dois componentes: um coletor de credenciais que varria tokens de npm, PyPI, RubyGems, Cargo, SSH, Git, GitLab e sessões de navegador, e um backdoor que roda em background baixando e executando código arbitrário a cada hora — ambos ativados via hook de inicialização do Python, o que significa que a simples remoção dos arquivos da aplicação não eliminava a infecção.

Este é um caso exemplar de ataque à cadeia de suprimentos de software de IA: a LiteLLM é um gateway/proxy amplamente usado para unificar chamadas a múltiplos provedores de LLM (OpenAI, Anthropic, Bedrock etc.), então qualquer ambiente — de startups a times de plataforma de IA — que instalasse essa versão específica ficava exposto a roubo de segredos e execução remota contínua de código, mesmo sem usar a biblioteca ativamente. Os workflows maliciosos também coletaram chaves de API de Anthropic, OpenAI, Together AI, GitGuardian e credenciais de Postgres/Redis, ampliando o raio de impacto para toda a cadeia de fornecedores conectada à LiteLLM.

A LiteLLM reconheceu que havia flexibilizado suas restrições de release para acomodar lançamentos mais frequentes, permitindo que dois engenheiros aprovassem publicações sem exigir um dispositivo de segurança físico dedicado — um trade-off clássico entre velocidade de entrega e controle de assinatura de releases que se mostrou custoso. A resposta incluiu revogação de todos os tokens internos e de vendors e colocação em quarentena da versão maliciosa pelo PyPI poucas horas após o relato de um pesquisador da Upwind. O incidente reforça uma lição recorrente em segurança de cadeia de suprimentos de IA: uma master key vazada e nunca revogada é, na prática, equivalente a uma porta aberta permanente, independentemente de quão curto tenha sido o tempo de exposição original no commit.

Fonte ↗
0 comentários

Entre para comentar.

Nenhum comentário ainda — seja o primeiro.