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 "*" 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