Vulnerabilidade de Software Para Devs
Tags: devsecops, security, programming, braziliandevs
Published: 2023-05-06 13:24:16

O mínimo que qualquer pessoa desenvolvedora deve saber sobre vulnerabilidades

> TL,DR
> O artigo aborda o conceito de vulnerabilidades, suas formas de exploração e classificação através de CVEs, além de apresentar as principais ferramentas utilizadas para identificá-las, bem como a importância do OWASP TOP 10 na garantia da segurança de aplicativos WEB.

Durante os vários anos que eu trabalhei como desenvolvedora, a segurança não era um grande problema na minha cabeça. A maior parte do tempo eu já recebia de forma meio pronta o que eu deveria fazer para corrigir a vulnerabilidade (geralmente indicada por um pentester ou pela OWASP).
Hoje, trabalhando em um time de segurança, eu consigo perceber como a maior parte dos devs (e isso me inclui no passado) não possuem clareza sobre o que pode ser classificado como uma vulnerabilidade, como é feita a classificação e também como elas são descobertas. São estes temas que pretendo discorrer neste artigo.

## Entendendo o que é uma vulnerabilidade

![IMulher gesticulando enquanto fala e a legenda "let me explain"](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5qpkz9ekkv6urgzgunds.gif)

Basicamente, qualquer coisa que possa ser usada ou explorada de forma intenciona (e principalmente maliciosa) por pessoas que não deveriam poder realizar aquela ação.
Uma vulnerabilidade pode vir de várias formas: erro de código ou de arquitetura de sistema, portas abertas na infraestrutura, falhas na configuração de políticas de acesso ou de rede, ausência de validações em entradas de dados, ausência ou má configuração de criptografias... Esta lista pode ser infinita.

![Homem falando com a legenda "Frank, i have find a idea of a bug that kind offensive"](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9czaxeznex6f7si4a4x3.gif)

## Encontrando vulnerabilidades

O grande trabalho dos times de segurança é encontrar as possíveis vulnerabilidades no sistema e corrigi-las antes que ocorra um ataque. Para isso, são usadas várias ferramentas. Aqui listaremos algumas das mais comuns.

### Teste de Penetração (Pentest)

Não é necessariamente o mais comum, mas com certeza é o mais famoso, já que emula a forma como os crackers atacam o sistema. 

### Análise Estática de Segurança de Aplicação (Static Application Security Testing - SAST)

É um scan que é realizado na base de código (incluindo binários, em alguns casos) para encontrar algumas vulnerabilidades de "assinatura", como por exemplo vulnerabilidade de dependências.

### Análise Dinâmica de Segurança de Aplicação(Dynamic Application Security Testing - DAST)
 
São testes automáticos que simulam um ataque ativo contra a aplicação, com o objetivo de encontrar vulnerabilidades.

### Auditoria de configurações 

Geralmente é utilizado para validar que todas as configurações (como por exemplo as de IAM ou de criptografia) estão como o desejado, e que estão em pleno funcionamento.

## Entendendo CVEs

![Homem gesticulando enquanto fala e a legenda "Visually, i'm going to be honest, it look a mess"](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z1wrfwh73rk6zcyo35p9.gif)

CVE - Common Vulnerabilities and Exposures é uma lista pública de falhas de segurança. São classificadas por um número do tipo CVE-2023-1234567, com os quatro primeiros algarismos sempre representando o ano em que a vulnerabilidade foi registrada. Este número é chamado de CNA (CVE Numbering Authority). Ao ser tornada pública, uma CVE necessariamente deve ter um CNA, uma descrição da vulnerabilidade e evidências da existência dela.
A lista de CVEs é mantida pela [Mitre Corporation](https://cve.mitre.org/).

### Reconhecendo uma CVE

Para ser considerada uma CVE, uma vulnerabilidade deve atender a três critérios:

**1. Resolução independente**
A correção da vulnerabilidade não deve ser dependente da correção de nenhuma outra vulnerabilidade.

**2. Agente afetado reconhecido**
O fornecedor ou mantenedor daquele software (ou hardware) deve reconhecer que determinada falha afeta a segurança do software OU alguém deve detalhar um relatório de vulnerabilidade expondo o impacto daquela falha, e também a forma como ela viola a politica daquele produto.

**3. Afetar somente um ambiente**
Bugs que afetam ambientes diferentes possuem diferentes CVEs para cada produto. Em caso de bibliotecas compartilhadas (como no caso do [Log4J](https://www.cisa.gov/news-events/news/apache-log4j-vulnerability-guidance)), só terá uma CVE única como uma vulnerabilidade caso seja impossível usar o código da biblioteca sem ser afetado pelo bug.

## OWASP TOP 10

![Criança falando e a legenda "Maybe there's a list"](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3b5v2whdx17zbmwgfak3.gif)

[OWASP](https://owasp.org/) é uma organização sem fins lucrativos que se dedica a garantir a segurança de aplicativos WEB. Regularmente ela publica um relatório chamado OWASP TOP 10, citando as dez vulnerabilidades mais exploradas. Este relatório é feito de forma colaborativa por uma equipe que reúne especialistas em segurança de todo o mundo. O último relatório foi publicado em 2021 e trouxe três novas vulnerabilidades para a lista.

## Conclusão

![dois homens conversando enquanto um gesticula e a legenda "i would expect that to be crystal clear"](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/17dz7x4n080xvpypdi0e.gif)

Neste artigo, foi possível entender o que é uma vulnerabilidade, os tipos mais comuns, como são encontradas e classificadas através de CVEs e a importância do OWASP TOP 10. É evidente que a segurança da informação é cada vez mais importante no mundo digital em que vivemos e a conscientização sobre vulnerabilidades é fundamental para prevenir ataques cibernéticos e proteger dados sensíveis. Cabe aos desenvolvedores e equipes de segurança trabalharem juntos para garantir a segurança dos sistemas e a proteção das informações confidenciais dos usuários.