
Prova de conceito para upload arbitrário de arquivo com RCE no django-summernote quando o Pillow está ausente. Explora CWE-434 para enviar um web shell.
Este repositório contém uma Prova de Conceito (PoC) para uma vulnerabilidade de Execução Remota de Código (RCE) Condicional descoberta no django-summernote versão 0.8.20.0 (e anteriores).
A vulnerabilidade reside na falta de aplicação estrita de dependências em setup.py e na lógica de fallback em forms.py.
O pacote django-summernote trata a biblioteca Pillow (necessária para validação estrita de imagens) como uma dependência opcional. Se o não estiver instalado no servidor, o rebaixa graciosamente o campo de entrada de arquivos de para o genérico .
PillowUploadFormforms.ImageFieldforms.FileFieldCódigo Vulnerável (forms.py):
try:
from PIL import Image
FIELD = forms.ImageField # Valida o conteúdo da imagem
except ImportError:
FIELD = forms.FileField # Aceita QUALQUER tipo de arquivo (Perigoso)
Esse comportamento permite que um atacante envie arquivos arbitrários (por exemplo, .php, .py, .sh, .html) em vez de imagens, levando à Execução Remota de Código (RCE) ou XSS, pois o views.py depende exclusivamente da validação do formulário.
Instale o django-summernote sem o Pillow:
pip install django-summernote
pip uninstall Pillow # Garanta que o Pillow foi removido
Execute o PoC:
python3 poc.py
Saída Esperada:
[+] 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
Os usuários devem garantir que o Pillow esteja instalado em seu ambiente para impor a validação de imagens:
pip install Pillow
Os mantenedores devem mover o Pillow para install_requires em setup.py ou impor dependência rígida no uso de ImageField.