CI/CD & Segurança
Integração com CI/CD, SARIF 2.1.0 & GitHub Actions
Automatize o fuzzer em pipelines de CI/CD: guia completo de uso do action.yml, exportação OASIS SARIF v2.1.0 para a aba Security/Code Scanning do GitHub, catálogo de regras formais, relatórios JUnit XML e traces OpenTelemetry (OTLP JSON).
Segurança Contínua de Concorrência em CI/CD
Vulnerabilidades de concorrência em bancos de dados são categorizadas formalmente sob a classificação CWE-362 (Concurrent Execution using Shared Resource with Improper Synchronization). No contexto corporativo, um bug de concorrência que permite saques duplicados ou reservas além do estoque não é apenas um defeito funcional: é uma falha de segurança financeira de alta severidade.
O ChaosSQL permite transformar testes de isolamento de banco de dados em um portão de qualidade contínuo (Quality Gate), integrando-se nativamente com a aba Security / Code Scanning do GitHub via padrão internacional OASIS SARIF 2.1.0.
Uso da GitHub Action Oficial (action.yml)
Você pode adicionar o ChaosSQL aos seus workflows do GitHub Actions criando o arquivo .github/workflows/concurrency_fuzzer.yml:
name: Database Concurrency & Isolation Audit
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
concurrency-audit:
name: ChaosSQL Isolation Gating
runs-on: ubuntu-latest
permissions:
security-events: write # Obrigatório para publicar alertas na aba Security
contents: read
steps:
- name: Checkout Repositório
uses: actions/checkout@v4
- name: Executar ChaosSQL Action
uses: bregaldahq/chaossql@v1
with:
spec-path: 'specs/banking_lost_update.yaml'
workers: 8
iterations: 50
seed: 42
export-junit: 'reports/chaossql-junit.xml'
export-summary: '$GITHUB_STEP_SUMMARY'
export-repro: 'true'
- name: Executar Auditoria com Exportação SARIF
if: always()
run: |
go run ./cmd/chaossql run specs/banking_lost_update.yaml \
--export-sarif=reports/chaossql.sarif || true
- name: Publicar Alertas no GitHub Code Scanning
uses: github/codeql-action/upload-sarif@v3
if: always()
with:
sarif_file: reports/chaossql.sarif
category: chaossql-isolation-audit
Mapeamento das 9 Regras do Catálogo OASIS SARIF 2.1.0
O módulo de geração SARIF do ChaosSQL (internal/reporter/sarif.go) emite relatórios no formato Static Analysis Results Interchange Format (SARIF) v2.1.0, associando cada violação a regras formais auditáveis:
| Rule ID | Nome Formal | Nível | Fenômeno e Ação de Remediação Recomendada |
|---|---|---|---|
chaossql/P4-lost-update |
LostUpdateAnomaly | error | Duas transações sobrescrevem o mesmo registro baseadas em leituras defasadas. Remediação: Elevar para SERIALIZABLE, usar SELECT ... FOR UPDATE ou atualizar via incremento atômico no SQL. |
chaossql/A5B-write-skew |
WriteSkewAnomaly | error | Transações com conjuntos de escrita disjuntos violam uma invariante global sobre conjuntos de leitura sobrepostos. Remediação: Habilitar Serializable Snapshot Isolation (SSI) ou lock de tabela/materializado. |
chaossql/A5A-read-skew |
ReadSkewAnomaly | warning | Transação lê registro X, outra atualiza X e Y, e a primeira lê Y em estado inconsistente. Remediação: Elevar nível de isolamento para REPEATABLE READ ou SNAPSHOT ISOLATION. |
chaossql/G0-dirty-write |
DirtyWriteAnomaly | error | Transação modifica dado já alterado por outra transação não confirmada. Remediação: Garantir bloqueios exclusivos de escrita durante toda a transação (Strict 2PL). |
chaossql/G1a-dirty-read |
DirtyReadAnomaly | error | Transação lê dados de outra transação que sofreu rollback posterior. Remediação: Elevar nível de isolamento para READ COMMITTED ou superior. |
chaossql/G1b-intermediate-read |
IntermediateReadAnomaly | error | Transação observa valor intermediário de outra transação ainda em andamento. Remediação: Reforçar barreiras de visibilidade atômica multiversão (MVCC). |
chaossql/G1c-circular-info |
CircularInfoAnomaly | error | Ciclo de dependências mútuas de escrita e leitura entre transações. Remediação: Elevar para SERIALIZABLE para forçar ordenação acíclica no grafo de serialização. |
chaossql/G2-anti-dependency |
AntiDependencyCycle | error | Ciclo contendo arestas de anti-dependência (rw), violando serializabilidade estrita. Remediação: Ativar SSI (Serializable Snapshot Isolation) ou locks de predicado. |
chaossql/G-DL-deadlock |
DeadlockCycleAnomaly | warning | Bloqueio mútuo circular entre transações concorrentes provocando aborts. Remediação: Adotar ordenação canônica estrita na aquisição de locks (ex: ordenar por ID crescente). |
Relatórios JUnit XML & GitHub Step Summary
Além do SARIF, o ChaosSQL gera artefatos específicos para visualização imediata nos painéis de CI:
- JUnit XML (
--export-junit=junit.xml): Gera relatórios consumidos pelo GitHub Actions Test Reporter, GitLab CI e Azure Pipelines. Falhas de concorrência são mapeadas para tags<failure>com a classificação da anomalia e diagrama Mermaid do ciclo. - GitHub Step Summary (
--export-summary=$GITHUB_STEP_SUMMARY): Renderiza tabelas formatadas em Markdown com as métricas da execução, anomalias encontradas e o código minimal reproduzível gerado pelo ddmin diretamente na página do workflow do GitHub Actions.
Observabilidade com OpenTelemetry (OTLP JSON)
Com a flag --export-otel=trace_otel.json, o ChaosSQL converte toda a timeline de concorrência em um trace distribuído compatível com a especificação OpenTelemetry Tracing API. Cada worker goroutine é representado como um Span pai, e cada query SQL como um Span filho com atributos semânticos padronizados (db.system, db.statement, db.operation, thread.id). O arquivo pode ser ingerido diretamente em instâncias do Jaeger, Grafana Tempo ou Datadog para análise avançada de latência e concorrência.