界: Security Features

軟體安全性並非安全性軟體。我們關注驗證、Access Control、保密性、加密以及權限管理之類的主題。

Django Bad Practices: Pickle Serialized Sessions

Abstract
如果攻擊者可控制階段作業資料,則由 Pickle 序列化的階段作業可能會導致遠端程式碼執行。
Explanation
如果使用以 Cookie 為基礎的階段作業,且 SECRET_KEY 遭洩漏,則攻擊者將能夠在階段作業 Cookie 中儲存任意資料,此資料將在伺服器中還原序列化,從而導致任意程式碼執行。

如果使用以 Cookie 為基礎的階段作業,請格外小心,確保在可能從遠端存取的任何系統中,秘密金鑰始終完全保密。

範例 1:以下檢視方法可讓攻擊者竊取 SECRET_KEY (如果在 settings.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_KEYsettings.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