it-swarm-pt.tech

Explorações ou outros riscos de segurança com o upload de SVG?

Eu tenho um site, onde as pessoas podem fazer upload de gráficos, você pode pensar nele como um hoster de imagens ou um fórum para fotos.

Agora, permito o upload de gráficos rasterizados para um determinado tamanho, mas ainda não há gráficos vetoriais. Gostaria de permitir o upload de SVG também, mas há duas preocupações em minha cabeça:

  1. Um SVG pode ser construído de tal maneira que, ao ler metadados, o servidor não responda. e poderia ser usado como ataque de negação de serviço no servidor?
  2. Um SVG poderia ser construído de tal maneira que, ao renderizar o SVG no cliente, ele não respondesse e potencialmente causasse a falha de todos os navegadores do meu site?

Além disso, seria uma boa prática gerar um PNG pequeno (200x200px) para uma miniatura ou é melhor manipular o próprio SVG com um fator de zoom ou algo assim?

Caso essas explorações SVG sejam possíveis, como posso me proteger contra elas?

27
polemon

Um SVG pode ser construído de tal maneira que, ao ler metadados, o servidor não responda. e poderia ser usado como ataque de negação de serviço no servidor?

O que você quer dizer com metadados? Se você está atrás de largura e altura, teria que analisar os arquivos SVG pelo menos parcialmente para obtê-los; não há atalho para ler alguns bytes do cabeçalho, como ocorre com muitos formatos de bitmap. Isso traz os riscos usuais da análise de XML, como:

  • ataques de inclusão de entidade externa/subconjunto de DTD contra arquivos remotos, recursos sensíveis à rede local, arquivos sensíveis à máquina local e arquivos de dispositivo
  • bombas de expansão de entidades aninhadas
  • estruturas de tags aninhadas patologicamente podem atingir limites de recurso de recursão

como precaução padrão, você desabilitaria todo o processamento DTD, XInclude, XSL, XSI e resolução de entidade.

Um SVG poderia ser construído de tal maneira que, ao renderizar o SVG no cliente, ele não respondesse e potencialmente causasse a falha de todos os navegadores do meu site?

Possivelmente, mas é o mais possível que poderia acontecer com um formato de bitmap. Veja, por exemplo, as vulnerabilidades corrompidas dos arquivos PNG há um tempo atrás.

O que mais preocupa os arquivos SVG é que eles podem incluir JavaScript, que funcionará no contexto de segurança do site de hospedagem, para que você tenha que se preocupar com scripts entre sites.

Na verdade, todos os tipos de arquivos carregados são vulneráveis ​​a isso, embora não de maneira direta e fácil de explorar. Em alguns casos, os navegadores (principalmente o IE) os detectam e, se virem coisas que parecem tags, poderão reinterpretá-las como HTML, incluindo JavaScript. Além disso, existem alguns problemas ao tratar os arquivos enviados como Java applets e arquivos de políticas do Flash.

A atenuação padrão para todos esses problemas é fornecer recursos não confiáveis, seja bitmap, SVG ou qualquer outra coisa, de um domínio diferente para o site principal: um domínio que não possui informações confidenciais de sessão (cookie/autenticação) e não possui capacidade para script no domínio do site principal.

Além disso, seria uma boa prática gerar um PNG pequeno (200x200px) para uma miniatura ou é melhor manipular o próprio SVG com um fator de zoom ou algo assim?

Isso seria um toque agradável, mas você teria que arrastar algumas dependências para renderizar em bitmap, por exemplo, Batik, se você estiver usando Java. A introdução natural de uma nova biblioteca complexa aumenta a superfície de ataque; pode ser uma boa ideia executar o miniaturizador como uma tarefa separada do daemon de baixa prioridade e conta de baixo privilégio.

19
bobince

Qualquer ação que seu aplicativo Web execute é potencialmente perigosa. O upload de arquivos é um dos recursos mais perigosos, pois pode levar à execução remota de código.

O problema com o upload de qualquer arquivo para o servidor é que ele pode não ser realmente o arquivo que você deseja. Não sei qual plataforma ou metodologia você está usando, mas enganei os sistemas de upload de arquivos muitas vezes para fazer upload de um arquivo .php ou .asp e executá-lo. Não parece que você está processando o SVG no lado do servidor (isso seria meio estranho de qualquer maneira); portanto, o XML bruto no SVG realmente não importa para o servidor.

Em termos de # 2, sim vulnerabilidades de corrupção de memória svg são comuns e estou confiante de que existem mais. Mas, novamente, isso será verdade para praticamente qualquer arquivo que você enviar. As imagens SVG são um pouco mais recentes e a maior parte das vulnerabilidades nas imagens SVG foi encontrada em 2011.

O SVG Masking é usado para ocultar iframes em um ataque de clickjacking . Mas não acho que esse vetor de ataque se aplique ao seu sistema de upload de svg.

10
rook