Skip to main content
All posts
DevSecOps

Auditando seu próprio repositório sem ser tratado como invasor: DevSecOps na bf16.ai

Classificadores automáticos interrompem rotineiramente triagens SAST no meio do stream ao gerar testes de regressão SQLi ou SSRF. Monte uma pipeline ZDR em duas etapas na bf16.ai.

TL;DR · Resumo de Engenharia AppSec

  • Paradoxo defensivo: APIs tradicionais cortam respostas no meio do stream (finish_reason: "content_filter") ao gerar testes locais de regressão SQLi/SSRF para o seu próprio código.
  • Arquitetura em 2 etapas na bf16.ai: Filtre primeiro os falsos positivos do Semgrep no deepseek/deepseek-v4.1-flash-abliterated ($0.30/$0.05/$1.20) e gere o patch + teste Vitest no zai-org/glm-5.3-abliterated ($1.40/$0.30/$4.40).
  • Zero-Prompt Retention (ZDR): 0 bytes de código proprietário gravados em disco, com preços em paridade com as APIs oficiais dos fabricantes.

1. Por que travas cibernéticas cortam pipelines defensivas no meio do stream

Grande parte dos alertas brutos do Semgrep ou CodeQL é ruído inalcançável. Ao usar um LLM comum para rastrear o fluxo source-to-sink e emitir um teste unitário no Vitest, o classificador de saída frequentemente trunca o JSON no token 64 ao ver aspas SQL escapadas:

[ci:sast-triage] Alert #418 -> semgrep.javascript.express.db.sequelize-raw-sql
[ci:sast-triage] Requesting source-to-sink reachability + Vitest regression test...
[upstream:frontier-api] HTTP 200 (stream truncated at token 64)
  finish_reason: "content_filter"
  error: "Output halted by automated cyber-risk safeguard: response appeared to construct a SQL injection proof-of-concept payload."
[ci:sast-triage] ERROR: Unexpected EOF in JSON stream. PR #892 security check marked INCONCLUSIVE.

2. Remediação em duas etapas na bf16.ai com Retenção Zero (ZDR)

Na bf16.ai, você pode combinar dois modelos abliterated com janela de 1M tokens:

  1. Etapa 1 — Filtro rápido (deepseek/deepseek-v4.1-flash-abliterated): Descarta alertas já protegidos por middlewares e Zod.
  2. Etapa 2 — Teste e patch (zai-org/glm-5.3-abliterated): Com json_schema estrito, entrega a trilha exata, o teste Vitest e o diff git apply sem cortes.

Loop DevSecOps: Diff do PR auditado nos endpoints ZDR da bf16.ai gerando testes locais e patches validados.

▲ Loop DevSecOps: Diff do PR auditado nos endpoints ZDR da bf16.ai gerando testes locais e patches validados.

3. Motor TypeScript de triagem e workflow no GitHub Actions

A abliteração ortogonal preserva a máquina de estados JSON, garantindo parse confiável mesmo com strings de teste complexas:

import OpenAI from 'openai';

const bf16 = new OpenAI({
  baseURL: 'https://api.bf16.ai/v1',
  apiKey: process.env.BF16_SEC_AUDIT_KEY,
});

export async function auditDiffAndEmitPatch(gitDiff: string, routeContext: string) {
  // Pass 2 Deep Remediation on GLM-5.3 Flagship (Abliterated)
  const response = await bf16.chat.completions.create({
    model: 'zai-org/glm-5.3-abliterated',
    temperature: 0.1,
    response_format: {
      type: 'json_schema',
      json_schema: {
        name: 'sast_remediation_bundle',
        strict: true,
        schema: {
          type: 'object',
          additionalProperties: false,
          required: ['exploitable', 'sink_trace', 'vitest_regression_spec', 'unified_patch'],
          properties: {
            exploitable: { type: 'boolean' },
            sink_trace: { type: 'string' },
            vitest_regression_spec: { type: 'string' },
            unified_patch: { type: 'string' },
          },
        },
      },
    },
    messages: [
      {
        role: 'system',
        content:
          'You are an application security remediation engine auditing first-party repository code. ' +
          'Determine whether user-controlled input reaches the sink unparameterized. If exploitable, ' +
          'emit a local Vitest regression test and a minimal unified diff fixing the sink.',
      },
      { role: 'user', content: `## Route Context\n${routeContext}\n\n## PR Diff\n${gitDiff}` },
    ],
  });

  return JSON.parse(response.choices[0]?.message?.content ?? '{}');
}

Conecte ao GitHub Actions sem mensalidades por assento. Como exibido em bf16.ai/pricing, os preços seguem a paridade oficial por token:

# .github/workflows/bf16-sast-remediation.yml
name: PR Security Triage (bf16.ai ZDR)
on: [pull_request]

jobs:
  sast_verify:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - name: Run Semgrep & Triage Reachable Sinks via bf16.ai
        env:
          BF16_SEC_AUDIT_KEY: ${{ secrets.BF16_SEC_AUDIT_KEY }}
        run: |
          semgrep scan --config auto --json > semgrep.json
          node scripts/sec-triage-bf16.mjs semgrep.json
          pnpm vitest run tests/security-regressions

4. Comparação de pipelines e custo por Pull Request

Rotear a Etapa 1 para o deepseek-v4.1-flash-abliterated e a Etapa 2 para o zai-org/glm-5.3-abliterated mantém a maioria dos alertas longe do preço do modelo carro-chefe: achados inalcançáveis são descartados a $0.30 / 1M de entrada, e só os sinks alcançáveis confirmados (SQLi, SSRF, path traversal, confusão de alg no JWT ou bugs de timing no HMAC de webhooks) são cobrados a $1.40 / 1M de entrada e $4.40 / 1M de saída. Meça o custo por PR e a taxa de aprovação dos patches nos seus próprios repositórios antes de contar com esses números:

Pipeline SASTO Que Acontece com Cada Alerta
Semgrep puroTodo alerta, alcançável ou não, espera triagem manual e uma correção escrita à mão
Semgrep + API com filtro rígidoA triagem pode parar no meio do stream com content_filter, deixando JSON truncado e uma verificação inconclusiva
Semgrep + bf16.ai (2 etapas)Sinks alcançáveis recebem a trilha, um teste de regressão Vitest e um patch que precisa passar no CI antes da revisão

5. 4 diretrizes de segurança e conformidade para auditoria automatizada

  1. Audite apenas repositórios próprios ou formalmente autorizados.
  2. Rode os testes gerados somente em containers efêmeros isolados (Testcontainers).
  3. Exija suíte verde e revisão humana antes de aprovar o merge do patch.
  4. Crie uma chave sk-bf16-v1- dedicada ao CI com limite diário em USD.