
Dieses Repository enthält einen Proof of Concept (PoC) für eine bedingte Remote Code Execution (RCE)-Schwachstelle, die in django-summernote Version 0.8.20.0 (und früher) entdeckt wurde.
Die Schwachstelle liegt im Fehlen einer strikten Durchsetzung der Abhängigkeiten in setup.py sowie in der Fallback-Logik in forms.py.
Das Paket django-summernote behandelt die Bibliothek Pillow (die für eine strikte Bildvalidierung erforderlich ist) als optionale Abhängigkeit. Wenn Pillow nicht auf dem Server installiert ist, stuft UploadForm das Dateieingabefeld von forms.ImageField elegant auf das generische forms.FileField herab.
Verwundbarer Code (forms.py):
try:
from PIL import Image
FIELD = forms.ImageField # Validates image content
except ImportError:
FIELD = forms.FileField # Accepts ANY file type (Dangerous)
Dieses Verhalten ermöglicht es einem Angreifer, beliebige Dateien (z. B. .php, .py, .sh, .html) anstelle von Bildern hochzuladen, was zu Remote Code Execution (RCE) oder XSS führt, da views.py sich ausschließlich auf die Formularvalidierung verlässt.
Installieren Sie django-summernote ohne Pillow:
pip install django-summernote
pip uninstall Pillow # Ensure Pillow is gone
Führen Sie den PoC aus:
python3 poc.py
Erwartete Ausgabe:
[+] 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
Benutzer sollten sicherstellen, dass Pillow in ihrer Umgebung installiert ist, um die Bildvalidierung zu erzwingen:
pip install Pillow
Maintainer sollten Pillow in setup.py zu install_requires verschieben oder die Verwendung von ImageField als harte Abhängigkeit durchsetzen.