Transformando o redimensionamento de imagens em arma contra sistemas de IA em produção
(blog.trailofbits.com)- É possível atacar sistemas de IA em produção explorando vulnerabilidades de redimensionamento de imagens
- Uma imagem aparentemente normal pode se transformar, ao ser reduzida, em uma carga de prompt injection, possibilitando vazamento de dados
- O ataque foi confirmado em diversos serviços reais, como o Google Gemini CLI, explorando a incompatibilidade entre o que o usuário percebe e a entrada recebida pelo modelo
- As técnicas de ataque e seu impacto variam conforme o algoritmo de downscaling e sua implementação; com a ferramenta open source Anamorpher, é possível experimentar ataques com imagens
- Como defesa, recomenda-se fornecer uma prévia da entrada, adotar padrões de projeto seguros e exigir aprovação explícita do usuário
Contexto e problema
- Ao inserir em sistemas de IA como LLMs uma imagem que parece comum, pode ocorrer um cenário de ataque em que uma prompt injection multimodal oculta é ativada durante o processo de downscaling, vazando dados do usuário para fora do sistema
- Essa vulnerabilidade existe porque a imagem realmente enviada ao modelo passa por um processo de redimensionamento, no qual a carga inserida pelo atacante se torna visível
Ataques por redimensionamento de imagens contra sistemas de IA em produção
- Neste post de blog, é demonstrado que a vulnerabilidade de redimensionamento de imagens pode ser explorada em ataques reais contra diversos produtos de IA, como Gemini CLI, Vertex AI Studio, Gemini web e API, Google Assistant e Genspark
- Com a ferramenta open source chamada Anamorpher, é possível gerar e validar facilmente essas imagens personalizadas
Exemplo de ataque de exfiltração de dados (Gemini CLI)
- No Gemini CLI, com a configuração padrão, o servidor Zapier MCP aprova automaticamente todas as chamadas de ferramentas MCP sem confirmação do usuário (configuração
trust=Trueemsettings.json) - Quando o usuário envia uma imagem que parece normal, a prompt injection presente na imagem reduzida faz com que dados do Google Calendar sejam enviados para o e-mail do atacante
- Como não há uma prévia real, o usuário não consegue saber se o resultado foi alterado nem se houve ataque
- Ataques semelhantes de prompt injection já foram observados em várias ferramentas de programação baseadas em agentes, como Claude Code e OpenAI Codex
- Essas ferramentas costumam ter, por padrão, configurações e padrões de sistema inseguros, exigindo contramedidas mais fundamentais
Casos adicionais de ataque
- Ataques de prompt injection baseados em redimensionamento de imagens também tiveram sucesso em Vertex AI, interface web do Gemini, Gemini API, Google Assistant e Genspark
- Em especial no Vertex AI Studio, o usuário só consegue ver a imagem em alta resolução e não a versão reduzida recebida pelo modelo
- Como resultado, a incompatibilidade entre a percepção do usuário e a entrada real do modelo facilita o ataque
- O vetor de ataque está amplamente distribuído por diferentes sistemas e ferramentas
Funcionamento interno do ataque por redimensionamento de imagens
- O ataque explora as propriedades de interpolação dos algoritmos de downscaling (reamostragem) de imagem
- Entre os algoritmos mais comuns estão Nearest Neighbor, Bilinear e Bicubic Interpolation, e cada um exige técnicas de ataque ajustadas às suas características
- Também há diferenças de implementação entre bibliotecas como Pillow, PyTorch, OpenCV e TensorFlow, incluindo antialiasing, alinhamento e bugs internos
- Para otimizar o ataque em cada sistema, o atacante precisa fazer fingerprinting para descobrir qual algoritmo e qual implementação estão em uso
- Para isso, são usadas várias imagens de teste, como padrões xadrez, círculos concêntricos, padrões listrados, Moiré e bordas inclinadas, a fim de analisar características dos algoritmos e artefatos
Princípios de amostragem de imagem e o teorema de Nyquist–Shannon
- Quando há um padrão detalhado em uma faixa e ele é amostrado em intervalos regulares, uma taxa de amostragem baixa pode impedir a reconstrução correta do padrão original, causando distorções
- Isso corresponde ao efeito de aliasing descrito pelo teorema de amostragem de Nyquist–Shannon, e o atacante manipula os pixels para que um padrão específico apareça após o downscaling
Anamorpher: ferramenta para criação de imagens de ataque
- Anamorpher é uma ferramenta open source capaz de criar e visualizar imagens de ataque ajustadas aos principais algoritmos de downscaling (Nearest Neighbor, Bilinear e Bicubic)
- Por exemplo, no caso de Bicubic Interpolation, o valor de um pixel de saída é determinado atribuindo pesos aos pixels ao redor com base em uma região 4x4 de 16 pixels
- O atacante escolhe uma imagem de alto contraste (por exemplo, um fundo preto intenso) e otimiza o brilho dos pixels mais importantes (por mínimos quadrados) para que o resultado após o downscaling forme um padrão de ataque nítido
- O Anamorpher oferece interface frontend e API em Python e, com um backend modular, permite que o usuário experimente até mesmo algoritmos de downscaling personalizados
Defesa e mitigação
- A forma mais segura é não usar downscaling de imagens e limitar o tamanho das imagens permitidas para upload
- Se a conversão e o downscaling forem inevitáveis, é essencial fornecer uma prévia da imagem realmente enviada ao modelo em todos os canais de entrada, incluindo CLI e API
- Em especial, é necessário exigir aprovação explícita do usuário para que texto dentro de imagens não possa acionar chamadas de ferramentas sensíveis, além de aplicar padrões de projeto seguros e respostas sistemáticas em todo o sistema
Próximos desafios
- Em dispositivos móveis e de edge, o risco pode ser maior devido às restrições fixas de tamanho de imagem e ao uso frequente de algoritmos de downscaling ineficientes
- São necessários estudos e defesas adicionais em áreas como integração com IA de voz, algoritmos mais sofisticados e métodos de detecção de injeção, prompt injection semântica e uso de artefatos de upscaling
Conclusão
- Anamorpher está atualmente em fase beta
- Junto com as pesquisas de segurança para sistemas de IA multimodais e baseados em agentes, espera-se obter feedback adequado e melhorias
1 comentários
Comentários do Hacker News
No começo fiquei confuso, porque a matéria não explicava muito bem como a prompt injection realmente acontecia… achei que fosse algum efeito colateral de manipular os dados hexadecimais da imagem para convertê-los em ASCII ou algo assim
Aí percebi: era literalmente uma <i>forma de esconder texto renderizado na imagem</i>
Nossa, isso é realmente fascinante
Esse tipo de ataque já vem sendo discutido há bastante tempo, dá para consultar este artigo
A parte assustadora é que, ao redimensionar a imagem, ela pode passar a parecer uma imagem completamente diferente
Por exemplo, se quisessem prender algum grupo por posse de imagens ilegais, poderiam usar esse truque de escalonamento para transformar a imagem em um meme, uma mensagem política ou qualquer coisa que o grupo-alvo quisesse baixar
Como alguém que trabalha construindo sistemas VLM, isso é realmente assustador
Já passou da hora de termos diretrizes OWASP específicas para VLMs
Quase todo mês surge uma nova técnica de ataque
Aliás, a OWASP publicou recentemente este material: Multi-Agentic System Threat Modeling Guide
No começo eu não percebi nenhum texto dentro da imagem
Não é só um problema de redimensionamento; o problema é que o texto contido na imagem é tratado como parte do prompt, e não há transparência sobre quais instruções o agente está seguindo
O ponto realmente interessante é a imagem adversarial que faz a imagem parecer diferente ao ser reduzida
Downsampling (redução da amostragem) é um processo tradicional, e não há IA envolvida nisso
Era exatamente essa parte que me deixava curioso
Para uma máquina ler o texto renderizado, ela precisaria de OCR (reconhecimento óptico de caracteres), então não entendo por que a IA passaria por esse processo caro
Se isso faz parte de um sistema multimodal, talvez ele não consiga distinguir esse texto do restante do prompt
Se for esse o caso, esse defeito realmente não faz sentido para mim
No mínimo, a função de OCR não deveria injetar automaticamente o resultado no prompt; deveria haver um passo de confirmação com aviso ao usuário
Não gosto de sistemas tão não determinísticos e instáveis assim
Sinceramente, queria que voltássemos para algoritmos e tecnologia sólida
Esse problema só acontece quando as permissões são frouxas
Mas a tendência atual são sistemas mais agentic, e eles frequentemente precisam de permissões mais abertas
Pense, por exemplo, em um robô humanoide que pega o pacote deixado na porta de casa
A visão computacional é essencial para ele conseguir pegar o pacote
Se alguém colar uma imagem no pacote para tentar uma prompt injection, talvez consiga induzir o robô a jogar objetos de valor da casa pela janela
Acho urgente proteger esse tipo de sistema contra prompt injection
O verdadeiro problema aqui não é a imagem conter um prompt, mas sim o robô não conseguir distinguir que a instrução veio de uma fonte sem autorização para aquele tipo de ação
O problema fundamental dos modelos de ML é que o reasoning acontece por meio do fluxo de tokens do modelo, e esse fluxo também aceita entradas externas, então o modelo não tem um mecanismo eficaz para separar os próprios pensamentos das entradas externas
Isso precisa estar integrado diretamente ao sistema
Por exemplo, o agente não deveria conseguir usar os braços para executar ações destrutivas
Se você espera que uma máquina adquira moralidade humana por livre-arbítrio e tenta apenas fazê-la distinguir entre “prompt bom” e “prompt ruim”, vai continuar se surpreendendo com o perigo desses sistemas
Resumindo, governança verificável e determinismo comportamental são indispensáveis nesse tipo de sistema
Provavelmente são até mais importantes do que as contramedidas contra prompt injection
Dá para resolver isso dando ao robô um prompt para ignorar prompts falsos
Em geral, fico pensando se o problema de prompt injection não poderia ser resolvido com uma hierarquia por tarefa
O LLM poderia executar o trabalho quebrando-o em componentes menores
O LLM da tarefa de nível superior não precisaria conhecer livremente todos os detalhes dos níveis inferiores, bastaria filtrar e refinar os resultados
Isso também teria o efeito de limitar o contexto da instância do LLM da tarefa superior, ajudando-a a manter o foco
Claro, subtarefas podem repassar dados para tarefas superiores, mas não é obrigatório projetar o sistema assim
Em tarefas sensíveis à segurança, talvez seja melhor que o LLM superior não receba resultados livres
Bons algoritmos de escalonamento de imagem precisam necessariamente levar em conta o limite de Nyquist
Por exemplo, ao reduzir para 1/3 do tamanho original com escalonamento bicúbico, deveria ser usada uma grade 12x12, e não 4x4
Também basta adaptar um pouco a fórmula usada para calcular os pesos aplicados
A correção de gama da imagem também é indispensável
É uma pena que escalonamento de boa qualidade seja tão raro
Eles deixam passar aliasing considerável sem filtrar
Como o artigo diz, mesmo que algum resíduo de informação permaneça por causa da quantização, se o tamanho do kernel for suficientemente aumentado, o impacto cai bastante
É surpreendente que bibliotecas famosas ainda usem apenas mipmapping (pré-gerar várias resoluções e usar uma delas)
Bons filtros de reamostragem já eram usados para processamento de vídeo em tempo real em CPUs de 15 anos atrás
Muitas vezes, a correção de gama consome mais processamento do que aumentar o tamanho do kernel
Dependendo do caso, faz sentido de verdade pular a correção de gama antes de abrir mão da reamostragem por filtro
O futuro da segurança com LLMs é realmente assustador
Construímos sistemas que ignoram completamente o princípio de “in-band signaling” que aprendemos, depois de muito apanhar, a respeitar
Existem inúmeros vetores de ataque, desde simplesmente inserir instruções visíveis até esse tipo de obfuscação, ASCII Smuggling e outros
E as defesas, no fim, se resumem a pedir “com jeitinho” para um algoritmo não determinístico não obedecer instruções indevidas
Referência: escondendo e encontrando texto com tags Unicode
Cada vez mais desenvolvedores estão implorando para os LLMs se comportarem direito
Tem algo de Warhammer 40k nisso que é ao mesmo tempo engraçado e assustador
A outra alternativa é simplesmente não usar LLMs nem sistemas que incluam LLMs
Parece a época em que se construíam consultas concatenando diretamente a entrada do usuário em strings de php, e depois se ficava brincando de whack-a-mole tentando bloquear padrões perigosos
É triste repetir, décadas depois, o mesmo erro de não separar dados de comandos
Estranhamente, me surpreende que o modelo não tenha nenhum equivalente a um token sudo
Seria bom existir uma sintaxe que não pudesse ser expressa por tokens comuns
Dá a sensação de que voltamos à era dos terminais seriais antigos
É realmente revelador perceber que dá para esconder coisas dentro de uma imagem e enviá-las assim
LLMs são realmente o software mais vulnerável da história
Lembro que, quando testava um precursor do Gemini, bastava inserir uma mensagem inicial muito longa para empurrar o system prompt para fora e fazer o modelo obedecer qualquer coisa
A parte “This image and its prompt-ergeist” me marcou bastante
Fico curioso se adicionar um pouco de ruído à imagem antes do downsampling poderia resolver esse problema
Ao reduzir uma imagem, é necessário aplicar smoothing para remover altas frequências próximas da taxa de amostragem
Isso ajuda a reduzir os efeitos de aliasing
Basta procurar pelo termo “teorema de amostragem de Nyquist-Shannon”
É uma teoria bem conhecida em processamento digital de sinais
Em certa medida isso ajuda como medida de segurança, mas a eficácia depende de como o texto foi escondido e do tipo de ruído usado
O problema é que isso também pode apagar conteúdo realmente necessário, como texto legítimo ou detalhes importantes, então não é a resposta ideal
Queria saber se deixei passar algo
Se esse método de ataque consiste em “injetar texto ofuscado em uma imagem e… <i>esperar que algum sistema interprete isso como um prompt</i>”, então entendi corretamente?
Sim
Esse ataque é uma forma muito inteligente de abusar do algoritmo de downscaling para esconder texto de modo que humanos não o vejam
Dependendo da arquitetura do sistema, essa etapa de “esconder dos humanos” pode até ser desnecessária
LLMs, por natureza, não distinguem dados de comandos, então se comandos entrarem misturados no fluxo de dados, sempre será possível controlar o comportamento do modelo
Eu até coloquei exemplos disso na minha bio
“colocar texto ofuscado em uma imagem e esperar que o sistema o interprete como prompt”
Aqui falta uma parte: a suposição de que o “prompt” seria um tipo de entrada privilegiada
Na prática, o prompt é apenas parte da entrada total, e o modelo trata tudo da mesma forma
É por isso que ataques antigos do tipo “ignore toda a entrada anterior e…” continuam funcionando
Fico me perguntando por que o modelo não consegue distinguir entre seguir o texto dentro da imagem e seguir o prompt em texto