계: Security Features

소프트웨어 보안은 보안 소프트웨어가 아닙니다. 여기서는 인증, 액세스 제어, 기밀성, 암호화, 권한 관리 등의 항목에 대해 설명합니다.

Django Bad Practices: Pickle Serialized Sessions

Abstract
Pickle을 통해 세션을 직렬화하면 공격자가 세션 데이터를 제어할 수 있는 경우 원격 코드 실행이 발생할 수 있습니다.
Explanation
쿠키 기반 세션을 사용하는 상황에서 SECRET_KEY가 누출되면 공격자는 세션 쿠키에 임의의 데이터를 저장했다가 나중에 서버에서 역직렬화하여 임의의 코드가 실행되도록 할 수 있습니다.

쿠키 기반 세션을 사용하는 경우에는 원격으로 접근할 수도 있는 시스템과 관련하여 암호 키의 보안이 항상 완벽한 상태로 유지되도록 각별히 유의해야 합니다.

예제 1: 다음 보기 메서드에서 SECRET_KEYsettings.py 구성 파일에 하드코드되어 있는 경우 공격자가 훔칠 수 있습니다.


...
def some_view_method(request):
url = request.GET['url']
if "http://" in url:
content = urllib.urlopen(url)
return HttpResponse(content)
...
Example 1의 메서드에서는 URL에 “http://”가 있는지 확인하는 방식으로 url 매개 변수가 유효한 URL임을 확인합니다. 악의적인 공격자는 다음과 같은 URL을 보내 SECRET_KEY가 포함될 수 있는 settings.py 구성 파일을 누출시킬 수 있습니다.


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


참조: UNIX 시스템의 "/proc/self/cwd"는 프로세스 작업 디렉터리를 가리킵니다. 이를 통해 공격자는 정확한 위치를 몰라도 파일을 참조할 수 있습니다.
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