Ícone do site Conviso AppSec

Pesquisa CVE-2021-43076 e os Riscos causados pelo Insecure Design

Insecure Design

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).

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.

  1. Acesso com usuário restrito;
  2. Acesso Web console do equipamento;
  3. Execução do comando fnsysctl;
  4. Execução do comando fnsysctl ls / , para listar os arquivos do sistema.
  5. Execução do comando fnsysctl ftp client, para realizar upload dos arquivos maliciosos com o mesmo nome dos arquivos de sistema.
  6. Upload de arquivos maliciosos na pasta tmp.
  7. Execução do fnsysctl mv Source > destination para movimentação dos arquivos dentro do FortiADC.

Como resultado, identificamos os seguintes impactos:

E as soluções são:

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:

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 

Sair da versão mobile