CVE-2016-3714
Corrija agora. Ela está sob exploração confirmada pelo CISA e tem exploit funcional público.
Apply mitigations per vendor instructions or discontinue use of the product if mitigations are unavailable.
Resumo
ImageTragick é a falha de injeção de comando shell em múltiplos coders (parsers de formato) do ImageMagick, explorável ao processar uma imagem forjada — inclusive um arquivo com extensão/magic bytes de PNG ou JPEG que na verdade é um script SVG/MVG/MSL malicioso. Qualquer serviço que redimensione, gere thumbnail ou converta imagens enviadas por usuários usando ImageMagick (direto ou via bindings como PHP imagick, Ruby rmagick/paperclip, node-imagemagick) está potencialmente exposto a execução remota de código não autenticada.
Detalhamento técnico
O ImageMagick processa certos formatos delegando o trabalho a programas externos (wget, curl, ghostscript, etc.) através de um mecanismo chamado 'delegate', configurado em delegates.xml. A chamada é montada como uma string de comando executada via system(), substituindo parâmetros como %M (que carrega valores derivados do conteúdo do arquivo de entrada, por exemplo uma URL) diretamente na linha de comando. O CWE associado é CWE-20 (Improper Input Validation): o %M não é filtrado contra metacaracteres de shell.
Um exemplo concreto documentado pela Red Hat: o delegate padrão para HTTPS executa algo como wget -q -O "%o" "https:%M". Se o atacante controla o valor que vira %M — por exemplo, o link dentro de um arquivo MVG ou SVG —, pode inserir um caractere de pipe (|) seguido de um comando, e esse comando é executado pelo shell junto com o wget/curl. Os coders listados na descrição oficial (EPHEMERAL, HTTPS, MVG, MSL, TEXT, SHOW, WIN, PLT) são todos pontos onde dados do arquivo de entrada alimentam, direta ou indiretamente, uma invocação de delegate ou de renderização vulnerável ao mesmo padrão de injeção.
O vetor de entrada real quase sempre é um arquivo de imagem cujo conteúdo (não a extensão) determina qual coder o ImageMagick usa — o motor identifica o tipo pelos magic bytes internos, não pela extensão do arquivo enviado. Isso permite disfarçar um payload MVG/SVG como se fosse um .png ou .jpg comum, contornando validações ingênuas de extensão.
Como é explorada
O vetor típico é upload de imagem em aplicação web: qualquer funcionalidade que aceite upload de arquivo e chame ImageMagick (via CLI convert/identify, ou bindings de linguagem) para gerar thumbnail, extrair metadados ou reprocessar a imagem é candidata. O atacante não precisa de autenticação — só precisa que o arquivo malicioso chegue ao pipeline de processamento de imagem, o que muitas vezes é um formulário público de upload de avatar, anexo ou documento.
A exploração é considerada trivial pelos próprios divulgadores (post original no oss-security de Ryan Huber classifica o exploit como 'trivial') e não exige acesso à rede além do canal normal de upload da aplicação, nem configuração incomum — a configuração vulnerável era o padrão de fábrica em várias distribuições (delegates.xml com HTTPS, MVG, MSL habilitados). O resultado final é execução arbitrária de comando no contexto do usuário/processo que invoca o ImageMagick (não necessariamente root, mas em muitos deployments de aplicação web isso já é suficiente para comprometer o host ou pivotar).
Há exploração ativa confirmada: a CISA lista a CVE no catálogo KEV, o KB CERT/CC (VU#250519) registra que, segundo o site ImageTragick, a falha já estava sendo explorada in the wild antes mesmo da publicação pública completa dos detalhes, e existe módulo Metasploit (imagemagick_delegate) cobrindo tanto o vetor de delegate quanto uma variante que abusa de um bypass do -dSAFER do Ghostscript (relacionado à CVE-2016-7976) para RCE via delegate PostScript.
Versões
Como se proteger
A correção do fornecedor são as versões ImageMagick 6.9.3-10 e 7.0.1-1 — atualizar é a solução definitiva. Segundo o CERT/CC, os patches iniciais disponíveis no momento da divulgação eram considerados incompletos, então mesmo depois de atualizar vale acompanhar avisos de distribuição (openSUSE, Red Hat, Debian etc.) por correções subsequentes relacionadas à mesma família ImageTragick.
Se atualizar não for viável de imediato, o paliativo real e documentado é editar o policy.xml do ImageMagick (tipicamente em /etc/ImageMagick/) para desabilitar os coders vulneráveis, adicionando entradas para EPHEMERAL, HTTPS, HTTP, URL, FTP, MVG, MSL, TEXT/LABEL, e também uma política de path para bloquear leitura de arquivos externos (pattern="@*"). Esse controle reduz a superfície mas não é garantia total contra todos os vetores — o próprio autor do aviso original no oss-security afirma que a mitigação é eficaz contra as amostras de exploit conhecidas na época, sem garantir cobertura de todos os vetores possíveis. Para RHEL 5 (sem correção planejada, marcado 'Will Not Fix'), a alternativa é remover/renomear os módulos coder vulneráveis (mvg.so, msl.so, label.so) no diretório de módulos.
O que NÃO funciona como mitigação suficiente isoladamente: apenas verificar a extensão do arquivo enviado. O ImageMagick identifica o formato pelos magic bytes internos do conteúdo, não pela extensão — um arquivo .png pode conter na prática um script MVG/SVG malicioso. A verificação de magic bytes no início do arquivo (antes de entregá-lo ao ImageMagick) é recomendada pelos próprios divulgadores como camada complementar, mas deve ser combinada com o policy.xml, não usada isoladamente.
Como detectar
Em logs de aplicação, procure por uploads de imagem cujo conteúdo real (primeiros bytes) não corresponda à extensão declarada ou ao Content-Type esperado — indício de um MVG/SVG/MSL disfarçado de PNG/JPEG. Em logs de sistema ou EDR, processos filhos inesperados gerados a partir do binário convert/identify/mogrify do ImageMagick (por exemplo, um shell, wget/curl com argumentos anômalos, ou comandos arbitrários) são o sinal mais direto de exploração bem-sucedida via delegate.
Não há uma assinatura de rede única e confiável, porque o payload injetado varia livremente (qualquer metacaractere de shell dentro de um campo de URL/filename em um arquivo MVG/SVG/MSL) — a ausência de padrão fixo de payload limita a eficácia de assinaturas estáticas em WAF ou IDS baseadas em string; monitorar comportamento de processo no host onde o ImageMagick roda é mais confiável do que inspecionar o tráfego de upload.