O API Vulnerability Analyzer é uma aplicação desenvolvida para analisar especificações OpenAPI, detectando vulnerabilidades relacionadas a práticas inadequadas de segurança, como a ausência de autenticação ou a exposição indevida de chaves API. O projeto é estruturado em duas partes principais: um backend implementado com Flask, responsável pela análise, e um frontend desenvolvido em React, que oferece uma interface gráfica para upload e visualização de resultados.
Aviso: Esta ferramenta é destinada ao uso educacional e de conscientização. Seu uso para fins mal-intencionados é ilegal.
A aplicação está dividida em dois componentes principais:
- Backend (Flask): Responsável pelo processamento dos arquivos enviados e pela análise das vulnerabilidades nas especificações OpenAPI. O backend implementa autenticação JWT, manipulação de arquivos e verificação de falhas de segurança. A função principal
analyze_openapi
realiza verificações críticas, como a ausência de autenticação em endpoints e a exposição de chaves de API. - Frontend (React): Proporciona uma interface gráfica simples e intuitiva, onde o usuário pode fazer upload dos arquivos de especificação, disparar a análise e visualizar os resultados. O frontend exibe as vulnerabilidades encontradas através de gráficos e listas detalhadas, aceitando arquivos nos formatos
.json
,.yaml
ou.yml
.
A seguir estão as instruções para configurar o ambiente, tanto para o backend (Flask) quanto para o frontend (React).
Siga os passos abaixo para configurar o ambiente Flask:
git clone https://github.com/niklaz4/vulnerability-analyzer.git
cd api-vulnerability-analyzer/backend
- Em sistemas Unix ou MacOS:
- Ativar o ambiente virtual:
- Em sistemas Windows:
- Ativar o ambiente virtual:
python3 -m venv venv
source venv/bin/activate
python -m venv venv
venv\Scripts\activate
pip install Flask PyYAML requests PyJWT
python app.py
O servidor Flask estará rodando na porta 5000
.
Para configurar o frontend, siga os passos abaixo:
- Em sistemas Unix ou MacOS, instale via gerenciador de pacotes:
- Em sistemas Windows, baixe e instale o Node.js a partir de https://nodejs.org/.
sudo apt install nodejs npm
cd api-vulnerability-analyzer/frontend
npm install
npm start
O frontend será iniciado na porta 3000
e poderá ser acessado via http://localhost:3000
.
A seguir está o fluxo geral da aplicação:
- O usuário faz upload de um arquivo de especificação OpenAPI (em formato JSON ou YAML) na interface do React.
- O arquivo é enviado para o backend em Flask, que processa o conteúdo.
- A função
analyze_openapi
verifica a presença de autenticação nos endpoints e detecta possíveis vulnerabilidades como a exposição de chaves API. - As vulnerabilidades são classificadas por severidade e retornadas ao frontend.
- O frontend exibe os resultados na forma de gráficos e listas detalhadas para o usuário.
O backend utiliza JSON Web Tokens (JWT) para autenticar os usuários. Apenas usuários autenticados podem acessar funcionalidades críticas, como o upload e análise de especificações OpenAPI. O sistema também inclui suporte para logout, onde os tokens JWT são inseridos em uma lista de revogação (blacklist) para impedir seu reuso.
Este projeto inclui um arquivo docker-compose.yml
para facilitar a configuração do ambiente de desenvolvimento e produção. Com Docker, é possível executar tanto o backend quanto o frontend em contêineres isolados, garantindo a consistência do ambiente e simplificando a implantação.
docker-compose up --build
Isso construirá as imagens e iniciará os contêineres do backend e do frontend simultaneamente.
Durante o desenvolvimento do API Vulnerability Analyzer, foram aplicadas várias práticas recomendadas de segurança para APIs, incluindo:
- Autenticação e Autorização: Proteção de todos os endpoints críticos com autenticação JWT.
- Uso Seguro de Chaves API: Evitar a exposição de chaves API em URLs ou parâmetros de caminho.
- Validação de Entrada: Todos os dados de entrada são validados e sanitizados para prevenir injeções e manipulações maliciosas.
- Revogação de Tokens: Implementação de uma lista de revogação (blacklist) para tokens JWT.