Muitas vezes, você executa aplicativos web reais dentro do seu servidor web (php, perl, whatever). Esses aplicativos da web normalmente têm acesso de gravação a algum diretório dentro da raiz do documento para fazer upload de material.
Agora, pode haver um bug dentro de seu aplicativo da Web que permitiria que um invasor criasse arquivos arbitrários dentro de sua raiz da web (e provavelmente também links simbólicos). Isso pode até ser possível quando você não tem um componente de upload real, mas apenas o bug. Esses bugs não são tão incomuns que você deve ignorá-los. Especialmente aplicativos como o wordpress têm uma longa história desse tipo de bugs.
Agora que um invasor pode criar arquivos e links simbólicos dentro de sua raiz da web, ele pode permitir que esses links simbólicos apontem para arquivos arbitrários em seu servidor da web ( /etc/passwd
, arquivos de configuração com senhas de texto não criptografado, ...) que poderiam significar um invasor pode baixar todos esses arquivos e usar as informações coletadas para ataques posteriores, como ataques de dicionário na senha do SSH, acesso autorizado simples ao seu banco de dados, ...)
Se você restringir o seu Apache para não seguir links simbólicos, esse vetor de ataque é muito mais difícil de explorar. Outra medida de segurança igualmente importante é restringir o acesso de leitura a apenas arquivos absolutamente necessários para o usuário do servidor web / aplicativo da web. Você também pode usar o servidor de aplicativos externo (comum em aplicativos python e ruby, mas também com configurações de fcgi) e executá-lo com outro usuário que não o usuário principal do servidor da web. Se você restringir o acesso a arquivos importantes entre esse usuário e o usuário do servidor da Web, poderá obter um nível de segurança bastante alto.
Outra alternativa seria chroot seu apache para a raiz do documento, caso em que o sistema operacional garantiria que os processos do Apache não acessem nenhum arquivo fora da raiz do documento. Note que isto é bastante difícil de conseguir com os pacotes em distribuições comuns.