Leitores como você ajudam a apoiar o MUO. Quando você faz uma compra usando links em nosso site, podemos ganhar uma comissão de afiliado. Consulte Mais informação.

Módulos de upload de arquivos são um dos elos mais fracos em aplicativos da web. Quaisquer erros cometidos, mesmo aqueles que você considera pequenos, podem fazer com que o controle do servidor caia diretamente nas mãos de um invasor cibernético. Por esse motivo, os desenvolvedores de software precisam conhecer os erros mais comuns e alguns métodos de ataque que podem ocorrer.

Então, o que é adulteração do lado do cliente? Como você pode combater isso para manter seus sites e seus usuários seguros?

O que é adulteração do lado do cliente?

A adulteração do lado do cliente é o conceito básico de ataques de aplicativos da Web como um todo. Simplificando, significa que você não pode mais confiar em nenhum dos dados que envia ao usuário. Além disso, a adulteração do lado do cliente é um dos fundamentos do desenvolvimento seguro de aplicativos. Se você examinar o módulo de upload de arquivo com o qual está lidando e considerar a adulteração do lado do cliente, os dados nos quais você não pode confiar incluem:

  • O nome do arquivo carregado.
  • O tipo de conteúdo do arquivo carregado.

Esses dois itens são onde você tem a oportunidade de colocar na lista de permissões como desenvolvedor de software. Os dados de nome do arquivo carregado podem conter qualquer coisa com adulteração do lado do cliente. Com os dados do tipo de conteúdo do arquivo carregado, mesmo que o invasor esteja carregando um arquivo .exe, esse arquivo pode aparecer como uma imagem/jpeg no sistema.

Extensão de arquivo e lista branca

Ao desenvolver módulos de upload de arquivos, a primeira coisa a fazer é o processo de lista branca para a extensão do arquivo. Por exemplo, um usuário deseja fazer upload de um arquivo chamado "muo.jpeg". Você deve certificar-se de que esta extensão de arquivo que o usuário deseja enviar é .jpeg. Para isso, o sistema deve verificar o arquivo carregado e ver se é uma das extensões de arquivo permitidas. Para entender como você pode fazer isso, examine o seguinte código PHP simples:

$file_parts = pathinfo($filename);
trocar($file_parts['extensão'])
{
caso "jpg":
quebrar;

caso "bastão": // Ou exe, dll, so, etc.
quebrar;

caso "":
casoNULO: // Sem extensão de arquivo
quebrar;
}

Você pode fazer isso com um bloco de código semelhante ao acima ou pode usar as classes e funções fornecidas pela estrutura que está usando.

Tenha cuidado para não criar dados de extensão de arquivo analisando o nome do arquivo de acordo com o caractere de ponto (.), pois o invasor pode ignorar essa etapa de verificação com um nome de arquivo como "muo.jpeg.php".

O que são informações de tipo de conteúdo?

As informações de tipo de conteúdo são informações enviadas na solicitação HTTP para cada upload de arquivo. O navegador de internet detecta essas informações e as adiciona à solicitação enviada. O invasor pode tentar alterar as informações com adulteração do lado do cliente e ignorar as validações do lado do servidor. Nesta fase, os desenvolvedores precisam de um mecanismo de controle para fazer validações sobre as informações do Content-Type. Isso por si só não será suficiente; ainda assim, é uma questão importante para os desenvolvedores prestarem atenção.

Digamos que você codifique um mecanismo para verificar a extensão do arquivo corretamente e aceite apenas arquivos com a extensão .jpeg. Além desse mecanismo de precaução, você pode verificar as informações do tipo de conteúdo apenas em caso e aceitar apenas arquivos com informações de imagem/jpeg, um nível extra de proteção contra ataques cibernéticos

Arquivos Flash SWF e Etapas de Ataque

A extensão do arquivo e os dados do tipo de conteúdo não significam nada para os navegadores da Internet que suportam plug-ins como o Adobe Flash Player. Embora o suporte para esse player não esteja mais disponível, ainda é possível instalar esses arquivos relacionados em muitos sistemas, mesmo que o Flash continue sendo um risco de segurança. Em um sistema que não tomou os devidos cuidados, é possível chamar um arquivo Flash com o tag, independente de sua extensão. Isso causará outro sério problema de segurança.

Para agir, os desenvolvedores precisam conhecer os caminhos que os cibercriminosos podem seguir. Veja como isso pode acontecer:

  1. O invasor mal-intencionado carrega um SWF (um formato de arquivo Adobe Flash) chamado "image.jpeg" para o site de destino. Durante o processo de upload, é confirmado na verificação da lista branca que o arquivo carregado pelo invasor possui uma extensão .jpeg. A verificação de tipo de conteúdo é ignorada com adulteração do lado do cliente. Imagine que este arquivo, carregado pelo agente da ameaça, vá para "www (ponto) target-site (dot) com/images/images.jpeg".
  2. Digamos que o invasor tenha um site chamado atacante (ponto) com. O invasor chama o arquivo image.jpeg carregado no site de destino neste site, usando o tag com a atribuição do tipo application/x-shockwave-flash.
  3. Um usuário inocente faz login no invasor (ponto) com. Esse site chama o arquivo SWF em www (ponto) target-site (ponto) com/images/image.jpeg e executa os comandos dados ao SWF.
  4. Com isso, o ciberatacante pode criar ações de solicitação HTTP para o endereço do site de destino (ponto) sem que os usuários normais percebam. Com essas solicitações, o invasor usará a sessão do usuário inocente e ignorará o cheque CSRF.

Para entender esse cenário de ataque com mais clareza, considere o seguinte código no HTML conteúdo enviado ao usuário pelo invasor (ponto) com:

estilo="altura: 1px; largura: 1px;" dados="www.target-site.com/images/image.jpeg" tipo="aplicativo/x-shockwave-flash" allowscriptaccess="sempre" flashvars="c=ler&u=algo"

Uma das melhores soluções é acessar os arquivos carregados com upload de arquivo via um subdomínio diferente. No cenário mencionado acima, você pode acessar arquivos estáticos não do mesmo domínio, mas de um subdomínio diferente da seguinte forma: "http (dois pontos)//file.target-site (dot) com/images/image.jpeg".

Outra solução é adicionar Disposição de conteúdo: anexo informações para a resposta HTTP quando você recebe uma solicitação de acesso aos arquivos que deseja carregar.

Tome precauções para vulnerabilidades de upload de arquivos

Qualquer upload de arquivo que os usuários possam fazer para um site é perigoso, portanto, esse é um dos problemas aos quais os desenvolvedores devem prestar mais atenção. Se os invasores descobrirem tal vulnerabilidade, eles podem abrir um shell dentro do site e explorar facilmente as informações no servidor. É de vital importância controlar todos os arquivos carregados pelos usuários, aplicar métodos de lista branca e ocultar o local do diretório carregado, se possível.

E, claro, há muitos outros passos adicionais que você deve tomar para proteger seu site, mesmo se você tomar todas as precauções recomendadas para fazer upload de módulos de arquivo. O uso de cabeçalhos de segurança HTTP é uma dessas etapas que você pode executar.