- شناسه CVE-2025-57833 :CVE
- CWE-89 :CWE
- yes :Advisory
- منتشر شده: سپتامبر 3, 2025
- به روز شده: سپتامبر 8, 2025
- امتیاز: 7.1
- نوع حمله: SQL Injection
- اثر گذاری: Remote code execution(RCE)
- حوزه: برنامه نویسی
- برند: djangoproject
- محصول: Django
- وضعیتPublished :CVE
- Yes :POC
- وضعیت آسیب پذیری: patch شده
چکیده
آسیبپذیری در فریمورک Django نسخههای 4.2 پیش از 4.2.24، 5.1 پیش از 5.1.12 و 5.2 پیش از 5.2.6 به دلیل تزریق SQL در نامهای ستون FilteredRelation است که امکان اجرای کوئری های مخرب را فراهم میکند. این آسیب پذیری میتواند منجر به اجرای کد مخرب (RCE) در PostgreSQL یا تزریق SQL در پایگاههای داده دیگر شود.
توضیحات
آسیبپذیری CVE-2025-57833 در فریمورک وب Django، توسعهیافته توسط Django Project، ناشی از تزریق SQL مطابق با CWE-89 در کامپوننت FilteredRelation است. این ضعف امنیتی به مهاجمانی با دسترسی محدود و احراز هویتشده اجازه میدهد با استفاده از دیکشنری دستکاریشده و گسترش دیکشنری از طریق آرگومانهای **kwargsدر متدهای QuerySet.annotate()یا QuerySet.alias()، نام ستونها را تغییر داده و کوئریهای SQL مخرب را تزریق کنند.
شدت این آسیب پذیری بالا ارزیابی شده، از طریق شبکه قابل بهرهبرداری است و میتواند در PostgreSQL منجر به اجرای کد از راه دور (RCE) شود، در حالی که در سایر پایگاههای داده، این آسیبپذیری عمدتاً به شکل تزریق SQL ظاهر میشود. مهاجمان میتوانند از دستور COPY TO PROGRAM در PostgreSQL برای اجرای یک reverse shell (اجرای دستور Bash بهصورت معکوس برای کنترل سیستم) استفاده کرده و همچنین SQL مخرب در سایر پایگاههای داده تزریق کنند.
کد آسیبپذیر در FilteredRelation بررسیهای داخلی Django را دور میزند و اجازه میدهد که نام ستونها با استفاده از دیکشنری گسترشیافته بهصورت داینامیک دستکاری شود که بدین ترتیب SQL نهایی حاوی دستورات مخرب میشود.
کد اثبات مفهومی (PoC) نشان میدهد که با ترکیب FilteredRelation با select_related و یک دیکشنری مخرب، مهاجمان میتوانند منجر به اجرای کد مخرب (RCE) در PostgreSQL شوند. این مسئله تأیید میکند که مکانیزم های Django، مانند تطابق نامهای اولیه و ثانویه user_data، با افزودن کاراکترهای اضافی مانند “e” قابل دور زدن هستند. پیامد های این آسیب پذیری شامل نقض محرمانگی به معنای افشای دادههای پایگاه داده، یکپارچگی با امکان تغییر دادهها و در دسترسپذیری به معنای اختلال در سرویس است که میتواند عملیات برنامههای وب را مختل کند.
تیم Django این آسیب پذیری را در نسخههای 4.2.24، 5.1.12 و 5.2.6 با اصلاح اعتبارسنجی نام ستون ها در FilteredRelation پچ کرده است.
CVSS
Score | Severity | Version | Vector String |
7.1 | HIGH | 3.1 | CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:L/A:N |
لیست محصولات آسیب پذیر
Versions | Product |
affected from 4.2 before 4.2.24
affected from 5.1 before 5.1.12 affected from 5.2 before 5.2.6 |
Django |
لیست محصولات بروز شده
Versions | Product |
4.2.24
5.1.12 5.2.6 |
Django |
استفاده محصول در ایران
در این جدول، تعداد صفحات ایندکسشده در گوگل با دامنه .ir که Django را ذکر کرده اند، ثبت شده است. این داده صرفاً برای برآورد تقریبی حضور محصولات در وب ایران استفاده شده و نمایانگر میزان نصب دقیق و استفاده واقعی نیست.
Approx. Usage in .ir Domain via Google
(Total Pages) |
Product |
182,000 | Django |
نتیجه گیری
با توجه به ماهیت این آسیبپذیری و امکان اجرای کد دلخواه (RCE) و تزریق SQL در نامهای ستون FilteredRelation فریمورک Django، اقدامات زیر به منظور کاهش ریسک توصیه میشود:
- بهروزرسانی فوری فریمورک Django: تمامی سیستمها باید به آخرین نسخههای امن منتشر شده یعنی 4.2.24، 5.1.12 یا 5.2.6 به روزرسانی شوند.
- بررسی استفاده از FilteredRelation: توسعهدهندگان باید بررسی کنند که هنگام استفاده از FilteredRelation همراه با annotate()یا QuerySet.alias()، ورودیهای دیکشنری بهدرستی اعتبارسنجی شده و هیچ داده مخربی وارد ستون یا کوئری SQL نمی شود.
- اعتبارسنجی ورودیها: قبل از استفاده از دادههای کاربر برای ساخت نام ستون یا هر بخش دینامیک کوئری SQL، اعتبارسنجی دقیق انجام شود تا از تزریق SQL جلوگیری شود.
- محدود کردن دسترسی پایگاه داده: دسترسی کاربران به پایگاه داده باید بر اساس کمترین سطح دسترسی مورد نیاز تنظیم شود تا در صورت بهرهبرداری، آسیب محدود باشد.
- مانیتورینگ و لاگگیری: لاگگیری از کوئریهای SQL و نظارت بر عملکرد غیرمعمول میتواند حملات موفق یا تلاشهای سوءاستفاده را شناسایی کند.
- آموزش توسعهدهندگان: تیم توسعه باید نسبت به ریسکهای SQL Injection و بهترین شیوههای محافظت در برابر آن آگاه باشد.
اجرای این اقدامات میتواند ریسک سوءاستفاده از آسیبپذیری را به حداقل رسانده و امنیت، محرمانگی و یکپارچگی سیستمهای مبتنی بر Django را تضمین کند.
امکان استفاده در تاکتیک های Mitre Attack
- Initial Access (TA0001)
مهاجم میتواند با ارسال درخواستهای HTTP حاوی دیکشنری دستکاریشده به متدهای annotate() یا alias() در Django که از FilteredRelation استفاده میکنند، دسترسی اولیه به آسیبپذیری را ایجاد کند. - Execution (TA0002)
در صورت استفاده از PostgreSQL، مهاجم میتواند با تزریق SQL و اجرای دستور COPY TO PROGRAM باعث اجرای دستورات سیستم مانند reverse shell شود که منجر به Remote Code Execution (RCE) خواهد شد. - Persistence (TA0003)
پس از RCE در PostgreSQL، مهاجم میتواند اسکریپتها یا سرویسهای مخرب روی سیستم هدف ثبت کند و دسترسی پایدار به دست آورد. این امر احتمالی و وابسته به پیکربندی محیط است. - Privilege Escalation (TA0004)
اجرای کد از طریق PostgreSQL ممکن است منجر به اجرای دستورات با سطح دسترسی کاربر دیتابیس مثلاً postgres شود که معمولاً سطح بالایی است. این امر احتمالی و وابسته به پیکربندی محیط است. - Credential Access (TA0006)
با تزریق SQL، مهاجم میتواند به جداول حاوی اطلاعات کاربری و هشهای رمز عبور دسترسی پیدا کند. - Discovery (TA0007)
مهاجم میتواند با اجرای کوئریهای SQL ساختار پایگاه داده، جدولها و متادیتا را شناسایی کند تا برای حملات بعدی آماده شود. - Collection (TA0009)
اطلاعات حساس از جداول پایگاه داده مانند دادههای کاربران یا لاگها قابل استخراج است. - Command and Control (TA0011)
در PostgreSQL با سوءاستفاده از RCE، مهاجم میتواند reverse shell برقرار کرده و کنترل سیستم را از راه دور در اختیار بگیرد.
منابع
- https://www.cve.org/CVERecord?id=CVE-2025-57833
- https://www.cvedetails.com/cve/CVE-2025-57833/
- https://docs.djangoproject.com/en/dev/releases/security/
- https://www.djangoproject.com/weblog/2025/sep/03/security-releases/
- https://vulmon.com/vulnerabilitydetails?qid=CVE-2025-57833
- https://vuldb.com/?id.322432
- https://groups.google.com/g/django-announce
- https://medium.com/@EyalSec/django-unauthenticated-0-click-rce-and-sql-injection-using-default-configuration-059964f3f898
- https://nvd.nist.gov/vuln/detail/CVE-2025-57833
- https://cwe.mitre.org/data/definitions/89.html