Skip to main content

Como mitigar vulnerabilidades do ImageMagick no Node.js

Escrito por

6 de maio de 2016

0 minutos de leitura

Várias vulnerabilidades graves e exploradas com facilidade no ImageMagick foram divulgadas no início desta semana e já estão sendo exploradas em ataques reais. Como ainda não há uma correção oficial, criamos um pacote chamado imagemagick-safe que desativa os recursos vulneráveis e protege contra as explorações conhecidas.

Resumo

O ImageMagick é uma biblioteca e um binário muito populares para manipulação de imagens. Entre outros usos, ele costuma ser usado para processar conteúdo gerado por usuários, como imagens de avatar e fotos de produtos, ou para exibir imagens em canais sociais.

No início desta semana, várias vulnerabilidades graves e fáceis de explorar no ImageMagick foram divulgadas. Ainda não há uma correção oficial, mas é possível mitigar o problema desativando determinados recursos.

No Node.js, o ImageMagick é usado principalmente por meio do pacote npm imagemagick. Esse pacote não é atualizado há mais de 2 anos e, por isso, provavelmente não ajudará a resolver o problema.

Para ajudar a proteger quem usa o ImageMagick no Node.js, lançamos um pacote npm específico chamado imagemagick-safe, que desativa os recursos vulneráveis. Também enviamos um pull request com essa alteração para o repositório do imagemagick no GitHub, mas, como o repositório está inativo, achamos improvável que a alteração seja incorporada.

ImageTragick: contexto

As vulnerabilidades divulgadas merecem atenção especial por três motivos:

  1. Algumas são extremamente graves, permitindo que invasores executem comandos no servidor, exponham arquivos do servidor e muito mais.

  2. As vulnerabilidades são fáceis de explorar: basta um arquivo de imagem criado para esse fim e uma única requisição HTTP.

  3. Ainda não há uma correção oficial disponível.

  4. Há registros de exploração dessas vulnerabilidades em ataques reais.

Todo o incidente é chamado de ImageTragick. Você encontra mais detalhes sobre as vulnerabilidades no site dedicado, imagetragick.com.

Causa e mitigação

Com base nas informações disponíveis até agora, todas as vulnerabilidades estão relacionadas ao processamento de tipos específicos de arquivos de imagem e palavras-chave, como MVG, URL e HTTPS. Esses tipos de arquivo permitem ações internas (por exemplo, incluir outra imagem), mas o processamento dessas ações não é sanitizado adequadamente, o que possibilita a execução remota de comandos. Veja um exemplo de exploração, copiado do site oficial sobre as vulnerabilidades:

Exemplo de exploração.svg

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd";> 
<svg width="640px" height="480px" version="1.1" xmlns="http://www.w3.org/2000/svg"; xmlns:xlink= "http://www.w3.org/1999/xlink";> 
<image xlink:href="https://example.com/image.jpg"|ls "-la" 
x="0" y="0" height="640px" width="480px"/>

Exemplo de execução

$ convert exploit.mvg out.png
total 32
drwxr-xr-x 6 user group 204 Apr 29 23:08 .
drwxr-xr-x+ 232 user group 7888 Apr 30 10:37 ..

Para desativar o suporte a esses formatos e palavras-chave, edite o arquivo de configuração (opcional) policy.xml do ImageMagick e confira se ele inclui o conteúdo abaixo. Isso remove algumas funcionalidades, mas também corrige as vulnerabilidades. A edição da política não garante a proteção contra todas as explorações possíveis, mas os pesquisadores responsáveis pelas vulnerabilidades afirmam que ela bloqueia todas as explorações conhecidas até o momento.

<policymap>
  <policy domain="coder" rights="none" pattern="EPHEMERAL" />
  <policy domain="coder" rights="none" pattern="URL" />
  <policy domain="coder" rights="none" pattern="HTTPS" />
  <policy domain="coder" rights="none" pattern="MVG" />
  <policy domain="coder" rights="none" pattern="MSL" /> 
  <policy domain="coder" rights="none" pattern="TEXT" />
  <policy domain="coder" rights="none" pattern="SHOW" />
  <policy domain="coder" rights="none" pattern="WIN" />
  <policy domain="coder" rights="none" pattern="PLT" />
</policymap>

Pacote npm imagemagick-safe

Como o pacote principal imagemagick não está mais ativo, criamos um novo pacote chamado imagemagick-safe.

Esse pacote força o uso da política mencionada acima, desativando alguns recursos e eliminando as vulnerabilidades. Recomendamos usá-lo até que novos binários do ImageMagick sejam lançados e você confirme que seus sistemas foram atualizados.

Você também pode usar o ImageMagick pelo pacote gm. Estamos avaliando o envio de um pull request para ele também.

Se encontrar algum problema ou quiser compartilhar sua opinião sobre o pacote, fale conosco pelo e-mail support@snyk.io.

Comece a participar de desafios de Capture the Flag

Aprenda a resolver desafios de Capture the Flag assistindo sob demanda ao nosso workshop virtual introdutório.