Ir para o conteúdo principal

[incompleto] Avaliação técnica de vulnerabilidades no código do SIF

Data de elaboração

05/04/2023

Responsável pelo estudo

José Henrique dos Santos Nogueira

Carlos Eduardo Carvalho do Viso


Equipe do estudo

José Lucas da Silva Costa

João Pedro Rocha Brito

Daniel Ribeiro Camboim de Oliveira

Alvo Sistema de Frequência
Origem

Falhas de segurança

Objetivo

Avaliar falhas de segurança no SIF
Documentação Correlata

Não se aplica.

Observações

Sem observações.

1. Glossário de Termos


  1. SIF- Sistema de Frequência.
  2. BAF- Boletim Anual de Frequência.

2. Introdução


A avaliação técnica tem como objetivo realizar o mapeamento dos principais pontos críticos em relação às falhas de segurança presentes no sistema SIF, a nível de código. Diante disso, a demanda foi feita em duas camadas: A primeira camada consiste em analisar informações básicas de segurança, já na segunda, foi verificado a limitação de acesso de acordo com o perfil, ou seja, cada perfil deverá acessar apenas as informações e funcionalidades definidas na regra de negócio.

3. Grupos de políticas de autorizações


O sistema de permissões do SIF é definido da seguinte forma:

Grupo Perfis unitários
PodeAcessar RecursosHumanos@SIF, Gerente@SIF, Nafas@SIF, ResponsavelDaFrequencia@SIF
PodeGerenciarFrequencia
RecursosHumanos@SIF, Gerente@SIF, Nafas@SIF, ResponsavelDaFrequencia@SIF
PodeGerenciarBafs RecursosHumanos@SIF, Gerente@SIF
PodeGerenciarBafsJaHomologados Nafas@SIF
PodeGerenciarEstacoes Tecnico@SIF

4. Análise/Checklist na primeira camada (proteção das rotas)


4.1 Pacote MVC (Baf)

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? [ x ] Sim - [  ] 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 (CertidaoDeFrequencia)

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? [ x ] Sim - [  ] 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 (Colaboradores)

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? [ x ] Sim - [  ] 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 (Consultas)

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? [ x ] Sim - [  ] 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 (CorrigirFrequencia)

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? [ x ] Sim - [  ] 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 (Documentos)

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? [ x ] Sim - [  ] 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 (Estacao)

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? [ x ] Sim - [  ] 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 (Frequencia)

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? [ x ] Sim - [  ] 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 (FrequenciaManual)

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? [ x ] Sim - [  ] 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 (HistoricoDeHomologacao)

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? [ x ] Sim - [  ] 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 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? [ x ] Sim - [  ] 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.12 Pacote MVC (HomologacaoDaFolha)

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? [ x ] Sim - [  ] 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.13 Pacote MVC (HorasAcumuladas)

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? [ x ] Sim - [  ] 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.14 Pacote MVC (Organograma)

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? [ x ] Sim - [  ] 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.15 Pacote MVC (Registros)

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? [ x ] Sim - [  ] 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.16 Pacote MVC (SolicitacaoDeCompensacaoDeBancoDeHoras)

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? [ x ] Sim - [  ] 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ão de acesso)


5.1 Manutenção de Bafs

Ações Observações Quem pode?
ListarBafs O usuário com perfil Recursos Humanos visualiza somente os bafs de sua unidade orçamentária. Porém, essa restrição está presente apenas na page _menu (front-end), na controller (back-end) não existem essa restrição.  RecursosHumanos/Gerente
CarregarBafs Não existe restrição no back-end. RecursosHumanos/Gerente
CriarBafs  Não se aplica RecursosHumanos/Gerente
GravarBaf Não se aplica RecursosHumanos/Gerente
InvalidarBaf colocar autorização para os perfils adequado e proteger o ID do baf RecursosHumanos/Gerente
visualizarPDF colocar autorização para os perfils adequado e proteger o ID do baf RecursosHumanos/Gerente
Homologar Não se aplica Nafas
Cancelar Não se aplica RecursosHumanos/Gerente
CanceladoPeloNafas Não se aplica Nafas
DetalharBafHomologado colocar autorização para os perfils adequado e proteger o ID do baf RecursosHumanos/Gerente
Download Não se aplica RecursosHumanos/Gerente
CarregarViewBags Não se aplica RecursosHumanos/Gerente

5.2 Gerenciamento da Certidão de Frequência

Ações Observações Quem pode?
Index  não se aplica. RecursosHumanos/Gerente/Nafas/ResponsavelDaFrequencia
Emitir Não existe restrição no back-end. RecursosHumanos/Gerente/Nafas/ResponsavelDaFrequencia
Autenticacao Todos podem acessar a autentificação da frequência, mesmo que não tenha perfil no sif.  Todos
AutenticacaoDoToken Todos podem acessar a autentificação da frequência, mesmo que não tenha perfil no sif.  Todos

5.3 Gerenciamento de colaboradores

Ações Observações Quem pode?
ListarPorSetor apenas proteger o ID do setor RecursosHumanos/Gerente/Nafas/ResponsavelDaFrequencia

5.4 Gerenciamento de consultas

Ações Observações Quem pode?
ConsultarColaboradoresComFaltas apenas proteger o ID do setor RecursosHumanos/Gerente/Nafas/ResponsavelDaFrequencia

6. Conclusão

[Adicionar a conclusão baseada nas análises realizadas em primeira e segunda camada]


7. Referências


https://documentos.sistemas.ro.gov.br/books/sif-sistema-de-frequencia/page/manual-sif-para-chefes-imediato

https://documentos.sistemas.ro.gov.br/books/sif-sistema-de-frequencia/page/solicitacao-de-acesso-ao-sif

https://documentos.sistemas.ro.gov.br/books/sif-sistema-de-frequencia/page/manual-sif-para-rh