Upload Seguro de Arquivos em Aplicação Backend com Spring Boot, ClamAV e JWT

Neste artigo, veremos como criar uma aplicação backend utilizando Spring Boot, ClamAV e JWT, que visa reforçar a segurança de upload de arquivos. Para tanto, serão descritos conceitos importantes, discussão sobre alguns tipos de ataque a sessões de upload de arquivo e demonstração didática da aplicação com segurança reforçada.

[ Hits: 9.086 ]

Por: André em 16/12/2020


Tipos de ataque / Testes



Alguns tipos de ataque

Existem muitos ataques que podem ser efetuados à sessões de upload de arquivo. Abaixo, segue um levantamento com alguns incidentes de segurança que podem ocorrer, baseado nos artigos File Upload Cheat Sheet - OWASP* e Unrestricted File Upload - OWASP*:
A seguir, veremos os passos para dar build na aplicação de experimentação.

Experimentação: preparação da aplicação

Através de uma aplicação didática backend rodando com Spring Boot (Java 11) e ClamAV, serão demonstrados abaixo alguns casos de teste de uploads não confiáveis de arquivo.

Bibliotecas adicionais utilizadas:
Requisitos para build:
Passo a passo para build:

1. Clone o projeto através do link:
2. Inicie ClamAV através do comando:

# docker run -d --net=host -p 3310:3310 mkodockx/docker-clamav

3. Na raiz do projeto, execute:

# mvn spring-boot:run

Experimentação: casos de teste

A seguir, veremos os passos para executar os casos de teste.

Autenticação: passo necessário

Visando que autorização e autenticação de usuários são importantes para manter o sistema mais seguro durante sessões de upload de arquivo, o sistema didático também conta com essas funcionalidades. Portanto, é necessário que seja feita inicialmente uma autenticação. Caso contrário, a rota de upload retornará erro HTTP 401[https://developer.mozilla.org/pt-BR/docs/Web/HTTP/Status/401].

Como o sistema não conta com banco de dados, o usuário padrão é "user" e a senha é "password", tal que quaisquer outras combinações de usuário/senha resultarão em erro. Para obter o token JWT, que possui 5 horas de validade, execute:

curl -X GET http://localhost:8082/authenticate --header "Content-Type: application/json" --data '{"username":"user", "password":"password"}'

De modo que a resposta será:

{"token":"<BEARER_JWT_TOKEN>"}

Upload de arquivos grandes: desperdício de recursos

Ao submeter um arquivo pdf, cujo tamanho excede o limite suportado pelo servidor, através da seguinte requisição:

curl -i -X POST http://localhost:8082/upload --header "Authorization: <BEARER_JWT_TOKEN>" -F file=@large-pdf-file.pdf http://localhost:8082/upload

A resposta do servidor é:

{"message": "Tamanho do arquivo excede o limite definido (3MB)"}

Upload de arquivos maliciosos

Ao submeter um arquivo pdf* com um arquivo malicioso embutido (EICAR.doc*https://www.eicar.org/?page_id=3950]), através da seguinte requisição:

curl -i -X POST http://localhost:8082/upload --header "Authorization: <BEARER_JWT_TOKEN>" -F file=@42.zip http://localhost:8082/upload

A resposta do servidor é:

{"message": "Arquivo malicioso encontrado"}

Resultado do scan no VirusTotal.

Arquivo com dupla extensão

Com a requisição:

curl -i -X POST http://localhost:8082/upload --header "Authorization: <BEARER_JWT_TOKEN>" -F file=@teste.pdf.txt http://localhost:8082/upload

A resposta do servidor é:

{"message": "Arquivo com formato inválido"}

Arquivo com extensão não permitida

Ao submeter um arquivo com formato ".exe", de modo que o servidor aceita somente os formatos {.txt, .pdf}:

curl -i -X POST http://localhost:8082/upload --header "Authorization: <BEARER_JWT_TOKEN>" -F file=@teste.exe http://localhost:8082/upload

A resposta do servidor é:

{"message": "Arquivo com formato inválido"}

Limitações

A solução com ClamAV tem algumas limitações, como por exemplo, o upload do famoso Zip Bomb chamado 42.zip*. ClamAV não foi capaz de identificar o código malicioso.

Requisição:

curl -i -X POST http://localhost:8082/upload --header "Authorization: <BEARER_JWT_TOKEN>" -F file=@42.zip http://localhost:8082/upload

Resposta:

{"message":"OK"}

Conclusão

Os motores que detectaram o código malicioso podem ser verificados no VirusTotal.

Neste caso, sugere-se que antivírus mais potentes ou soluções de segurança de endpoint sejam utilizadas, a fim de reduzir a probabilidade de incidentes de segurança.

Página anterior    

Páginas do artigo
   1. Introdução
   2. Tipos de ataque / Testes
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Gerando Números Aleatórios

Gerando logs em Java

Recuperando cotação do dólar

Manipulando erros com try catch finally

Gerando Números Aleatórios

  
Comentários
[1] Comentário enviado por maurixnovatrento em 16/12/2020 - 19:13h


Muito Bom.

___________________________________________________________
[code]Conhecimento não se Leva para o Túmulo.
https://github.com/MauricioFerrari-NovaTrento [/code]


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts