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: Pickle Serialized Sessions

Abstract
As sessões serializadas pelo Pickle podem levar à execução remota de códigos se os atacantes puderem controlar os dados da sessão.
Explanation
Caso as sessões baseadas em cookies forem utilizadas e a SECRET_KEY vazar, um invasor será capaz de armazenar dados arbitrários no cookie de sessão, o qual será desserializado no servidor, levando à execução do código arbitrário.

Se as sessões baseadas em cookie forem utilizadas, tome um cuidado extra para se certificar de que a chave secreta seja sempre mantida totalmente em segredo, uma vez que qualquer sistema pode ser acessado remotamente.

Exemplo 1: Este método de visualização permite a um invasor roubar o SECRET_KEY se estiver codificado no arquivo de configuração settings.py:


...
def some_view_method(request):
url = request.GET['url']
if "http://" in url:
content = urllib.urlopen(url)
return HttpResponse(content)
...


O método Example 1 verifica se o parâmetro url é uma URL válida ao verificar se "http://" está presente na URL. Um invasor mal-intencionado pode enviar a seguinte URL para deixar vazar o arquivo de configuração settings.py que pode conter a SECRET_KEY:


file://proc/self/cwd/app/settings.py#http://


Observação: "/proc/self/cwd" em sistemas UNIX aponta para o diretório de trabalho do processo. Isso permite que os atacantes façam referência a arquivos sem saber a localização exata deles.
References
[1] Django Foundation Session serialization
[2] Balda Python web frameworks and pickles
[3] Standards Mapping - General Data Protection Regulation (GDPR) Access Violation
[4] Standards Mapping - OWASP Mobile 2024 M4 Insufficient Input/Output Validation
[5] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
desc.structural.python.django_bad_practices_pickle_serialized_sessions