Este repositório é um laboratório prático de DevSecOps, focado na implementação de uma esteira de CI/CD blindada (Shift Left) para uma aplicação Python/Flask propositalmente vulnerável (OWASP Top 10).
- Linguagem: Python 3.12+ (Gerenciado via uv)
- Framework: Flask
- Orquestração CI/CD: GitHub Actions
- Infraestrutura Local: WSL2 (Kali Linux) / Proxmox
- Análise de Dados: Pandas & Streamlit
├── .github/workflows/ # Esteira de segurança (YAML)
├── src/ # Código-fonte e Dashboard Analytics
├── public/ # Artefatos e Reports de segurança (Ignorado pelo Git)
├── pyproject.toml # Gestão moderna de dependências com UV
└── uv.lock # Snapshot determinístico do ambiente
- SonarLint: Feedback em tempo real na IDE para detecção de falhas de código.
- UV Sync: Isolamento de ambiente e garantia de integridade das bibliotecas via Checksums.
A cada push ou PR, a esteira executa automaticamente:
- SAST (Static Application Security Testing): O Bandit varre o código em busca de falhas como SQL Injection e XSS.
- SCA (Software Composition Analysis): O Trivy analisa o
uv.lockem busca de dependências com CVEs conhecidas. - SBOM (Software Bill of Materials): Geração automática de inventário no padrão CycloneDX (JSON).
- Security Gate: O pipeline é bloqueado (Exit Code 1) se falhas de severidade CRITICAL ou HIGH forem detectadas.
- GitHub Pages: Publicação automática do relatório HTML do Bandit.
- Issue Automation: Abertura automática de Issues no GitHub caso o scan de dependências encontre vulnerabilidades críticas.
- GitHub Artifacts: Armazenamento dos arquivos JSON para auditoria e análise de dados posterior.
Desenvolvemos uma ferramenta de análise local para consumir os dados do pipeline:
- Input: Arquivo
sbom.jsongerado pelo Trivy. - Processamento: Normalização de dados aninhados via Pandas.
- Visualização: Gráficos interativos em Streamlit/Plotly mostrando a distribuição de severidade das falhas detectadas.
- Baixe o Artefato: Vá na aba Actions do GitHub e baixe o
security-reports. - Extraia os Dados: Coloque o arquivo
sbom.jsonna pastapublic/. - Instale as dependências:
uv sync
- Execute:
uv run streamlit run src/dashboard.py