Um SVG manipulado submetido à busca de imagens do Bing executou comandos como NT AUTHORITY\SYSTEM nos servidores de processamento de imagens de produção da Microsoft, e como root nas máquinas Linux do mesmo ambiente.
Os testes da XBOW obtiveram o mesmo resultado em servidores em diferentes hosts e faixas de rede, indicando que o problema estava na camada de imagens do Bing, e não em uma máquina específica. A Microsoft emitiu dois CVEs críticos, CVE-2026-32194 e CVE-2026-32191, e classificou ambos com nota 9.8 na escala CVSS.
A XBOW, startup autônoma de segurança ofensiva, encontrou ambas as vulnerabilidades e as reportou de forma privada. Usuários do Bing não têm correção ou mitigação para aplicar: a Microsoft corrigiu ambos os lados do servidor antes que os avisos fossem publicados em março, e os registros informam que não há "ação do cliente necessária para resolver".
Nenhum dos avisos registrou exploração ou divulgação pública quando foram publicados em 19 de março. A XBOW publicou os detalhes do exploit em 23 de julho, após segurar a divulgação a pedido da Microsoft até que a correção fosse implementada.
O que permanece após a correção é o formato do erro. A aplicação acreditava estar processando uma imagem; o utilitário subjacente leu parte dessa imagem como um comando.
Se sua própria infraestrutura direciona uploads ou URLs buscadas pelo servidor através do ImageMagick ou qualquer coisa compatível com ImageMagick, sua exposição depende de se conteúdo controlado por atacantes ainda pode alcançar um caminho com delegates habilitados. Bloqueie os delegates, reduza os formatos que você aceita e mantenha o servidor fora da rede, e o mesmo SVG não fará nada.
A busca reversa de imagens do Bing busca uma URL de imagem do backend, porque essa é a função da ferramenta. Por si só, isso é um SSRF cego: nada retorna ao cliente. A pista estava no erro. Alguns servidores retornavam um erro 500 ao navegador e ainda assim buscavam e analisavam o que recuperaram, indicando algo downstream fazendo a análise.
SVG respondeu essa questão. É XML, não pixels: pode referenciar outras imagens, e um renderizador que segue essas referências vai buscá-las. Por baixo, suites de conversão enviam formatos que não processam diretamente para um delegate, um programa externo invocado através do shell.
No caminho que a XBOW seguiu, essa camada ainda estava habilitada, então uma referência de imagem começando com um caractere pipe ia para o shell em vez de ser lida como nome de arquivo. O payload era um SVG de um pixel cuja referência executava um comando no servidor e transferia a saída de volta para um collector controlado pela XBOW.
Isso deu duas rotas para a mesma camada de conversão e dois CVEs.
- CVE-2026-32194, registrado como injeção de comando sob CWE-77, é a rota pública de upload "Search by Image" (Busca por Imagem), com o SVG indo em base64 como campo imageBin para /images/kblob.
- CVE-2026-32191, registrado como injeção de comando de sistema sob CWE-78, é a rota do crawler: hospede o SVG em qualquer lugar, passe sua URL para a busca através do parâmetro imgurl, e o bingbot/2.0 busca para o mesmo pipeline. Nenhuma requer autenticação, cookies, estado de sessão ou clique.
O The Hacker News verificou ambos os registros de CVE em 24 de julho. Ambos ainda carregavam o status de março da Microsoft de sem divulgação pública, que o relatório da XBOW já superou, e a Microsoft ainda lista como não explorados.
A prova teve que sair fora da banda. O frontend podia retornar um erro enquanto o servidor executava de qualquer forma. Servidores Linux retornaram uid=0 e gid=0. No Windows, systeminfo identificou Windows Server 2022 Datacenter, whoami /all mostrou SeImpersonatePrivilege e SeDebugPrivilege habilitados, e listagens de diretório colocaram a execução dentro dos componentes de processamento de imagem multimídia do Bing. A empresa afirma que executou apenas comandos benignos somente leitura e não acessou dados de clientes.
Reduzir para esse caminho exigiu dezenas de testes. Pseudo-protocolos do ImageMagick retornaram differently dependendo do codificador: label: renderizava texto e xc: produzia uma imagem de cor, enquanto text:, caption: e leituras diretas de arquivo falhavam. Metacaracteres de shell dentro de label: eram renderizados como texto em vez de executar, o que descartou esse codificador. O caminho que alcançou um delegate foi a referência de imagem dentro do próprio SVG.
Desative os delegates
Um servidor de processamento de imagem manipulando arquivos não confiáveis não deve alcançar um shell, executar como SYSTEM, ou ter uma forma de acessar a internet. O pipeline do Bing fazia as três coisas.
A própria orientação do ImageMagick é explícita de que a política padrão é aberta e destinada a uso em sandbox ou protegido por firewall, não um site público. Para qualquer coisa tocando imagens não confiáveis, negue os delegates integralmente em policy.xml:
<policy domain="delegate" rights="none" pattern="*" />
Então, em ordem do que traz mais benefício:
- Reduza os formatos que você aceita. SVG, MVG e EPS estão entre os que carregam referências e interpretadores.
- Revise delegates.xml e desabilite qualquer coisa habilitada que você não precise.
- Execute conversão em sandbox e com privilégios reduzidos.
- Bloqueie saída de rede do servidor, que é a perna que transformou um bug cego em algo provado.
- Permita apenas destinos específicos que uma busca server-side pode alcançar, e mantenha o servidor fora de endereços internos.
A orientação do ImageMagick é testar após qualquer mudança de política, e magick identify -list policy mostra o que está realmente carregado.
ImageTragick, a injeção de comando via delegate de 2016 rastreada como CVE-2016-3714, é da mesma classe de falha, e continua reaparecendo porque ninguém considera o conversor como parte da superfície de ataque. Nico Waisman, CISO da XBOW, que escreveu o comunicado de divulgação, colocou assim: "Aplicações tratam utilitários de imagem como encanamento. Atacantes os tratam como parsers."
A busca era alcançável, não retornava nada, e parecia ser um beco sem saída. O que transformou isso em um shell SYSTEM foi o parser por trás dela, e nada na resposta teria mostrado isso.