🚨THREAT INTEL: Django SQL Injection 🆔 CVE-2026-1207 | VT-2026-1207 🔥 Severity: High / Critical
آسیبپذیریSQL Injection در ماژول django.contrib.gis شناسایی شد. اگر در پروژه خود از PostGIS و فیلدهای RasterField استفاده میکنید، دیتابیس شما در خطر است.
🔬 تحلیل فنی (Technical Deep Dive) مشکل در کلاس RasterField و متدهای مربوط به جستجوی مکانی (Lookups) نهفته است. زمانی که روی یک فیلد رستری کوئری میزنید (مثل bbcontains یا سایر عملگرهای GIS)، جنگو به شما اجازه میدهد پارامتر band index را مشخص کنید. در نسخههای آسیبپذیر، این ورودی بدون اعتبارسنجی (Sanitization) و بدون اجبار به نوع Integer، مستقیماً وارد تابع SQL در PostGIS میشود.
💀 منطق اکسپلویت (PoC Logic)
فرض کنید دولوپر کدی دارد که ورودی کاربر را به کوئری GIS پاس میدهد:
در سطح دیتابیس، جنگو این را به تابعی شبیه به این تبدیل میکند:
🔻 بردار حمله (Attack Vector):
مهاجم به جای ارسال عدد (مثلاً 1)، یک رشته مخرب ارسال میکند تا پرانتز تابع PostGIS را ببندد و دستور SQL جدید تزریق کند.
Payload Concept:
این کار باعث Bypass شدن منطق فیلتر یا اجرای دستورات سنگین (Stacking Queries) میشود.
🎯 نسخههای آسیبپذیر:
• Django 6.0 < 6.0.2 • Django 5.2 < 5.2.11 • Django 4.2 < 4.2.28
🛡 راهکارهای امنیتی (Mitigation)
1️⃣ آپدیت فوری (Recommended): تیم جنگو در پچهای جدید ورودی این بخش را Validate میکند.
Bash
2️⃣ هاتفیکس دستی (Temporary):
اگر امکان آپدیت ندارید، قبل از ارسال متغیر به کوئری، حتماً آن را به int تبدیل کنید:
#Exploit #Django #SQLi #CVE_2026_1207 #Python #RedTeam #PostGIS #BlueTeam
آسیبپذیریSQL Injection در ماژول django.contrib.gis شناسایی شد. اگر در پروژه خود از PostGIS و فیلدهای RasterField استفاده میکنید، دیتابیس شما در خطر است.
🔬 تحلیل فنی (Technical Deep Dive) مشکل در کلاس RasterField و متدهای مربوط به جستجوی مکانی (Lookups) نهفته است. زمانی که روی یک فیلد رستری کوئری میزنید (مثل bbcontains یا سایر عملگرهای GIS)، جنگو به شما اجازه میدهد پارامتر band index را مشخص کنید. در نسخههای آسیبپذیر، این ورودی بدون اعتبارسنجی (Sanitization) و بدون اجبار به نوع Integer، مستقیماً وارد تابع SQL در PostGIS میشود.
💀 منطق اکسپلویت (PoC Logic)
فرض کنید دولوپر کدی دارد که ورودی کاربر را به کوئری GIS پاس میدهد:
Pythonband_idx = request.GET.get('idx') # Untrusted Input
# Passing input directly to lookup
qs = MapLayer.objects.filter(
raster__bbcontains=(geom, band_idx)
)در سطح دیتابیس، جنگو این را به تابعی شبیه به این تبدیل میکند:
ST_Contains(raster, [band_index], ...)🔻 بردار حمله (Attack Vector):
مهاجم به جای ارسال عدد (مثلاً 1)، یک رشته مخرب ارسال میکند تا پرانتز تابع PostGIS را ببندد و دستور SQL جدید تزریق کند.
Payload Concept:
Input: 1) OR 1=1; --
Result: ST_Contains(raster, 1) OR 1=1; --, ...)
این کار باعث Bypass شدن منطق فیلتر یا اجرای دستورات سنگین (Stacking Queries) میشود.
🎯 نسخههای آسیبپذیر:
• Django 6.0 < 6.0.2 • Django 5.2 < 5.2.11 • Django 4.2 < 4.2.28
🛡 راهکارهای امنیتی (Mitigation)
1️⃣ آپدیت فوری (Recommended): تیم جنگو در پچهای جدید ورودی این بخش را Validate میکند.
Bash
pip install -U django2️⃣ هاتفیکس دستی (Temporary):
اگر امکان آپدیت ندارید، قبل از ارسال متغیر به کوئری، حتماً آن را به int تبدیل کنید:
int(request.GET['idx'])#Exploit #Django #SQLi #CVE_2026_1207 #Python #RedTeam #PostGIS #BlueTeam
🔥6❤2