
प्रमाण-अवधारणा (Proof-of-concept) django-summernote में मनमाना फ़ाइल अपलोड RCE के लिए जब Pillow अनुपलब्ध हो। CWE-434 का शोषण करके वेब शेल अपलोड करता है।
यह रिपॉज़िटरी django-summernote संस्करण 0.8.20.0 (और पुराने) में खोजी गई सशर्त रिमोट कोड एक्सीक्यूशन (RCE) भेद्यता के लिए एक प्रूफ ऑफ कॉन्सेप्ट (PoC) है।
यह भेद्यता setup.py में सख्त निर्भरता प्रवर्तन की कमी और forms.py में फ़ॉलबैक लॉजिक के कारण मौजूद है।
django-summernote पैकेज Pillow लाइब्रेरी (सख्त छवि सत्यापन के लिए आवश्यक) को एक वैकल्पिक निर्भरता के रूप में मानता है। यदि सर्वर पर स्थापित नहीं है, तो फ़ाइल इनपुट फ़ील्ड को से सामान्य में सुचारू रूप से डाउनग्रेड कर देता है।
PillowUploadFormforms.ImageFieldforms.FileFieldभेद्य कोड (forms.py):
try:
from PIL import Image
FIELD = forms.ImageField # Validates image content
except ImportError:
FIELD = forms.FileField # Accepts ANY file type (Dangerous)
यह व्यवहार एक हमलावर को छवियों के बजाय मनमानी फ़ाइलें (जैसे .php, .py, .sh, .html) अपलोड करने की अनुमति देता है, जिससे रिमोट कोड एक्सीक्यूशन (RCE) या XSS उत्पन्न होता है, क्योंकि views.py केवल फ़ॉर्म सत्यापन पर निर्भर करता है।
django-summernote को Pillow के बिना स्थापित करें:
pip install django-summernote
pip uninstall Pillow # Ensure Pillow is gone
PoC चलाएँ:
python3 poc.py
अपेक्षित आउटपुट:
[+] Verified: Pillow is NOT installed. Vulnerable logic active.
[*] Attempting to upload a Web Shell (.php)...
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
[!!!] VULNERABILITY SUCCESS: SHELL UPLOADED [!!!]
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
[+] Form Validation Passed for: exploit.php
उपयोगकर्ताओं को छवि सत्यापन लागू करने के लिए अपने वातावरण में Pillow स्थापित करना सुनिश्चित करना चाहिए:
pip install Pillow
अनुरक्षकों को Pillow को setup.py में install_requires में स्थानांतरित करना चाहिए या ImageField उपयोग को कठोर निर्भरता के रूप में लागू करना चाहिए।