Vol. 2 (abr. 2026) | Pp. 238–240 | ISSN 3086-6103
ALERTA: PoC expõe cadeia de Path Traversal e SSTI no Flask-Reuploaded
Uma PoC pública para a CVE-2026-27641 reforça um risco crítico em aplicações Flask que usam o pacote Flask-Reuploaded para tratar uploads. Em versões anteriores à 1.5.0, o uso inseguro do parâmetro name pode permitir path traversal, bypass de restrições de extensão, escrita arbitrária de arquivos e, em cenários específicos, execução remota de código por Server-Side Template Injection (SSTI).
O que está vulnerável
O Flask-Reuploaded é uma biblioteca Python voltada ao gerenciamento de uploads em aplicações Flask. A vulnerabilidade afeta versões anteriores à 1.5.0 e ocorre quando a aplicação entrega um nome de arquivo influenciado pelo usuário ao parâmetro name.
A falha não deve ser interpretada apenas como um problema clássico de upload malicioso. Ela forma uma cadeia de impacto:
Um atacante pode manipular o destino lógico do arquivo por sequências de travessia de diretórios. Controles baseados em extensões podem ser contornados, o resultado pode ser escrita de arquivos fora do diretório originalmente previsto, além disso, caso um arquivo controlado seja gravado em local posteriormente processado como template, a cadeia pode evoluir para SSTI e execução de código no servidor.
A Snyk classifica o problema como crítico, com CVSS 9.3, destacando vetor de rede, baixa complexidade, ausência de privilégios prévios e ausência de interação do usuário.
Onde está o risco
O ponto de atenção é o uso do argumento name com valor derivado de requisições HTTP, nomes de arquivos enviados, campos de formulário, parâmetros de URL ou metadados manipuláveis.
Um padrão de risco seria:
uploaded_file = photos.save( request.files["file"], name=request.form["filename"] )
Nesse caso, o sistema delega ao cliente a influência sobre o nome usado durante a persistência do upload. Ainda que a aplicação imponha uma allowlist de extensões, essa proteção pode não impedir a cadeia descrita pela CVE.
O modelo seguro é não aceitar que o cliente determine o nome de armazenamento:
uploaded_file = photos.save(request.files["file"])
Impacto
O impacto real depende da topologia da aplicação e das permissões do processo que executa o Flask, mas os principais cenários incluem:
| Cenário | Consequência potencial |
|---|---|
| Escrita em diretórios da aplicação | Alteração de recursos, templates ou arquivos estáticos |
| Escrita em áreas servidas pelo servidor web | Hospedagem de conteúdo malicioso ou persistência |
| Escrita em diretórios processados por jobs | Execução indireta em pipelines de processamento |
| Template controlado ou contaminado | SSTI e possível execução remota de código |
| Container com permissões excessivas | Comprometimento do workload e movimentação lateral |
O risco é particularmente elevado em ambientes onde o diretório de upload, código da aplicação, diretórios de templates e volumes persistentes têm permissões amplas ou compartilhadas. A própria descrição oficial da CVE associa a combinação de path traversal, bypass de extensão e SSTI à possibilidade de escrita arbitrária e RCE.
Correção prioritária
A correção recomendada é atualizar o Flask-Reuploaded para a versão 1.5.0 ou superior, versão indicada como corrigida nos avisos públicos.
python -m pip install --upgrade "Flask-Reuploaded>=1.5.0"
Além da atualização, aplique os seguintes controles:
-
Nunca passe entrada não confiável ao parâmetro
name. -
Gere nomes de arquivos exclusivamente no servidor.
-
Mantenha uploads fora da árvore de código, templates e conteúdo diretamente servido.
-
Aplique allowlist de tipos baseada em validação do conteúdo, e não somente na extensão ou no
Content-Type. -
Execute a aplicação com usuário sem privilégios e permissões mínimas no volume de uploads.
-
Separe volumes de upload, arquivos estáticos, templates e dados operacionais.
-
Impeça que arquivos enviados sejam processados como templates, scripts ou artefatos executáveis.
- Crie alertas para alterações inesperadas em diretórios de aplicação e template.
Como mitigação temporária, os avisos recomendam explicitamente não usar entrada do usuário em name, optar por nomes gerados automaticamente e aplicar validação estrita caso esse argumento seja indispensável.
Referências:
Categorias: Alerta, Ataques, Controles, CVE, Falhas, Github, PackageKit, PyPI, Python, Remote Attack, Uncategorized, Vulnerabilidade.