JustCyber

JustCyber Bounty

Receber relatório de vulnerabilidade de pesquisador externo com escopo declarado, triagem rastreável e trilha — em vez de caixa de e-mail e planilha.

O Bounty é a plataforma de programa de recompensa e de divulgação coordenada (VDP) dentro do tenant. A empresa publica um programa com política, tabela de recompensa e escopo declarado ativo a ativo (in-scope e out-of-scope, com consentimento carimbado). O pesquisador envia o relatório com prova de conceito obrigatória. A partir daí, uma máquina de estados com arestas fixas conduz o caso: novo, em revisão de IA, precisa de informação, pendente da empresa, triado, retestando, resolvido, divulgação coordenada — e os terminais duplicado, não aplicável, informativo e spam. Transição fora do grafo é recusada com conflito, não silenciosamente aceita.

O porto-seguro é aplicado antes de persistir, não depois. Se o ativo afetado casa uma regra out-of-scope, a submissão é rejeitada; se não casa nenhuma regra in-scope com consentimento registrado, também; e programa sem escopo declarado não aceita submissão nenhuma. O campo do ativo afetado é obrigatório justamente para fechar o atalho de 'casar por tipo'. Testar fora do escopo não tem autorização expressa — logo não carrega o porto-seguro, e o sistema diz isso na cara.

A triagem de IA é recomendação, nunca decisão. Ela grava veredito sugerido, severidade sugerida, um score determinístico de AI slop e o candidato a duplicata, e move o caso apenas de 'novo' para 'em revisão de IA'; quem decide o resto é a pessoa com escopo de triagem. Como uma prova de conceito costuma carregar exploit, dump e credencial de terceiro, ela é classificada como dado sensível: o envio ao modelo é bloqueado por padrão e só passa quando o programa declara explicitamente a aprovação. Pelo mesmo motivo, quem tem apenas permissão de leitura não enxerga a PoC de outro pesquisador — só o autor ou quem tem autoridade de triagem — e o que sobra passa por mascaramento de PII e bloqueio de segredo antes de ser exibido.

O que faz hoje

Capacidades em operação

Cada item corresponde a funcionalidade que existe no código e é alcançável por um usuário com o escopo correto.

  • Programa com escopo declarado e porto-seguro

    Criação, edição e ciclo de vida do programa (rascunho, publicado, pausado, encerrado), com escopos in/out por tipo de ativo e identificador, e consentimento carimbado por escopo.

  • Submissão validada contra o escopo antes de gravar

    Ativo fora de escopo, ativo sem correspondência in-scope consentida ou programa sem escopo declarado derrubam a submissão com erro de validação explícito. Programa não publicado não recebe relatório.

  • Máquina de estados com arestas fixas

    Onze estados e transições declaradas em código. Marcar como duplicado exige apontar a submissão original, e a original é conferida no mesmo tenant. Datas de resolução e de divulgação são carimbadas pela transição, não pelo cliente.

  • Triagem por IA como sugestão

    Veredito (válido, inválido, precisa de informação, suspeita de duplicata) e severidade estimada, via o Gateway de IA. A justificativa que o prompt pede ao modelo é descartada na leitura — hoje não há campo que a persista nem a devolva ao triador.

  • Anti-AI-slop e dedup heurístico

    Score determinístico a partir de sinais do relatório (tamanho da PoC e da descrição, marcadores técnicos de impacto, frases típicas de geração por IA, divulgação de uso de IA). Ele é gravado como está, ao lado do veredito do modelo — os dois chegam separados ao triador, não fundidos num número só. O que o código de fato cruza é o dedup com o veredito: candidato acima do limiar de similaridade reescreve o veredito para 'duplicado_suspeito'.

  • Isolamento fino da prova de conceito

    Autorização por atributo no caminho de leitura: não-dono sem escopo de triagem é negado, e a exibição para leitor não-dono passa por mascaramento de PII — campo com cartão ou segredo é redigido por inteiro, visível apenas ao autor.

  • Reputação, sinal, impacto e suspensão automática

    Eventos de reputação append-only com projeção agregada: triado e resolvido somam 7, spam tira 10, não aplicável tira 5. Sinal é a reputação dividida pelo total de relatórios, então ruído derruba a média. Cinco inválidos consecutivos suspendem o pesquisador por 30 dias.

  • Ranking por segmento

    Leaderboard separando pesquisadores humanos de coletivos de IA, com score normalizado sobre o conjunto retornado.

  • Recompensa registrada em escrow

    Depósito em escrow (retido) e liberação vinculada à submissão resolvida, com idempotência forte no banco: Idempotency-Key é obrigatório e chave reutilizada devolve conflito explícito, nunca grava o mesmo depósito duas vezes. Nada é cobrado: o escrow é uma linha no ledger de recompensas — sem PSP, sem custódia do valor.

  • Trilha de auditoria em toda escrita

    Criação de programa, transição de programa e de submissão, envio do relatório, escrow e liberação gravam audit_log append-only na mesma transação. A triagem de IA fica de fora do audit_log: o rastro dela são as colunas ai_* da submissão e a trilha de IA (ai_usage_event / ai_egress_log).

O que fica com você

Entregáveis

  • Marketplace de programas (/bounty) com filtros por tipo, visibilidade, status e tipo de ativo
  • Página do programa com política, escopo e tabela de recompensa
  • Formulário de envio de relatório com prova de conceito obrigatória
  • Ranking do tenant (/bounty/ranking), visível a quem está autenticado com o escopo bounty:hunter:read — não há versão pública
  • Fila de submissões com veredito de IA, score de slop e candidato a duplicata para o triador
  • Ledger de recompensas por submissão (bounty_reward_transactions)
  • Perfil de hunter com reputação, sinal, impacto, total e válidos
  • Trilha append-only em audit_log e eventos de reputação

O que este módulo não faz

Não há pagamento. deposit_escrow e release_reward apenas gravam linhas no ledger: não existe PSP integrado, não há cobrança da empresa, não há custódia do valor e não há PIX. A liberação para em 'released' com pix_status='pendente_pix'; o estado 'paid' existe no schema e nunca é atingido pelo código. Não há KYC: kyc_status é lido e exibido, mas nenhuma rota o altera e não existe fluxo de verificação de identidade do pesquisador. O segmento 'ia' do ranking filtra por is_ai_collective, mas nenhuma rota define essa flag — o segmento volta vazio a menos que a linha seja marcada direto no banco. O dedup é textual (Jaccard sobre tokens de título, ativo e tipo contra submissões abertas do mesmo programa), não vetorial; o dedup por embeddings está declarado como evolução, não construído. A penalidade de duplicata pós-divulgação (-5) está na tabela de reputação mas é inalcançável: a transição para 'duplicado' sempre grava o evento 'duplicado_pre' (+2). O ranking normaliza min-max sobre o conjunto retornado pelo limite da consulta, não é percentil sazonal de 90 dias. O marketplace é intra-tenant: list_programs filtra por tenant e a rota exige bounty:program:read no token — um pesquisador externo precisa ser membro do tenant com os escopos certos; não há federação entre organizações nem cadastro público de hunter. Sob queda do Redis, o rate-limit das rotas de submissão e re-triagem é fail-open.

Declaramos o limite porque software de segurança que promete tudo não é auditável. Se o que falta aqui é o que você precisa, o serviço consultivo cobre — ou dizemos que não cobre.

Conecta com

  • Gateway de IA da plataforma (app/ai) — task aditiva bounty_triage
  • PII-strip e detector de segredos do Gateway (mascaramento na exibição a não-dono)
  • PDP/ABAC da plataforma (app/rbac/pdp) no caminho de leitura da submissão
  • Idempotência e envelope de erro da Fundação (app/api)
  • Marketplace de Talentos (a reputação exibida no perfil do candidato é lida de bounty_hunter_profiles.reputation, somente leitura; as verified_skills vêm da Arena, não do Bounty)

Controle de acesso

O acesso é concedido por escopo, não por perfil genérico. Quem só precisa ler não recebe permissão de escrita, e a barreira é o banco de dados, não a interface.

  • bounty:program:read
  • bounty:program:manage
  • bounty:submission:read
  • bounty:submission:submit
  • bounty:submission:triage
  • bounty:reward:manage
  • bounty:hunter:read
  • bounty:hunter:manage
JustCyber Bounty

Quer ver funcionando?

Demonstração com dado do seu ambiente, não com base de exemplo. É a única forma de saber se serve.