🔴 آسیب پذیری از نوع SQL injection با شناسه ی CVE-2025-57833 در جنگو اصلاح شده که امتیاز 7.1 و شدت بالا داره.
نسخه های تحت تاثیر:
- Django main
- Django 5.2
- Django 5.1
- Django 4.2
نسخه های اصلاح شده: نسخه های 4.2.24, 5.1.12, 5.2.6 و بالاتر
آسیب پذیری در عملکرد FilteredRelation رخ میده و زمانی فعال میشه که به همراه expansionِ **kwargs در متدهای QuerySet.annotate یا QuerySet.alias استفاده بشه.
- تابع FilteredRelation یک قابلیت ORM در Django هست که امکان میده روی یک رابطه (مثل ForeignKey) شرط بزنیم. مثلا کد زیر فقط کامنتهای فعال هر پست میگیره:
- متد annotate برای اضافه کردن ستونهای محاسباتی (مثل count، sum) به کوئری استفاده میشه.
- متد alias دقیقاً مثل annotate هستش، ولی ستون جدید ایجاد نمیکنه، فقط یک اسم مستعار روی عبارت SQL میذاره.
مثلا در کد زیر num_comments یک alias برای COUNT(comments) میشه.
- در پایتون وقتی تابعی صدا زده میشه، میشه پارامترها رو مستقیم داد، یا اینکه از dict** استفاده کرد. در حالت مستقیم:
بصورت dict** :
در این حالت پایتون محتویات دیکشنری رو بشکل keyword argument باز میکنه یعنی معادل این میشه:
در جنگو هم اگه این داشته باشیم:
خروجی SQL:
در جنگو همیشه alias داخل "" قرار میگیره اما در FilteredRelation وقتی alias از طریق kwargs وارد میشه، alias بصورت خام میره داخل SQL. بنابراین اگه مهاجم این ورودی رو بده:
تبدیل میشه به :
و در نتیجه SQLinjection فعال میشه.
اینجا میتونید رایت آپ کامل و POC این آسیب پذیری رو بررسی کنید.
#جنگو #پایتون
#Django #SQLInjection #SQLi
⭐️ @ZeroSec_team
نسخه های تحت تاثیر:
- Django main
- Django 5.2
- Django 5.1
- Django 4.2
نسخه های اصلاح شده: نسخه های 4.2.24, 5.1.12, 5.2.6 و بالاتر
آسیب پذیری در عملکرد FilteredRelation رخ میده و زمانی فعال میشه که به همراه expansionِ **kwargs در متدهای QuerySet.annotate یا QuerySet.alias استفاده بشه.
- تابع FilteredRelation یک قابلیت ORM در Django هست که امکان میده روی یک رابطه (مثل ForeignKey) شرط بزنیم. مثلا کد زیر فقط کامنتهای فعال هر پست میگیره:
qs = Post.objects.annotate(
active_comments=FilteredRelation("comments", condition=Q(comments__is_active=True))
)
- متد annotate برای اضافه کردن ستونهای محاسباتی (مثل count، sum) به کوئری استفاده میشه.
- متد alias دقیقاً مثل annotate هستش، ولی ستون جدید ایجاد نمیکنه، فقط یک اسم مستعار روی عبارت SQL میذاره.
مثلا در کد زیر num_comments یک alias برای COUNT(comments) میشه.
qs = Post.objects.annotate(num_comments=Count("comments"))
- در پایتون وقتی تابعی صدا زده میشه، میشه پارامترها رو مستقیم داد، یا اینکه از dict** استفاده کرد. در حالت مستقیم:
greet(name="onhexgroup", age=25)
بصورت dict** :
info = {"name": "onhexgroup", "age": 25}
greet(**info)
در این حالت پایتون محتویات دیکشنری رو بشکل keyword argument باز میکنه یعنی معادل این میشه:
greet(name="onhexgroup", age=25)
در جنگو هم اگه این داشته باشیم:
user_alias = "custom_label" # ورودی کاربر
qs = Order.objects.annotate(**{user_alias: F("payment__amount")})
print(str(qs.query))
خروجی SQL:
SELECT "myapp_order"."id",
"myapp_payment"."amount" AS "custom_label"
FROM "myapp_order"
LEFT OUTER JOIN "myapp_payment"
ON ("myapp_order"."id" = "myapp_payment"."order_id");
در جنگو همیشه alias داخل "" قرار میگیره اما در FilteredRelation وقتی alias از طریق kwargs وارد میشه، alias بصورت خام میره داخل SQL. بنابراین اگه مهاجم این ورودی رو بده:
user_alias = 'custom_label"; DROP TABLE users; --'
qs = Order.objects.annotate(**{user_alias: F("payment__amount")})
print(str(qs.query))
تبدیل میشه به :
sql
SELECT "myapp_order"."id",
"myapp_payment"."amount" AS custom_label"; DROP TABLE users; --
FROM "myapp_order"
و در نتیجه SQLinjection فعال میشه.
اینجا میتونید رایت آپ کامل و POC این آسیب پذیری رو بررسی کنید.
#جنگو #پایتون
#Django #SQLInjection #SQLi
⭐️ @ZeroSec_team
Django Project
Django security releases issued: 5.2.6, 5.1.12, and 4.2.24
Posted by Sarah Boyce on Sept. 3, 2025
❤8
⚠️ 𝗖𝗿𝗶𝘁𝗶𝗰𝗮𝗹 𝗩𝘂𝗹𝗻𝗲𝗿𝗮𝗯𝗶𝗹𝗶𝘁𝘆 𝗶𝗻 𝗗𝗷𝗮𝗻𝗴𝗼 𝗙𝗿𝗮𝗺𝗲𝘄𝗼𝗿𝗸
The Django library has announced a very critical vulnerability (CVE-2025-57833) that allows attackers to perform SQL Injection on servers using the framework
🔍 𝗪𝗵𝗮𝘁 𝗵𝗮𝗽𝗽𝗲𝗻𝗲𝗱?
• The flaw is in the FilteredRelation component inside the ORM.
• An attacker can exploit it by passing a specially crafted dictionary to QuerySet.annotate() or QuerySet.alias().
• Result: SQL Injection = ability to manipulate queries, access sensitive data, or even take full control of the server.
⚠️ 𝗔𝗳𝗳𝗲𝗰𝘁𝗲𝗱 𝘃𝗲𝗿𝘀𝗶𝗼𝗻𝘀:
• Django 5.2
• Django 5.1
• Django 4.2 (LTS)
• And also the main development branch.
🛡️ 𝗪𝗵𝗮𝘁’𝘀 𝘁𝗵𝗲 𝘀𝗼𝗹𝘂𝘁𝗶𝗼𝗻?
Immediate update required to:
• Django 5.2.6
• Django 5.1.12
• Django 4.2.24
-
#CyberSecurity
#Django
#SQLInjection
#CVE2025
⭐️ @ZeroSec_team
The Django library has announced a very critical vulnerability (CVE-2025-57833) that allows attackers to perform SQL Injection on servers using the framework
🔍 𝗪𝗵𝗮𝘁 𝗵𝗮𝗽𝗽𝗲𝗻𝗲𝗱?
• The flaw is in the FilteredRelation component inside the ORM.
• An attacker can exploit it by passing a specially crafted dictionary to QuerySet.annotate() or QuerySet.alias().
• Result: SQL Injection = ability to manipulate queries, access sensitive data, or even take full control of the server.
⚠️ 𝗔𝗳𝗳𝗲𝗰𝘁𝗲𝗱 𝘃𝗲𝗿𝘀𝗶𝗼𝗻𝘀:
• Django 5.2
• Django 5.1
• Django 4.2 (LTS)
• And also the main development branch.
🛡️ 𝗪𝗵𝗮𝘁’𝘀 𝘁𝗵𝗲 𝘀𝗼𝗹𝘂𝘁𝗶𝗼𝗻?
Immediate update required to:
• Django 5.2.6
• Django 5.1.12
• Django 4.2.24
-
#CyberSecurity
#Django
#SQLInjection
#CVE2025
⭐️ @ZeroSec_team
👍5❤3