
Этот репозиторий содержит Proof of Concept (PoC) для условного удалённого выполнения кода (RCE) уязвимости, обнаруженной в django-summernote версии 0.8.20.0 (и более ранних).
Уязвимость заключается в отсутствии строгого контроля зависимостей в setup.py и в логике отката в forms.py.
Пакет django-summernote рассматривает библиотеку Pillow (необходимую для строгой проверки изображений) как опциональную зависимость. Если Pillow не установлен на сервере, UploadForm корректно понижает поле ввода файла с forms.ImageField до универсального forms.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 в install_requires в setup.py или сделать использование ImageField строгой зависимостью.