Reino: Security Features
Segurança de software não é o mesmo que software de segurança. Aqui, estamos interessados em tópicos como autenticação, controle de acesso, confidencialidade, criptografia e gestão de privilégios.
Django Bad Practices: Overly Broad Host Header Verification
Abstract
Não validar o cabeçalho
Host
pode permitir que um invasor envie um valor Host
falso que pode ser utilizado para solicitação intersite forjada, ataques de envenenamento de cache e envenenamento de links em emails.Explanation
As configurações de aplicativos Django especificam "
Exemplo 1: Um aplicativo oferece um recurso de redefinição de senha, com o qual os usuários podem enviar algum tipo de valor único para identificar-se (por exemplo, um endereço de email) e, em seguida, um email de redefinição de senha será enviado com um link para uma página a fim de criar uma nova senha. O link enviado ao usuário pode ser criado utilizando o valor
Um invasor pode tentar redefinir a senha de uma vítima ao enviar um valor de cabeçalho
*
" como uma entrada na configuração ALLOWED_HOSTS
. Essa configuração é utilizada por django.http.HttpRequest.get_host()
para validar o cabeçalho Host
. Um valor de "*
" permitirá qualquer host no cabeçalho Host
. Um invasor pode usar isso em ataques de envenenamento de cache ou para envenenar links em e-mails.Exemplo 1: Um aplicativo oferece um recurso de redefinição de senha, com o qual os usuários podem enviar algum tipo de valor único para identificar-se (por exemplo, um endereço de email) e, em seguida, um email de redefinição de senha será enviado com um link para uma página a fim de criar uma nova senha. O link enviado ao usuário pode ser criado utilizando o valor
Host
para referenciar o site que serve como um recurso de redefinição de senha a fim de evitar URLs codificadas. Por exemplo:
...
def reset_password(request):
url = "http://%s/new_password/?token=%s" % (request.get_host(), generate_token())
send_email(reset_link=url)
redirect("home")
...
Um invasor pode tentar redefinir a senha de uma vítima ao enviar um valor de cabeçalho
Host
falso apontando para um servidor controlado por ele ao e-mail da vítima. A vítima receberá um email com um link para o sistema de redefinição de senha, e se ela decidir visitar o link, visitará o site controlado pelo invasor, que servirá um formulário falso para recolher as credenciais da vítima.References
[1] Django Foundation Host header validation
[2] Django Foundation ALLOWED_HOSTS
[3] Standards Mapping - General Data Protection Regulation (GDPR) Access Violation
[4] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective C.3.1 - Web Software Attack Mitigation
[5] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
desc.structural.python.django_bad_practices_overly_broad_host_header_verification