Ir para o conteúdo principal

Avaliação técnica de vulnerabilidades no código do Skala

Data de elaboração

05/04/2023

Responsável pelo estudo

Autor: José Lucas da Silva Costa

Assistência: 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


  1. 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 da primeira camada de proteção (Checklist técnico de segurança)


4.1 Escopo 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  Escopo 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  Escopo 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  Escopo 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  Escopo 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  Escopo 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  Escopo 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  Escopo 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  Escopo 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  Escopo 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

5. Análise da segunda camada de proteção (Permissões de acesso)


5.1  Manutenção de equipes

Ações Observações Quem pode?
Ver listagem de equipes Não se aplica 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 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 graves com acesso irrestrito para funcionalidades que deveriam ter filtros que se baseiam no usuário autenticado. Vejamos o laudo:

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.


Após a realização de testes adicionais, também identificamos um conjunto de pontos no sistema em que os usuários podem acessar funcionalidades indevidas apenas trocando o ID na URL. Ao fazer isso, os usuários podem acessar informações de plantões e escalas de outros servidores, o que pode representar um sério risco para a privacidade dos usuários e a segurança do sistema.


A vulnerabilidade encontrada pode ser explorada por atacantes mal-intencionados para obter informações confidenciais de outros usuários e comprometer a integridade do sistema. A exploração dessa vulnerabilidade também pode afetar a confidencialidade, integridade e disponibilidade dos dados armazenados no sistema.


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.


Também recomenda-se que sejam implementadas medidas adicionais de segurança, como a implementação de controles de acesso e validação de permissões de usuário em todos os pontos do sistema que envolvem acesso a informações sensíveis. Essas medidas podem ajudar a mitigar a vulnerabilidade identificada e reduzir o risco de violações de segurança.


Conclusão


Com base na análise realizada, foi identificada falhas de segurança no sistema relacionada à ausência da funcionalidade "ValidateAntiForgeryToken". Recomenda-se 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.


Conjuntamente alerta-se sobre a identificação da vulnerabilidade de acesso indevido de informações, que representa um sério risco para a segurança do sistema e a privacidade dos usuários. Recomendamos que a equipe tome medidas imediatas para corrigir a vulnerabilidade identificada e implemente medidas adicionais de segurança para proteger o sistema contra ataques mal-intencionados.


Elaborado por:


José Lucas da Silva Costa

Analista de Desenvolvimento Full-Stack


Porto Velho - RO, 05 de abril de 2023.

6. Referências


  • https://documentos.sistemas.ro.gov.br/books/skala/page/manual-do-skala-realizar-gerenciamento-das-escalas-dos-servidores-plantonistas