界: Security Features

ソフトウェアのセキュリティは、セキュリティ ソフトウェアではありません。ここでは、認証、アクセス制御、機密性、暗号化、権限管理などのトピックについて説明します。

Django Bad Practices: Pickle Serialized Sessions

Abstract
セッションを Pickle でシリアライズすると、攻撃者がセッション データを操れる場合、リモートでコードを実行される可能性があります。
Explanation
cookie 基準のセッションが使用されているとき、SECRET_KEY が漏洩した場合、攻撃者はセッション cookie に任意のデータを保存できます。セッション cookie はサーバーでデシリアライズされ、任意のコードが実行されます。

cookie 基準のセッションが使用される場合、システムに離れた場所からアクセスされる可能性があるとき、秘密鍵の完全な機密性が常に維持されるように特別に注意します。

例 1: 次の表示メソッドでは、settings.py 設定ファイルでハードコーディングされる場合、攻撃者は SECRET_KEY を盗むことができます。


...
def some_view_method(request):
url = request.GET['url']
if "http://" in url:
content = urllib.urlopen(url)
return HttpResponse(content)
...
Example 1 のメソッドでは、「http://」が URL にあることを基準に 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