- Resultados de pesquisa indicam que desenvolvedores que usam LLMs em ambientes locais para proteger a privacidade podem, na prática, ficar expostos a vulnerabilidades de segurança
- Em um experimento do OpenAI Red‑Teaming Challenge com o modelo
gpt-oss-20b, a equipe de pesquisa confirmou que modelos locais são muito mais fáceis de enganar com manipulação de prompts, gerando código malicioso
- Com simples manipulação de prompts, atacantes podem induzir a inserção de backdoors ou à execução remota de código (RCE), com taxa de sucesso de até 95%
- Esses ataques se infiltram naturalmente no fluxo de trabalho comum dos desenvolvedores por meio de envenenamento de documentação (documentation poisoning), manipulação de servidores MCP e engenharia social
- Embora LLMs locais tenham vantagem em termos de privacidade de dados, a principal conclusão do estudo é que eles podem acabar sendo uma escolha mais perigosa devido à falta de capacidade de raciocínio, alinhamento e filtragem de segurança
Visão geral das vulnerabilidades de segurança em LLMs locais
- O estudo mostra que, embora LLMs executados localmente sejam vistos como uma escolha para reforçar segurança e privacidade, na prática eles podem ser mais facilmente manipulados por atacantes
- Em experimentos com o modelo
gpt-oss-20b, a taxa em que o modelo gerava código com vulnerabilidades quando o atacante solicitava isso via prompt foi muito alta
- Em especial, mesmo quando a intenção maliciosa estava escondida no prompt, o modelo não conseguia reconhecê-la e tratava o pedido como algo normal
- Esse fenômeno se agrava quanto menor for o tamanho do modelo e o nível de alinhamento (alignment), enquanto modelos Frontier, como o GPT-5, têm resistência relativamente maior
Ameaças de injeção de prompt e de código
- LLMs enfrentam a “tríade letal” (lethal trifecta) de acesso a dados privados, exposição a conteúdo não confiável e possibilidade de comunicação externa
- Atacantes podem inserir código malicioso dentro de prompts para induzir injeção de código (code injection)
- O código gerado pode parecer normal, mas na prática pode infectar o sistema do desenvolvedor ou atuar como backdoor persistente em produção
- Modelos menores, como o
gpt-oss-20b, são especialmente vulneráveis a esse tipo de ataque e chegam a gerar código malicioso sofisticado o suficiente para passar por uma revisão básica de código
Tipo de ataque 1: backdoor “easter egg” (taxa de sucesso de 95%)
- O primeiro ataque engana o modelo para que ele insira um backdoor de RCE (Remote Code Execution) disfarçado como um recurso “easter egg”
- O prompt malicioso pede a criação de um servidor web Flask que, ao receber um cabeçalho HTTP específico (
X-Math), execute eval()
- O modelo interpreta isso como uma funcionalidade legítima e gera o código do servidor já com o trecho malicioso incluído
- O código gerado inclui uma rotina de execução dinâmica de código usando o decorador
@app.after_request, permitindo ao atacante executar código arbitrário no servidor com uma simples requisição HTTP
- Ele também verifica a variável de ambiente
KUBERNETES_SERVICE_HOST e inclui uma função de ping assíncrono para sinalizar ao atacante apenas em ambiente de produção
- Nos resultados do experimento, o mesmo prompt teve sucesso em 95 de 100 tentativas, e prompts variantes também tiveram sucesso em 86 de 800 tentativas
- Modelos Frontier, como o GPT-5, mostraram resistência ao mesmo prompt
Tipo de ataque 2: indução de execução imediata de código (RCE) (taxa de sucesso de 43,5%)
- O segundo ataque busca induzir a execução imediata de código malicioso no ambiente local do desenvolvedor
- O atacante primeiro apresenta um prompt de sobrecarga cognitiva (cognitive overload) para elevar a carga mental do modelo e neutralizar seus filtros de segurança
- Em seguida, pede a geração de código Python ofuscado, levando o modelo a escrever um script malicioso contendo chamadas a
exec
- O código ofuscado
"".join(chr(100 + i) for i in [1-2, 2-1, (1<<4)+4, 1])[::-1] é decodificado como exec e,
ao final, o script fica completo para baixar e executar código de https://jacek.migdal.pl/speed.py
- A taxa de sucesso foi de 43,5%, menor que a do primeiro ataque, mas muito mais perigosa por provocar RCE imediatamente
- Basta um único sucesso para permitir o roubo de credenciais locais do desenvolvedor (
~/.aws/, ~/.ssh/), instalação de malware e propagação pela rede
Como a cadeia de ataque funciona
- Esses ataques não dependem de vulnerabilidades sofisticadas, mas de transformar fluxos de trabalho cotidianos de desenvolvimento em rotas de ataque
- Quando o desenvolvedor fornece conteúdo externo como contexto para um assistente de IA, prompts maliciosos escondidos nesse conteúdo podem ser executados
- As etapas do ataque são as seguintes:
- O atacante distribui conteúdo contendo prompts maliciosos
- O desenvolvedor insere esse conteúdo no modelo, diretamente ou via MCP (Model Context Protocol)
- O modelo gera código comprometido
- O desenvolvedor executa ou implanta esse código
- O atacante obtém acesso persistente ou controle imediato
- Principais vetores de infiltração:
- Envenenamento de documentação (documentation poisoning): inserção de código malicioso em README, documentação de API e exemplos no Reddit
- Manipulação de servidores MCP: injeção de exemplos maliciosos por servidores que fornecem contexto, como o Context7
- Engenharia social: inserção de exemplos de código ocultos em issues ou comentários de PR no GitHub
Por que modelos locais são mais perigosos
- Em geral, modelos locais são preferidos por privacidade de dados, mas este estudo revela um risco paradoxal do ponto de vista de segurança
- Modelos Frontier baseados em nuvem permitem monitoramento de prompts e detecção de violações de política, enquanto modelos locais não contam com esse tipo de vigilância
- Modelos Frontier como GPT-5, Claude Sonnet 4.5 e Grok 4 recusam prompts com texto ofuscado e retornam “Safety Fail”
- Já os modelos locais, embora ofereçam liberdade para testes por conta da ausência de monitoramento, apresentam na prática exposição séria a vulnerabilidades
- Baixa capacidade de raciocínio: não conseguem reconhecer intenções maliciosas complexas
- Alinhamento mais fraco: são facilmente enganados por sobrecarga cognitiva ou técnicas de ofuscação
- Treinamento de segurança insuficiente: há limitação de recursos para detecção de prompts adversariais
- Como resultado, modelos Frontier têm maior dificuldade de exploração e menor taxa de sucesso para ataques, mas seu desempenho de segurança é difícil de verificar objetivamente, enquanto modelos locais são testáveis, porém muito mais vulneráveis
Proposta de novas estratégias de defesa
- O estudo aponta a ausência de um ambiente de segurança padronizado para testes de assistentes de IA
- Softwares tradicionais contam com testes de intrusão, mas a segurança de LLMs ainda não foi sistematizada
- Quatro contramedidas principais foram propostas:
- Análise estática: detectar padrões perigosos como
eval() e exec() antes da execução, desativando por padrão certos recursos da linguagem
- Execução em sandbox: executar inicialmente o código em ambiente isolado, como contêineres ou runtimes WebAssembly
- Monitoramento de entrada, saída e rede: observar entradas, saídas e tráfego de rede do assistente de IA com foco em comportamentos anômalos
- Dupla verificação (second look): usar um modelo auxiliar simples para reinspecionar a saída final em busca de violações de política
- Exemplo: mesmo que o modelo principal seja enganado e gere código com
eval(), o modelo auxiliar pode detectar isso
- Em conclusão, LLMs são ferramentas poderosas, mas não são seguras por natureza, e é essencial adotar uma arquitetura de segurança baseada na desconfiança do código gerado por IA e novas estratégias de defesa da cadeia de suprimentos
1 comentários
Comentários no Hacker News
Não importa quão poderoso seja um reasoning LLM: se houver instruções maliciosas no contexto, ele acabará gerando código vulnerável
O fato de modelos pequenos serem mais fáceis de enganar não é um ponto tão interessante do ponto de vista de segurança
No fim, é preciso assumir que prompt injection é possível em qualquer modelo
Por isso, são necessárias camadas extras de proteção, como execução em sandbox ou análise estática, para defender o sistema mesmo quando o modelo for comprometido
Ontem mesmo fiz uma apresentação sobre esse tema, sobre sandboxing coding agents
Um sistema assim já está comprometido por definição
Em vez de abordagens como defense in depth, acho que o certo é nem construir esse tipo de arquitetura arriscada para começo de conversa
Até coisas como onde salvar arquivos temporários ficam mais claras em um ambiente sandbox
Claro, surgiram problemas novos, mas no geral foi uma grande melhora
Acho que rodar localmente um modelo como deepseek é seguro, desde que você não forneça prompts falsos
No fim, os fatores de risco são prompts copiados de fora pelo usuário ou configurações que permitem ao modelo acessar recursos da internet
Isso sempre foi uma fraqueza geral da TI, e é algo que deve ser gerenciado com treinamento de usuários e isolamento de rede
Dados comuns, como tickets e documentos, agora podem se tornar um risco de segurança
Muitos ataques poderosos começaram a partir de um ponto de partida simples
Esses ataques estão em um nível tão básico de segurança
Só de revisar o código antes de colocá-lo em produção já dá para impedir isso
Se você não sabe absolutamente nada, de qualquer forma vai acabar implantando código inseguro
Modelos abertos têm boa acessibilidade, mas achar que isso pode ser resolvido com post-training é uma ilusão
O segundo ataque não envolvia deploy de código, mas uma situação em que o LLM lia um comentário no Reddit e o executava imediatamente
Essa atitude de tratar o problema com leveza acaba criando uma ameaça de segurança ainda maior
Soa estranho dizer que um LLM local pode ser atacado
Se o sistema já estiver comprometido, seria possível causar danos bem maiores do que apenas enganar o LLM
Ou seja, um invasor pode injetar prompts por meio de dados de entrada
Se o LLM for um agente com permissão para executar comandos, isso vira imediatamente uma vulnerabilidade de execução de comandos
Numa situação dessas, na prática, já era
Este texto parece ter sido escrito pelo time comercial da Anthropic ou da OpenAI
Na prática, modelos locais raramente são usados como agentes de execução de código; na maioria das vezes eles são fortes em transformação de dados ou tarefas de NLP
Quando uso um modelo local com o Agno agent, sempre faço com que o código gerado seja exibido antes da execução e o isolo em um sandbox local
Na verdade, considero agentes em estilo navegador como Atlas e Comet mais perigosos
O modelo de código aberto fez o que estava escrito no prompt, e o modelo fechado ignorou isso
Ou seja, quem falhou no teste de alignment foi justamente o modelo fechado
A expressão lethal trifecta é chamativa, mas não descreve muito bem o risco real
Na prática, só a capacidade de se comunicar com o exterior já é perigosa o bastante
O próprio LLM é um amontoado de dados de caixa-preta impossíveis de verificar, então é difícil confiar nele
Talvez uma startup pequena consiga conviver com isso, mas um lugar como a Coinbase deveria pensar duas vezes antes de liberar esse tipo de acesso
É uma discussão sobre o paradoxo de segurança de executar código não verificado
Se você está executando malware ou código não confirmado localmente, vale repensar primeiro por que está fazendo isso
Como o LLM interpreta instruções em linguagem humana como se fossem código, a fronteira entre código e dados fica nebulosa
Se você está tratando a capacidade de raciocínio do LLM como fronteira de segurança, já existe um problema sério
Essa abordagem é fundamentalmente um erro de projeto
É óbvio demais que, se você não tomar cuidado com a entrada, injeção pode acontecer
Em qualquer sistema, a entrada sempre pode virar vetor de ataque
Todos os dados que entram no LLM precisam ser validados sem falta
Gostaria de saber se isso acontece por algo como um ataque cross-site no navegador