O Diário do Analista
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.