Avaliação técnica de vulnerabilidades no código do Skala
Data de elaboração |
05/04/2023 |
---|---|
Responsável pelo estudo |
José Lucas da Silva Costa Carlos Eduardo Carvalho do Viso |
Equipe do estudo |
José Henrique dos Santos Nogueira João Pedro Rocha Brito Daniel Ribeiro Camboim de Oliveira |
Alvo | Sistema Skala |
Origem |
Falhas de segurança |
Objetivo |
Avaliar falhas de segurança no sistema Skala |
Documentação Correlata |
Não se aplica |
Observações |
Sem observações. |
1. Glossário de Termos
- Skala: Sistema para gerenciamento de escalas de plantão
2. Introdução
Esta avaliação tem a tarefa de mapear todos os pontos críticos de falhas de segurança no sistema Skala. Neste entendimento foi levantado essas demandas em duas camadas, a primeira checa informações básicas de segurança, na segunda camada é verificado se cada perfil está acessando somente o que deveria acessar.
3. Grupos de políticas de autorizações
O sistema de permissões do Skala é definido da seguinte forma:
Grupo | Perfis unitários |
RHGerente | RH@skala, Gerente@skala |
Nafas | Nafas@skala |
Auditor | Auditor@skala |
AUDITOR || NAFES | Auditor@skala, Nafas@skala |
NAFAS || GERENTE || RH | Nafas@skala, RH@skala, Gerente@skala |
4. Análise/Checklist na primeira camada (proteção das rotas)
4.1 Pacote MVC (Equipe)
Checklist de avaliação | |
Authorize está presente na controller? | [ x ] Sim - [ ] Não - [ ] Não se aplica |
Foi testado no navegador o acesso direto a controller sem autenticação? | [ x ] Sim - [ ] Não - [ ] Não se aplica |
Foi testado no navegador o acesso direto a controller com autenticação diferente? | [ x ] Sim - [ ] Não - [ ] Não se aplica |
ValidateAntiForgeryToken está presente em todas as ActionResult's com o método POST? | [ ] Sim - [ X ] Não - [ ] Não se aplica |
Existe algum uso indiscriminado do recurso AllowAnonymous nas ActionResult's? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
Existe algum alguma serialização que seja acessível pelo usuário na camada de front-end? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
No ORM utilizado existe alguma consulta que esteja em SQL puro? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
Caso sim para a pergunta anterior, está havendo algum tratamento para SQL Injection? | [ ] Sim - [ ] Não - [ x ] Não se aplica |
Existe algum cookie com informações expostas de autenticação? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
4.2 Pacote MVC (Escala)
Checklist de avaliação | |
Authorize está presente na controller? | [ x ] Sim - [ ] Não - [ ] Não se aplica |
Foi testado no navegador o acesso direto a controller sem autenticação? | [ x ] Sim - [ ] Não - [ ] Não se aplica |
Foi testado no navegador o acesso direto a controller com autenticação diferente? | [ x ] Sim - [ ] Não - [ ] Não se aplica |
ValidateAntiForgeryToken está presente em todas as ActionResult's com o método POST? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
Existe algum uso indiscriminado do recurso AllowAnonymous nas ActionResult's? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
Existe algum alguma serialização que seja acessível pelo usuário na camada de front-end? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
No ORM utilizado existe alguma consulta que esteja em SQL puro? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
Caso sim para a pergunta anterior, está havendo algum tratamento para SQL Injection? | [ ] Sim - [ ] Não - [ x ] Não se aplica |
Existe algum cookie com informações expostas de autenticação? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
4.3 Pacote MVC (Home)
Checklist de avaliação | |
Authorize está presente na controller? | [ x ] Sim - [ ] Não - [ ] Não se aplica |
Foi testado no navegador o acesso direto a controller sem autenticação? | [ x ] Sim - [ ] Não - [ ] Não se aplica |
Foi testado no navegador o acesso direto a controller com autenticação diferente? | [ x ] Sim - [ ] Não - [ ] Não se aplica |
ValidateAntiForgeryToken está presente em todas as ActionResult's com o método POST? | [ ] Sim - [ ] Não - [ x ] Não se aplica |
Existe algum uso indiscriminado do recurso AllowAnonymous nas ActionResult's? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
Existe algum alguma serialização que seja acessível pelo usuário na camada de front-end? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
No ORM utilizado existe alguma consulta que esteja em SQL puro? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
Caso sim para a pergunta anterior, está havendo algum tratamento para SQL Injection? | [ ] Sim - [ ] Não - [ x ] Não se aplica |
Existe algum cookie com informações expostas de autenticação? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
4.4 Pacote MVC (Mapa)
Checklist de avaliação | |
Authorize está presente na controller? | [ x ] Sim - [ ] Não - [ ] Não se aplica |
Foi testado no navegador o acesso direto a controller sem autenticação? | [ x ] Sim - [ ] Não - [ ] Não se aplica |
Foi testado no navegador o acesso direto a controller com autenticação diferente? | [ x ] Sim - [ ] Não - [ ] Não se aplica |
ValidateAntiForgeryToken está presente em todas as ActionResult's com o método POST? | [ ] Sim - [ ] Não - [ x ] Não se aplica |
Existe algum uso indiscriminado do recurso AllowAnonymous nas ActionResult's? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
Existe algum alguma serialização que seja acessível pelo usuário na camada de front-end? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
No ORM utilizado existe alguma consulta que esteja em SQL puro? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
Caso sim para a pergunta anterior, está havendo algum tratamento para SQL Injection? | [ ] Sim - [ ] Não - [ x ] Não se aplica |
Existe algum cookie com informações expostas de autenticação? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
4.5 Pacote MVC (Padrao)
Checklist de avaliação | |
Authorize está presente na controller? | [ x ] Sim - [ ] Não - [ ] Não se aplica |
Foi testado no navegador o acesso direto a controller sem autenticação? | [ x ] Sim - [ ] Não - [ ] Não se aplica |
Foi testado no navegador o acesso direto a controller com autenticação diferente? | [ x ] Sim - [ ] Não - [ ] Não se aplica |
ValidateAntiForgeryToken está presente em todas as ActionResult's com o método POST? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
Existe algum uso indiscriminado do recurso AllowAnonymous nas ActionResult's? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
Existe algum alguma serialização que seja acessível pelo usuário na camada de front-end? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
No ORM utilizado existe alguma consulta que esteja em SQL puro? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
Caso sim para a pergunta anterior, está havendo algum tratamento para SQL Injection? | [ ] Sim - [ ] Não - [ x ] Não se aplica |
Existe algum cookie com informações expostas de autenticação? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
4.6 Pacote MVC (Plantao)
Checklist de avaliação | |
Authorize está presente na controller? | [ x ] Sim - [ ] Não - [ ] Não se aplica |
Foi testado no navegador o acesso direto a controller sem autenticação? | [ x ] Sim - [ ] Não - [ ] Não se aplica |
Foi testado no navegador o acesso direto a controller com autenticação diferente? | [ x ] Sim - [ ] Não - [ ] Não se aplica |
ValidateAntiForgeryToken está presente em todas as ActionResult's com o método POST? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
Existe algum uso indiscriminado do recurso AllowAnonymous nas ActionResult's? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
Existe algum alguma serialização que seja acessível pelo usuário na camada de front-end? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
No ORM utilizado existe alguma consulta que esteja em SQL puro? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
Caso sim para a pergunta anterior, está havendo algum tratamento para SQL Injection? | [ ] Sim - [ ] Não - [ x ] Não se aplica |
Existe algum cookie com informações expostas de autenticação? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
4.7 Pacote MVC (Relatorio)
Checklist de avaliação | |
Authorize está presente na controller? | [ x ] Sim - [ ] Não - [ ] Não se aplica |
Foi testado no navegador o acesso direto a controller sem autenticação? | [ x ] Sim - [ ] Não - [ ] Não se aplica |
Foi testado no navegador o acesso direto a controller com autenticação diferente? | [ x ] Sim - [ ] Não - [ ] Não se aplica |
ValidateAntiForgeryToken está presente em todas as ActionResult's com o método POST? | [ x ] Sim - [ ] Não - [ ] Não se aplica |
Existe algum uso indiscriminado do recurso AllowAnonymous nas ActionResult's? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
Existe algum alguma serialização que seja acessível pelo usuário na camada de front-end? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
No ORM utilizado existe alguma consulta que esteja em SQL puro? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
Caso sim para a pergunta anterior, está havendo algum tratamento para SQL Injection? | [ ] Sim - [ ] Não - [ x ] Não se aplica |
Existe algum cookie com informações expostas de autenticação? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
4.8 Pacote MVC (Servidor)
Checklist de avaliação | |
Authorize está presente na controller? | [ x ] Sim - [ ] Não - [ ] Não se aplica |
Foi testado no navegador o acesso direto a controller sem autenticação? | [ x ] Sim - [ ] Não - [ ] Não se aplica |
Foi testado no navegador o acesso direto a controller com autenticação diferente? | [ x ] Sim - [ ] Não - [ ] Não se aplica |
ValidateAntiForgeryToken está presente em todas as ActionResult's com o método POST? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
Existe algum uso indiscriminado do recurso AllowAnonymous nas ActionResult's? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
Existe algum alguma serialização que seja acessível pelo usuário na camada de front-end? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
No ORM utilizado existe alguma consulta que esteja em SQL puro? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
Caso sim para a pergunta anterior, está havendo algum tratamento para SQL Injection? | [ ] Sim - [ ] Não - [ x ] Não se aplica |
Existe algum cookie com informações expostas de autenticação? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
4.9 Pacote MVC (ServidorEquipe)
Checklist de avaliação | |
Authorize está presente na controller? | [ x ] Sim - [ ] Não - [ ] Não se aplica |
Foi testado no navegador o acesso direto a controller sem autenticação? | [ x ] Sim - [ ] Não - [ ] Não se aplica |
Foi testado no navegador o acesso direto a controller com autenticação diferente? | [ x ] Sim - [ ] Não - [ ] Não se aplica |
ValidateAntiForgeryToken está presente em todas as ActionResult's com o método POST? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
Existe algum uso indiscriminado do recurso AllowAnonymous nas ActionResult's? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
Existe algum alguma serialização que seja acessível pelo usuário na camada de front-end? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
No ORM utilizado existe alguma consulta que esteja em SQL puro? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
Caso sim para a pergunta anterior, está havendo algum tratamento para SQL Injection? | [ ] Sim - [ ] Não - [ x ] Não se aplica |
Existe algum cookie com informações expostas de autenticação? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
4.10 Pacote MVC (Solicitacao)
Checklist de avaliação | |
Authorize está presente na controller? | [ x ] Sim - [ ] Não - [ ] Não se aplica |
Foi testado no navegador o acesso direto a controller sem autenticação? | [ x ] Sim - [ ] Não - [ ] Não se aplica |
Foi testado no navegador o acesso direto a controller com autenticação diferente? | [ x ] Sim - [ ] Não - [ ] Não se aplica |
ValidateAntiForgeryToken está presente em todas as ActionResult's com o método POST? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
Existe algum uso indiscriminado do recurso AllowAnonymous nas ActionResult's? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
Existe algum alguma serialização que seja acessível pelo usuário na camada de front-end? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
No ORM utilizado existe alguma consulta que esteja em SQL puro? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
Caso sim para a pergunta anterior, está havendo algum tratamento para SQL Injection? | [ ] Sim - [ ] Não - [ x ] Não se aplica |
Existe algum cookie com informações expostas de autenticação? | [ ] Sim - [ x ] Não - [ ] Não se aplica |
4.11 Laudo técnico:
Laudo técnico:
Introdução Este laudo técnico tem como objetivo avaliar a segurança do código-fonte do sistema Skala. O escopo da análise envolveu a avaliação de vulnerabilidades no código e a identificação de medidas de segurança ausentes que podem ser implementadas para melhorar a proteção do sistema. Metodologia Para realizar a análise, foram utilizadas técnicas de análise estática de código, inspeção manual do código-fonte e testes de vulnerabilidade. Achados Durante a análise do código, foi identificado em vários pontos do sistema uma falha de segurança específica. Foi observado que o sistema não implementa a funcionalidade "ValidateAntiForgeryToken" para prevenir ataques de falsificação de solicitação entre sites (CSRF). A ausência dessa medida de segurança pode permitir que um atacante execute ações maliciosas em nome do usuário legítimo, sem que este perceba. A CSRF é um tipo comum de ataque em que o atacante envia uma solicitação HTTP para o servidor, simulando ser o usuário legítimo. Isso pode ser feito por meio de um link malicioso ou um formulário falso. Sem o uso do "ValidateAntiForgeryToken", o servidor não pode verificar se a solicitação veio do usuário legítimo ou de um atacante.
Recomendações
Recomenda-se fortemente que a funcionalidade "ValidateAntiForgeryToken" seja implementada no sistema para evitar a vulnerabilidade CSRF. Esta medida de segurança é importante para proteger os usuários do sistema e garantir a integridade dos dados armazenados no servidor.
Conclusão
Com base na análise realizada, foi identificada uma falha de segurança no sistema relacionada à ausência da funcionalidade "ValidateAntiForgeryToken". Recomendamos que essa medida de segurança seja implementada no sistema para evitar a vulnerabilidade CSRF. A implementação dessa medida pode melhorar significativamente a segurança do sistema e garantir a proteção dos usuários e dados armazenados. |
5. Análise da segunda camada de proteção (Permissão por perfil)
5.1 Manutenção de equipes
Ações | Observações | Quem pode? |
Ver listagem de equipes | O gerente visualiza somente os departamentos de sua atribuição, já os outros perfis acessam todos os departamentos da sua unidade orçamentária. | RHGerente |
Ver detalhes de equipe | Não existem restrições e o usuário pode ver a equipe apenas trocando o ID na rota | RHGerente |
Adicionar equipe | Não se aplica | RHGerente |
Editar equipe | Não se aplica | RHGerente |
Vincular equipe | Não se aplica | RHGerente |
5.2 Manutenção de escalas
Ações | Observações | Quem pode? |
Ver listagem de escalas | Não se aplica | RHGerente |
Ver detalhes de escala | Não existem restrições e o usuário pode ver a escala apenas trocando o ID na rota | RHGerente |
Adicionar escala | Não se aplica | RHGerente |
Editar escala | Não se aplica | RHGerente |
5.3 Gerenciamento de Mapa
Ações | Observações | Quem pode? |
Ver plantões por equipe | Não existem restrições para que o usuário veja plantões de outras equipes, basta que o usuário troque o ID na URL. | RHGerente |
Gerar o mapa de plantões da equipe | Não existem restrições para que o usuário gere mapa de outras equipes que não seja a sua, basta que o usuário troque o ID na URL. | RHGerente |
Ver plantões por escala | Não existem restrições e o usuário pode ver os plantões que não pertence a escala do qual é gestor, basta que o usuário troque o ID na URL. | RHGerente |
Gerar o mapa de plantões da escala | Não existem restrições e o usuário pode ver o mapa de plantões de escalas do qual não é responsável, basta apenas que o usuário troque o ID na URL. | RHGerente |
Ver plantões do servidor | Não existem restrições e o usuário pode ver plantões de qualquer usuário, basta apenas que o usuário troque o ID na URL. | RHGerente |
Gerar mapa do servidor | Não existem restrições e o usuário pode ver o mapa de qualquer servidor, basta apenas que o usuário troque o ID na URL. | RHGerente |
5.4 Manutenção de Padrão
Ações | Observações | Quem pode? |
Adicionar padrão | Não existem restrições para que o usuário adicione padrão em outra equipe que não seja a sua, basta que o usuário troque o ID na URL. | RHGerente |
Editar padrão | Não existem restrições para que o usuário edite o padrão de outro gestor, basta que o usuário troque o ID na URL. | RHGerente |
Remover padrão | Não existem restrições para que o usuário remova um padrão, basta que o usuário troque o ID na URL. | RHGerente |
5.5 Manutenção de Plantão
Ações | Observações | Quem pode? |
Gerar plantões automáticos | Não se aplica | RHGerente |
5.6 Visualização de relatórios
Ações | Observações | Quem pode? |
Relatório de Plantonistas | Não se aplica | Nafas |
Relatório de Conflitos | Não se aplica | Auditor |
5.7 Manutenção de Servidor
Ações | Observações | Quem pode? |
Visualizar servidores | Não se aplica | RHGerente |
Visualizar detalhes do servidor | Não se aplica | RHGerente |
Salvar servidor |
Não se aplica | RHGerente |
5.8 Gerenciamento de servidores nas equipes
Ações | Observações | Quem pode? |
Remover servidor da equipe | Não existem restrições para que o usuário remova servidores de uma equipe que não seja a sua, basta que o usuário troque o ID na URL. | RHGerente |
Ver detalhes do servidor da equipe | Não existem restrições para que o usuário veja detalhes do servidor de outra escala que não seja a sua, basta que o usuário troque o ID na URL. | RHGerente |
5.9 Gerenciamento de servidores nas equipes
Ações | Observações | Quem pode? |
Remover servidor da equipe | Não existem restrições para que o usuário remova servidores de uma equipe que não seja a sua, basta que o usuário troque o ID na URL. | RHGerente |
Ver detalhes do servidor da equipe | Não existem restrições para que o usuário veja detalhes do servidor de outra escala que não seja a sua, basta que o usuário troque o ID na URL. | RHGerente |
5.10 Gerenciamento de solicitações
Ações | Observações | Quem pode? |
Ver lista de solicitações | Não se aplica | RHGerente |
Visualizar solicitação | Não existem restrições para que o usuário veja uma solicitação que não seja a sua, basta que o usuário troque o ID na URL. | RHGerente |
Deferir solicitação | Não se aplica | RHGerente |
Indeferir solicitação | Não se aplica | RHGerente |
5. Conclusão
Com base na análise técnica foi possível avaliar a situação atual do Skala e pontos de segurança, onde ficou visível que o primeiro nível de proteção estava parcialmente íntegro, mas em algumas rotas do sistema foi possível identificar divergências com acesso irrestrito para funcionalidades que deveriam ter filtros que se baseiam no usuário autenticado.
6. Referências
- https://documentos.sistemas.ro.gov.br/books/skala/page/manual-do-skala-realizar-gerenciamento-das-escalas-dos-servidores-plantonistas