🇺🇸 English | 🇧🇷 Português
A pontuação de segurança que importa.
Scanner de Segurança
↓
SARIF
↓
SecScore
↓
PASS / REVIEW / FAIL
SecScore é um motor leve de pontuação de segurança para pipelines CI/CD. Ele avalia findings gerados por scanners de segurança e calcula uma pontuação única de segurança para um Pull Request, permitindo que equipes decidam automaticamente se a mudança deve PASSAR, exigir REVISÃO ou FALHAR.
A ferramenta é agnóstica a scanners e funciona com SARIF, sendo compatível com a maioria das ferramentas modernas de segurança.
Scanners de segurança geram findings. Mas pipelines precisam de decisões.
Scanner → Findings → SecScore → Score → Decisão
Score: 82 / 100
Decisão: REVIEW
- Pontuação de segurança para Pull Requests
- Regras de hard fail para vulnerabilidades críticas
- Compatível com SARIF (Snyk, CodeQL, Semgrep, Checkmarx, etc.)
- Suporte a múltiplos SARIFs — passe saídas de vários scanners em uma única execução
- Filtro diff-aware — avalia apenas findings introduzidos no PR
- Supressão por fingerprint — suprima falsos positivos confirmados de forma rastreável
- Pronto para GitHub Actions
- Decisões baseadas em policy
- Leve e rápido
- Open source
Scanner de Segurança
↓
SARIF
↓
Parser do SecScore
↓
Motor de Policy
↓
Cálculo de Score
↓
PASS / REVIEW / FAIL
Scanners suportados:
- Snyk
- Semgrep
- CodeQL
- Checkmarx
- Trivy
- Qualquer scanner compatível com SARIF
| Scanner | Formato |
|---|---|
| Snyk | SARIF |
| CodeQL | SARIF |
| Semgrep | SARIF |
| Checkmarx | SARIF |
| Checkmarx API | JSON |
Clone o repositório:
git clone https://github.com/cassiodeveloper/secscore
cd secscore
Instale as dependências:
pip install -r requirements.txt
Arquivo SARIF único:
python -m secscore.cli.main pr \
--sarif examples/example-snyk.sarif \
--policy policy/policy-pr.yml \
--no-diff-aware
M�ltiplos arquivos SARIF (v0.3.0+):
python -m secscore.cli.main pr \
--sarif semgrep.sarif,trivy.sarif \
--policy policy/policy-pr.yml \
--no-diff-aware
Nota: use
--no-diff-awareao rodar localmente sem histórico git completo. Em CI, o filtro diff-aware é ativado por padrão e requerfetch-depth: 0no passo de checkout.
Saída esperada:
Score: 85 / 100
Decisão: PASS
Exemplo mínimo:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Run SecScore
uses: cassiodeveloper/secscore@v1
with:
sarif: results.sarifM�ltiplos scanners (v0.3.0+):
- name: Run SecScore
uses: cassiodeveloper/secscore@v1
with:
sarif: "semgrep.sarif,trivy.sarif"Desativar diff-aware:
- name: Run SecScore
uses: cassiodeveloper/secscore@v1
with:
sarif: results.sarif
no_diff_aware: "true"base_score: 100
penalties:
critical: 40
high: 20
medium: 7
low: 2
hard_fails:
- id: SAST_CRITICAL_HIGH_CONF
when:
domain: sast
severity_in: ["critical", "high"]
is_new: true
reason: "Novo finding SAST crítico/alto"suppressions:
deny_fingerprints:
- "abc123def456" # falso positivo confirmado — XSS em helper de testesObtenha o fingerprint em secscore-result.json > hard_fails[].finding_fingerprint.
Arquivos SARIF de exemplo:
examples/
example-snyk.sarif
example-checkmarx.sarif
Workflows de exemplo:
examples/workflows/
example-minimal.yml
example-snyk.yml
example-checkmarx.yml
example-checkmarx-api.yml
example-multi-scanner.yml
secscore/
adapters/
cli/
core/
normalizers/
utils/
examples/
policy/
schema/
Caso você encontre uma vulnerabilidade neste projeto, reporte de forma responsável.
Contribuições são bem-vindas. Leia primeiro:
Este projeto é licenciado sob a PolyForm Noncommercial License 1.0.0.
Uso não-comercial é livre. Uso comercial — incluindo incorporação em produto, serviço ou plataforma pagos — requer permissão explícita do autor.
LICENSE · polyformproject.org/licenses/noncommercial/1.0.0
Scanners de segurança geram ruído.
O SecScore foca no que realmente importa:
decisões de segurança claras e automatizadas em pipelines CI/CD.