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.