CVE-2026-15307 is a design failure in Django's spatial lookup layer, not merely a bug in GDALRaster. When you use spatial lookups like geom__intersects in queries, Django passes the right-hand-side value directly to the GDALRaster constructor without validating whether that input is trusted. The critical mistake: this path was designed for internal GeoDjango operations where callers controlled the input, but it became reachable through Django admin query parameters — where untrusted user input flows through.
The practical impact is severe. A staff user with view-only admin permission can trigger filesystem writes and outbound network requests by supplying dict or JSON input to spatial filters. The write=False parameter that exists as a supposed safeguard is bypassed entirely when the constructor receives dict/JSON — it unconditionally opens files in write mode regardless of that flag. Your ORM is lying to you: the assumption that query parameter handling is sanitized by the framework does not hold for spatial lookups.
Worse, this doesn't just expose local file writes. GDAL has drivers for PostGIS raster, cloud storage (S3, Azure Blob), shapefiles, GeoPackage, and virtual filesystems. An attacker controlling query parameters can probe the entire GDAL driver ecosystem through your Django instance as a delivery mechanism. The blast radius scales with whatever GDAL drivers are installed and whatever network paths the server process can reach.
For immediate action: audit any code using spatial lookups where the filter value originates from user input, request parameters, or query strings. If you expose Django admin with staff accounts, treat spatial lookup parameters as a privileged operation surface — restrict staff permissions or disable spatial lookups in admin entirely until patched. Check your Django version: 5.2.x and 6.0.x have patches. Note that 4.2.x and 5.0-5.1.x were not evaluated — if you're on those LTS versions, you may be exposed with no upstream patch path. The fix belongs in the spatial lookup layer itself, not just GDALRaster: that layer must validate or reject non-raster input before forwarding to constructors with side effects.