Django 1.5.3 release notes¶
10 september 2013
Detta är Django 1.5.3, den tredje utgåvan i Django 1.5-serien. Den adresserar ett säkerhetsproblem och innehåller också en opt-in-funktion för att förbättra säkerheten för django.contrib.sessions
.
Sårbarhet för katalogtraversering i ssi
malltagg¶
I tidigare versioner av Django var det möjligt att kringgå inställningen ALLOWED_INCLUDE_ROOTS
som används för säkerhet med malltaggen ssi
genom att ange en relativ sökväg som börjar med en av de tillåtna rötterna. Till exempel, om ALLOWED_INCLUDE_ROOTS = ("/var/www",)
skulle följande vara möjligt:
{% ssi "/var/www/../../etc/passwd" %}
I praktiken är detta inte ett särskilt vanligt problem, eftersom det skulle kräva att mallförfattaren placerar ssi
-filen i en användarkontrollerad variabel, men det är möjligt i princip.
Minskar en sårbarhet för exekvering av fjärrkod i django.contrib.sessions
¶
django.contrib.sessions
använder för närvarande pickle
för att serialisera sessionsdata innan den lagras i backend. Om du använder signed cookie session backend och SECRET_KEY
är känd av en angripare (det finns inte en inneboende sårbarhet i Django som skulle göra att den läcker), kan angriparen infoga en sträng i sessionen som, när den avplockas, exekverar godtycklig kod på servern. Tekniken för att göra detta är enkel och lätt tillgänglig på internet. Även om cookie-sessionslagringen signerar de cookie-lagrade uppgifterna för att förhindra manipulering, eskalerar en SECRET_KEY
-läcka omedelbart till en sårbarhet för fjärrkörning av kod.
Denna attack kan motverkas genom att serialisera sessionsdata med JSON istället för pickle
. För att underlätta detta introducerar Django 1.5.3 en ny inställning, SESSION_SERIALIZER
, för att anpassa sessionens serialiseringsformat. För bakåtkompatibilitet är standardinställningen att använda pickle
. Även om JSON-serialisering inte stöder alla Python-objekt som pickle
gör, rekommenderar vi starkt att du byter till JSON-serialiserade värden. Eftersom JSON kräver strängnycklar kommer du sannolikt att stöta på problem om du använder nycklar som inte är strängar i request.session
. Se Serialisering av session-dokumentationen för mer information.