Django 2.2.8 release notes¶
2 december 2019
Django 2.2.8 åtgärdar ett säkerhetsproblem, flera buggar i 2.2.7 och lägger till kompatibilitet med Python 3.8.
CVE-2019-19118: Privilegieeskalering i Django-administratören.¶
Sedan Django 2.1 har en Django-modelladministratör som visar en överordnad modell med relaterade inline-modeller, där användaren har visningsbehörighet till en överordnad modell men redigeringsbehörighet till inline-modellen, visat en skrivskyddad vy av den överordnade modellen men redigerbara formulär för inline.
Att skicka in dessa formulär skulle inte tillåta direkt redigering av den överordnade modellen, men skulle utlösa den överordnade modellens save()
-metod och orsaka att signalhanterare före och efter sparandet anropas. Detta är en privilegieeskalering eftersom en användare som saknar behörighet att redigera en modell inte ska kunna utlösa dess sparrelaterade signaler.
För att lösa detta problem har koden för behörighetshantering i Djangos administratörsgränssnitt ändrats. Om en användare nu bara har behörigheten ”view” för en överordnad modell kommer hela det visade formuläret inte att vara redigerbart, även om användaren har behörighet att redigera modeller som ingår i inlines.
Detta är en bakåtkompatibel ändring, och Djangos säkerhetsteam är medvetet om att vissa användare av Django var beroende av möjligheten att tillåta redigering av inlines i adminformuläret för en annars visningsbar överordnad modell.
Med tanke på komplexiteten i Django-administratören, och i synnerhet de behörighetsrelaterade kontrollerna, är det Djangos säkerhetsteams uppfattning att denna ändring var nödvändig: att det för närvarande inte är möjligt att behålla det befintliga beteendet samtidigt som man undkommer den potentiella privilegieeskaleringen på ett sätt som skulle undvika att liknande problem återkommer i framtiden och som skulle vara förenligt med Djangos filosofi safe by default.
För närvarande bör utvecklare vars applikationer påverkas av denna ändring ersätta användningen av inlines i skrivskyddade föräldrar med anpassade formulär och vyer som uttryckligen implementerar den önskade funktionaliteten. På längre sikt kan det hända att Django själv lägger till en dokumenterad, stödd och korrekt testad mekanism för delvis redigerbara formulär med flera modeller i administratörsgränssnittet.
Buggrättningar¶
Problem med dataförlust i vyn för adminändringslistan när prefixet för ett anpassat formset innehåller specialtecken för reguljära uttryck, t.ex.
'$'
(#31031).Åtgärdade en regression i Django 2.2.1 som orsakade en krasch vid migrering av behörigheter för proxymodeller med flera databaser om posten
default
var tom (#31021`).Åtgärdat en möjlighet till dataförlust i
select_for_update()
. När man använder'self
iof
-argumentet med multi-table inheritance, låstes en överordnad modell istället för queryset-modellen (#30953).