JustCyber

Cyber Arena BR

Desafios CTF em português com validação de flag por hash, pontuação, sequência de dias, ranking e certificação por trilha.

Cinco trilhas por cargo: SOC/Blue Team, Pentest/Red Team, AppSec, OT/ICS e AI Red Team. Cinco níveis de dificuldade numa escala fixa de pontos, de 10 a 200. O desafio vive num catálogo global da plataforma; o jogador envia a flag e o serviço decide.

A flag crua nunca é persistida nem devolvida. O banco guarda apenas o sha256, a comparação acontece no serviço sobre o hash e um desafio cadastrado sem hash nunca casa — nega o acerto em vez de aceitar qualquer coisa. O primeiro acerto pontua; uma repetição é absorvida pelo índice único e não pontua de novo. A sequência de dias é determinística sobre o relógio injetado: mesmo dia mantém, dia seguinte soma, lacuna reseta. O leaderboard é da organização e ordena por pontos e sequência. A separação entre humanos e coletivos de IA existe no schema e na consulta, mas nenhum código marca um perfil como coletivo — hoje esse segmento sai vazio.

A Arena é o funil que alimenta o Marketplace de Talentos: as trilhas em que a pessoa acertou flag viram skills verificadas no perfil de candidato dela. A dica por IA é socrática, proibida de revelar a flag ou entregar exploit pronto, e o enunciado entra embrulhado como dado não-confiável para que uma injeção escondida no texto do desafio não vire instrução.

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.

  • Catálogo de desafios

    Filtro por trilha e dificuldade, com paginação por cursor. Cada item traz se o próprio usuário já resolveu e quantas pessoas distintas da organização resolveram. Nem a flag nem o hash saem na resposta.

  • Validação de flag por hash

    Comparação de sha256 no serviço. Guardamos o hash do que foi enviado, nunca o texto. Rate-limit de 12 por minuto por IP e por tenant contra força bruta, mais Idempotency-Key para o replay não repontuar.

  • Pontuação com fallback declarado

    Usa os pontos do desafio quando declarados e positivos; senão cai na escala canônica por dificuldade. Dificuldade fora do vocabulário vale zero, para não inflar pontuação com dado inesperado.

  • Sequência de dias (streak)

    Função pura sobre o dia de calendário UTC do último acerto: mesmo dia mantém, dia seguinte soma um, lacuna maior reseta para um. Não dá para farmar o mesmo dia.

  • Perfil do jogador

    Handle, bio e skills com upsert; a projeção é criada sob demanda no primeiro acesso e a corrida por criação simultânea é absorvida pelo índice único.

  • Leaderboard da organização, com recorte por trilha

    Ordena por pontos e sequência, opcionalmente recortado por trilha — com o recorte, pontos e resolvidos falam do mesmo conjunto, porque o filtro mora dentro da agregação. Uma agregação por página, sem uma consulta por jogador; no ranking geral o serviço ainda grava o rank_cache de cada perfil exibido. A separação entre humanos e coletivos de IA existe no schema e na consulta, mas nenhum código marca um perfil como coletivo — hoje esse segmento sai vazio.

  • Certificação por trilha

    Limiares declarados: SOC 3, Pentest 5, AppSec 4, OT 3, AI Red Team 3 desafios distintos resolvidos. Credencial opaca com prefixo JC-ARENA, emitida uma vez por trilha, sem PII.

  • Dica por IA (rascunho)

    Empurrão socrático de duas a quatro frases com disclaimer explícito de que é gerada por IA. Rate-limit de 15 por minuto. Gateway indisponível ou resposta bloqueada devolve 200 com dica nula, não erro.

  • Catálogo declarativo versionado

    Trilhas, escala de pontos e limiares expostos por rota própria na versão arena.v1, para o front renderizar sem reimplementar a regra em JavaScript.

  • Auditoria sem segredo

    A submissão grava apenas se acertou, se foi o primeiro acerto e quantos pontos rendeu. Nem a flag nem o hash entram no log.

O que fica com você

Entregáveis

  • Catálogo de desafios e página de desafio com enunciado
  • Perfil de jogador com pontos, sequência e posição no ranking
  • Leaderboard da organização por pontos e sequência, com recorte por trilha
  • Certificacao de trilha com credencial opaca, visivel para o proprio titular dentro da organizacao (nao ha rota de conferencia por terceiros)
  • Skills verificadas que atravessam para o perfil do Marketplace de Talentos

O que este módulo não faz

Não há laboratório. A plataforma valida a flag; ela não sobe nem entrega o ambiente do desafio — o broker de container por usuário é gancho externo e não existe no repositório. Não há rota de escrita de desafio: o catálogo é global e o único writer no código é o seed, que insere UM desafio (recon-http-headers, trilha appsec, fácil). Como o limiar de certificação de AppSec é quatro desafios, com o conteúdo semeado nenhuma certificação pode ser emitida hoje; popular o catálogo exige escrita direta no banco por administrador de plataforma. O endpoint de dica por IA existe na API mas não tem chamador no front — o cliente JavaScript não expõe a função. O leaderboard e o contador de quem resolveu são da própria organização, não da plataforma: a RLS impede ver o acerto de outro tenant, e um total global seria inventado. Não há cobrança por desafio nem por dica; o modelo é assinatura.

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

  • Marketplace de Talentos (skills verificadas e pontos derivam daqui)
  • Cyber Range OT/ICS (reusa a escala de pontos e a função de ranking)
  • Gateway de IA da plataforma (dica)

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.

  • arena:challenge:read
  • arena:attempt:submit
  • arena:profile:read
  • arena:profile:manage
  • arena:cert:read
Cyber Arena BR

Quer ver funcionando?

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