رفع آسیب‌پذیری SQL Injection در فریمورک Django

Django یک وب‌فریمورک متن‌باز مبتنی بر پایتون است که در آخرین نسخه‌ی خود یک ‫آسیب‌پذیری با شدت بالا را برطرف نموده است. تعداد وب‌سایت‌هایی که از این فریمورک استفاده می‌کنند و جنگو را به عنوان فریمورک Model-Template-View خود برمی‌گزینند بیش از ده‌ها هزار مورد تخمین زده می‌شود. به همین دلیل ارتقاء یا وصله‌ی وب‌سایت‌هایی که از این فریمورک استفاده می‌کنند در مقابل آسیب‌پذیری‌هایی مشابه این آسیب‌پذیری بسیار حائز اهمیت است.

جزئیات آسیب‌پذیری
این آسیب‌پذیری یک نقص SQL Injection با شناسه‌ی CVE-2022-34265 و شدت بالا است که در نسخه‌ی main فریمورک Django و نسخه‌های ۱.‏۴ (در حال حاضر در نسخه‌ی بتا)، ۰.‏۴ و ۲.‏۳ وجود دارد و به مهاجم اجازه می‌دهد وب‌اپلیکیشن‌های Django را از طریق آرگومان‌های ارسالی به توابع Trunc‪(kind)‬ و Extract‪(lookup_name)‬ مورد حمله قرار دهد. بدین صورت که اگر از داده‌های غیرقابل اعتماد به عنوان مقدار kind/lookup_name value استفاده شود، توابع پایگاه داده ()Trunc و () Extract مشمول حمله‌ی تزریق SQL می‌شوند.

محصولات تحت تأثیر
نسخه‌های زیر از فریمورک Django تحت تأثیر این آسیب‌پذیری قرار دارند:

  • Django main branch
  • Django 4.‎1 ‪(currently at beta status)‬
  • Django 4.‎0
  • Django 3.‎2

اپلیکیشن‌‎هایی که جستجوی نام و انتخاب نوع در آن‌ها به یک لیست امنِ شناخته‌شده محدود شده باشد تحت تأثیر این آسیب‌پذیری قرار نمی‌گیرند. به عبارت دیگر، اگر برنامه‌ی شما قبل از ارسال آرگومان‌ها به توابع Trunc و Extract، ورودی‌ها را بررسی و پاکسازی نماید، تحت تأثیر این نقص قرار نمی‌گیرد.

توصیه‌های امنیتی
تیم Django نسخه‌های ۴.۰.۶ و ۳.۲.۱۴ را برای رفع آسیب‌پذیری مذکور منتشر نموده است. به توسعه‌دهندگان توصیه می‌شود در اسرع وقت Django را ارتقاء داده یا وصله نمایند.
چنانچه در حال حاضر امکان ارتقاء به نسخه‌های به‌روزشده‌ی فوق وجود ندارد، اعمال وصله‌های زیر جهت رفع آسیب‌پذیری توصیه می‌گردد:
• برای  main branch
(http://github.com/django/django/commit/54eb8a374d5d98594b264e8ec22337819b37443c)
• برای نسخه‌ی ۴.۱
(http://github.com/django/django/commit/284b188a4194e8fa5d72a73b09a869d7dd9f0dc5)
• برای نسخه‌ی ۴.۰
(http://github.com/django/django/commit/0dc9c016fadb71a067e5a42be30164e3f96c0492)
• برای نسخه‌ی ۳.۲
(http://github.com/django/django/commit/a9010fe5555e6086a9d9ae50069579400ef0685e)

منبع:  https://cert.ir/news/13387