
Questo repository contiene una Prova di concetto (PoC) per una vulnerabilità di Esecuzione Remota di Codice (RCE) Condizionale scoperta in django-summernote versione 0.8.20.0 (e precedenti).
La vulnerabilità risiede nella mancanza di un'applicazione rigorosa delle dipendenze in setup.py e nella logica di fallback in forms.py.
Il pacchetto django-summernote tratta la libreria Pillow (richiesta per una validazione rigorosa delle immagini) come una dipendenza opzionale. Se Pillow non è installato sul server, UploadForm declassa automaticamente il campo di input del file da forms.ImageField al generico forms.FileField.
Codice vulnerabile (forms.py):
try:
from PIL import Image
FIELD = forms.ImageField # Validates image content
except ImportError:
FIELD = forms.FileField # Accepts ANY file type (Dangerous)
Questo comportamento consente a un attaccante di caricare file arbitrari (ad esempio .php, .py, .sh, .html) al posto delle immagini, portando a Esecuzione Remota di Codice (RCE) o XSS, poiché views.py si affida esclusivamente alla validazione del form.
Installare django-summernote senza Pillow:
pip install django-summernote
pip uninstall Pillow # Ensure Pillow is gone
Eseguire il PoC:
python3 poc.py
Output atteso:
[+] 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
Gli utenti dovrebbero assicurarsi che Pillow sia installato nel proprio ambiente per imporre la validazione delle immagini:
pip install Pillow
I manutentori dovrebbero spostare Pillow in install_requires in setup.py o imporre l'uso di ImageField come dipendenza obbligatoria.