ChaosSQL

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.