O OWASP TOP 10 é um projeto com o intuito de divulgar a desenvolvedores e especialistas de segurança uma lista com 10 categorias das vulnerabilidades mais recorrentes em aplicações web, a partir da submissão de reports. Com a divulgação da última edição do OWASP TOP 10 Vulnerabilities 2021, três novas categorias foram adicionadas e outras quatro tiveram o escopo alterado. Neste artigo, vamos analisar um estudo de caso de uma CVE encontrada no Produto da Fortinet – FortiADC, que consiste em uma vulnerabilidade da categoria A4 – Insecure Design (design inseguro).
Você também pode ouvir esse conteúdo:
Esta categoria esta relacionada aos riscos gerados por uma arquitetura incorretamente planejada ou mal construída. A categoria expõe as inúmeras fraquezas que uma aplicação pode apresentar em relação à sua construção, evidenciando questões desde a geração de mensagens de erros, armazenamento de credenciais, como também, demais limites de confiança do software.
Existem dezenas de CWEs relacionadas a este tópico, abordando uso inadequado de APIs, funções de aplicativos, execução de comandos de entrada em URLs (IDOR), integridade na comunicação do aplicativo e muitas outras fragilidades, como no caso da CVE-2021-43076 explicada mais à frente.
O Design Inseguro pode resultar em graves consequências, uma vez que ataques a este tipo de fraqueza podem interferir na execução lógica da aplicação e resultar em possíveis vazamentos de dados sensíveis.
Estudo de Caso
Foi identificada uma vulnerabilidade no Produto da Fortinet – FortiADC , classificada com [CWE-269] gerenciamento de privilégios impróprios. Essa fraqueza pode ser classificada como A4 – Insecure Design.
Em linhas gerais, é possível acessar um CLI e usar o fnsysctl para fazer muitas coisas, por exemplo, fazer upload de arquivos usando FTP e colocar arquivos HTML no sistema de arquivos. O principal problema é a escalada de privilégios, que, consequentemente, pode trazer outros problemas. Neste caso, é possível usar comandos como mv e cp, onde um atacante, autenticado com perfil de usuário restrito, consegue modificar os arquivos do sistema usando o acesso ao shell.
Mas qual seria o erro de design neste caso? Inicialmente foi identificado que a Fortinet disponibiliza um comando Unix customizado chamado fnsysctl. Ele é utilizado em determinados casos, como por exemplo, para configurar modems 3g e 4g no Fortigate.
Este mesmo comando foi identificado no FortiADC, possibilitando algumas ações criticas, como no caso de upload via FTP. Portanto para exploração da vulnerabilidade foram realizados os seguintes passos.
- Acesso com usuário restrito;
- Acesso Web console do equipamento;
- Execução do comando fnsysctl;
- Execução do comando fnsysctl ls / , para listar os arquivos do sistema.
- Execução do comando fnsysctl ftp client, para realizar upload dos arquivos maliciosos com o mesmo nome dos arquivos de sistema.
- Upload de arquivos maliciosos na pasta tmp.
- Execução do fnsysctl mv Source > destination para movimentação dos arquivos dentro do FortiADC.
Como resultado, identificamos os seguintes impactos:
- Movimentação de arquivos com usuário restrito;
- Modificação da interface web;
- Alteração de alguns comportamentos da aplicação.
E as soluções são:
- Atualize para o FortiADC versão 6.2.2 ou superior.
- Atualize para o FortiADC versão 7.0.0 ou superior
Mitigações
Para evitar vulnerabilidades de design inseguro, é necessário considerar aspectos de segurança desde as fases iniciais de desenvolvimento de software, isso é: análise de requisitos, arquitetura de software, desenvolvimento, testes e implementação.
É imprescindível também implementar processos seguros desde a concepção do projeto. Falamos aqui da prática conhecida como Shift-Left, que consiste em mover o início da fase de testes para a esquerda, ou seja, ao invés dos testes ocorrerem apenas na fase final da esteira, os testes passam a pendurar durante todo o ciclo de desenvolvimento.
A OWASP recomenda uma série de medidas que devem ser levadas em consideração para prevenir a ocorrência de vulnerabilidades de design inseguro, tais como:
- Implementar um programa de AppSec para avaliar e projetar controles de segurança e privacidade.
- Utilizar ferramentas automatizadas para análises de código como SAST, SCA e DAST.
- Realizar modelagem de ameaça em processos críticos para identificar possíveis vetores de ataque.
- Utilizar apenas bibliotecas atualizadas e confiáveis.
- Implementar controles de segurança em diferentes camadas da arquitetura.
- Considerar o conceito de privilégio mínimo na definição de permissões de usuários.
- Realizar testes de unidade para validar requisitos de segurança em funções críticas da aplicação considerando o modelo de ameaças.
Além dos pontos elencados acima, um grande aliado no processo de desenvolvimento seguro é o framework OWASP SAMM, que foi projetado visando fornecer um conjunto de práticas de segurança que atende todo o ciclo de vida do software considerando diferentes níveis de maturidade.
Vale reforçar que nenhuma aplicação é completamente segura. Entretanto, durante o projeto de software, devemos nos certificar de que o design do projeto implementa as melhores práticas de segurança. Utilizar um ciclo de desenvolvimento seguro, ter atenção com os padrões e realizar testes periódicos contribuem para a criação de uma aplicação confiável e madura.
Autores:
Fernando Vasques – Information Security Analyst
Danilo Costa – Appsec Consultant
Luiz Henrique Custódio – Application Security Analyst
