Como evitar vulnerabilidades de upload de arquivos

As unidades de upload de arquivos estão entre os elos mais fracos em aplicativos da web. Cometer qualquer erro, mesmo aqueles que você considere pequenos, pode levar à possibilidade de o controle direto do servidor cair nas mãos do hacker. Por esse motivo, um desenvolvedor de software precisa conhecer os erros mais comuns e alguns dos métodos de ataque que podem ocorrer.

Então, o que é manipulação do cliente? Como você pode combatê-lo para manter seus sites e usuários seguros? Verificar Como seu servidor pode ser hackeado: veja como.

Como evitar vulnerabilidades de upload de arquivos - proteção

O que é manipulação do cliente?

A manipulação do lado do cliente é o conceito central dos 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 manipulação do lado do cliente é uma das bases para o desenvolvimento de aplicativos seguros. Se você verificar seu uploader de arquivos e considerar a adulteração do lado do cliente, os dados nos quais você não confia incluem:

  1. O nome do arquivo carregado.
  2. O tipo de conteúdo do arquivo carregado.

É aqui que você tem a oportunidade de entrar na lista de permissões como desenvolvedor de software. Os dados do nome do arquivo carregado podem conter qualquer coisa com manipulação do lado do cliente. Com os dados do tipo de conteúdo do arquivo carregado, mesmo que o invasor carregue o arquivo. exe, este arquivo pode aparecer como uma imagem /jpeg no sistema.

Formato de arquivo e lista de permissões

Como evitar vulnerabilidades de upload de arquivos - proteção

Ao desenvolver módulos de upload de arquivo, a primeira coisa a fazer é adicionar o formato de arquivo à lista de permissões. Por exemplo, o usuário deseja fazer upload de um arquivo chamado “muo.jpeg”. Você deve garantir que o formato de arquivo que o usuário deseja carregar seja .jpeg. Para isso, o sistema deve verificar o arquivo carregado e ver se é um dos formatos de arquivo permitidos. Para entender como fazer isso, examine o seguinte código PHP simples:

$file_parts = pathinfo($filename);
switch($file_parts[‘extension’])
{
case “jpg”:
break;

case “bat”: // Or exe, dll, so, etc.
break;

case “”:
case NULL: // No file extension
break;
}

Você pode fazer isso com um bloco de código semelhante ao acima ou pode usar classes e funções fornecidas pelo seu framework.

Atenção: Cuidado ao gerar dados de formato de arquivo analisando o nome do arquivo de acordo com o caractere ponto (.), porque um 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 fazem parte das informações enviadas na solicitação HTTP para cada arquivo carregado. O navegador da Internet detecta essas informações e as adiciona à solicitação enviada. Um invasor pode tentar alterar as informações por meio da manipulação do lado do cliente e ignorando as verificações do lado do servidor. Neste ponto, o desenvolvedor precisa de um mecanismo de controle para realizar verificações de validação de informações de tipo de conteúdo. Isso por si só não será suficiente. Ainda assim, é importante que o desenvolvedor esteja atento a isso.

Digamos que você codifique um mecanismo para verificar se o arquivo está formatado corretamente e só aceita arquivos com o formato . Jpeg. Além desse mecanismo de precaução, você pode verificar as informações do tipo de conteúdo somente se e aceitar apenas arquivos que contenham informações de imagem /jpeg, que é uma camada extra de proteção contra ataques cibernéticos. Verificar O que é controle de acesso e por que você precisa dele?

Arquivos Flash SWF e etapas de ataque

Os dados de formato de arquivo e tipo de conteúdo não têm significado para navegadores de Internet que suportam plug-ins como o Adobe Flash Player. Embora o suporte para este player não esteja mais disponível, esses arquivos relacionados ainda podem ser instalados em muitos sistemas, embora o Flash ainda seja um risco à segurança. Em um sistema que não tomou os devidos cuidados, é possível chamar um arquivo Flash com uma tag , independentemente do seu formato. Isso levará a outro sério problema de segurança.

Como evitar vulnerabilidades de upload de arquivos - proteção

Para agir, o desenvolvedor precisa saber quais caminhos os cibercriminosos podem seguir. Veja como isso pode acontecer:

  • O invasor carrega um arquivo SWF (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 um . Jpeg. A verificação do tipo de conteúdo é ignorada pela manipulação no lado do cliente. Imagine que este arquivo, carregado pelo invasor, vá para:
“www(dot)target-site(dot)com/images/images.jpeg”
  • Digamos que o invasor tenha um site chamado atacante(ponto)com. O invasor chama o arquivo image.jpeg carregado no site de destino no site do invasor, usando a tag com tipo de conjunto aplicativo / x-shockwave-flash.
  • Um usuário desavisado faz login em um site atacante(ponto)com. Este site chama o arquivo SWF em www(dot)targetsite(dot)com/images/image.jpeg e executa os comandos dados ao SWF.
  • Com essas etapas, o invasor cibernético pode criar ações de solicitação HTTP para o endereço do site site-alvo(ponto)com despercebido pelos usuários comuns. Com essas solicitações, o invasor usará a sessão do usuário inocente e ignorará a verificação do CSRF.

Para entender esse cenário de ataque com mais clareza, considere o seguinte código em Conteúdo HTML Enviado ao usuário por atacante(ponto)com:

style=”height:1px;width:1px;” data=”www.target-site.com/images/image.jpeg" type=”application/x-shockwave-flash” allowscriptaccess=”always” flashvars=”c=read&u=somethings”

Uma das melhores soluções é acessar os arquivos carregados com o arquivo carregado por meio de um subdomínio diferente. No cenário acima, você pode acessar os 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".

A outra solução é adicionar informações Disposição de conteúdo: anexo à resposta HTTP quando você recebe uma solicitação para acessar os arquivos que deseja carregar. Verificar Vantagens e desvantagens de usar armazenamento em nuvem para trabalho remoto.

Tome precauções contra 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 um invasor descobrir tal vulnerabilidade, ele pode abrir uma camada dentro do site e explorar facilmente as informações no servidor. É muito importante controlar todos os arquivos carregados pelos usuários, aplicar métodos de lista branca e ocultar a localização do diretório para o qual os arquivos são carregados, 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 upload de arquivos. O uso de cabeçalhos de segurança HTTP é uma dessas etapas que você pode executar. Você pode ver agora O que é segurança de contêiner e por que você precisa dela?

A fonte
Ir para o botão superior