Imagem de capa do projeto: NEXUS Bugcrowd EM ANDAMENTO

Resumo técnico

Plugin NEXUS que integra a plataforma Bugcrowd para bug bounty: submissões são ingeridas via webhooks com digest HMAC-SHA256 (X-Bugcrowd-Digest) e viram tarefas com prioridade derivada da severidade (P1=4 → P4=1); o mapa programa → projeto roteia cada submissão, comentários NEXUS sincronizam de volta para a submissão e o Intelligence Hub enriquece tarefas com severidade, estado e vínculo Bugcrowd — com migração automática das identidades legadas (bugcrowdnd/bugcrowd-company) para o slug canônico bugcrowd.

Escopo executado

  • Identidade: slug canônico bugcrowd (diretório plugins/bugcrowd/); legacy_slugs: [bugcrowdnd, bugcrowd-company]; actions canônicas bugcrowd_* com aliases bugcrowdnd_* mantidos para integrações antigas; fastr /bugcrowd (canônico) + /bugcrowdnd (alias legado).
  • Backend backend.php (1071 linhas): bugcrowd_get_config()/bugcrowd_save_config() em DB::getConfig('plugin.bugcrowd') com webhook_secret, access_key, secret_key, public_base_url, default_project ('Geral'), program_map (program_code/UUID → projeto NEXUS), sync_comments, comment_visibility (everyone|bugcrowd_and_customer), enrich_tasks, auto_close_on_closed, api_version (2025-01-01).
  • Migração automática (bugcrowd_migrate_legacy()): idempotente — migra config de plugin.bugcrowd-company/plugin.bugcrowd para plugin.bugcrowd; promove tabelas bugcrowd_company_submissions/bugcrowd_submissions/bugcrowdnd_submissions → bugcrowd_submissions (RENAME + INSERT IGNORE) e o webhook_log equivalente; valida identificadores SQL e colunas compatíveis antes de migrar.
  • Webhook: bugcrowd_verify_signature() valida X-Bugcrowd-Digest = HMAC-SHA256(secret, raw_body + timestamp) via hash_equals; eventos submission.created, submission.updated, comentários e ping/test; URL pública public_base_url + /api.php?action=bugcrowd_webhook; auditoria completa em bugcrowd_webhook_log.
  • Severity → priority: bugcrowd_severity_to_priority() — P1/Critical=4, P2/High=3, P3/Medium=2, P4/outros=1; auto_close_on_closed marca a task done (closed/resolved/informational) e triaged/unresolved/new vira in_progress.
  • Criação/atualização de tarefas: submission.created cria task ([Bugcrowd] <id> — <título>, descrição markdown com ID/programa/evento/título/severidade/estado/VRT) + enriquece via API; submission.updated atualiza priority/status e comenta o diff de changes.
  • Sync NEXUS → Bugcrowd: bugcrowd_on_comment_created (filter comment_created) faz POST /submissions/{id}/comments com body_markdown + visibility_scope; ignora comentários system/status/status_change/attachment e autores bugcrowd/system (anti-loop).
  • Mapa programa → projeto: bugcrowd_resolve_project() (code|id|name → projeto; fallback default_project).
  • API client: bugcrowd_api_request() (cURL) com Accept: application/vnd.bugcrowd+json, Authorization: Token <access_key>:<secret_key>, Bugcrowd-Version e timeout 25s (connect 8s); base api.bugcrowd.com.
  • Intelligence Hub: enricher bugcrowd (['url','domain','_task'], prioridade 38) — _task: sinal sid · P{sev} · {state} com scores P1=90/P2=75/P3=55/P4=30; url/domain em hosts *.bugcrowd.com → linked/unlinked (extrai /submissions/{id}).
  • Lookup/refresh: bugcrowd_lookup (submission_id ou URL → vínculo local + API fresh) e bugcrowd_refresh (GET /submissions/{id} → create/update com evento manual.refresh).
  • API: 9 actions via PluginManager::registerApiAction (bugcrowd_webhook, bugcrowd_settings/_save, bugcrowd_stats, bugcrowd_links, bugcrowd_test, bugcrowd_lookup, bugcrowd_refresh, bugcrowd_post_comment) — webhook público + digest; demais sessão + CSRF.
  • i18n próprio: lang.json (226 linhas, pt_BR/en_US) via nexusRegisterPluginI18n + nx_load_dictionary (window.t / __()).
  • UI Alpine.js (tab.php, 389 linhas, tema laranja orange-600): badges Webhook OK/API OK, 4 KPI cards (Vinculadas/Eventos hoje/Webhook/API Token), aba Submissões (tabela ID, programa, severidade, estado, tarefa com link) + Configurações (webhook URL com copiar + secret, Public Base URL, project picker NEXUS, Access/Secret Key, Bugcrowd-Version, Testar API, mapa programa→projeto com linhas dinâmicas, toggles sync/enrich/auto-close, visibilidade de comentários, guia "Como obter a API Key").
  • Tabelas: bugcrowd_submissions (PK submission_id, UNIQUE task_id, índices program_code/updated_at) e bugcrowd_webhook_log (event_type, submission_id, ok, message; índices created_at/submission_id).
  • Sem cronjob.json — plugin evento-driven (webhooks), sem polling contínuo (API Bugcrowd limita ~60 req/min).

Stack e ferramentas

  • PHP 8 (sem framework)
  • MySQL 8 (config em admin_configs; bugcrowd_submissions + bugcrowd_webhook_log)
  • Alpine.js + Tailwind CSS (premium light, ring orange)
  • Sistema de plugins do NEXUS (PluginManager)
  • cURL → API Bugcrowd (Token auth + webhooks HMAC-SHA256)

Tags operacionais

  • Bugcrowd
  • Bug Bounty
  • Segurança
  • Webhooks
  • API REST
  • Intelligence Hub

Resultado operacional

  • Ciclo fechado bugcrowd → NEXUS: submissões ingeridas via webhook (digest HMAC-SHA256 verificado) viram tarefas no backlog com prioridade correta; estado closed/resolved marca a task done.
  • Sync bidirecional de comentários: comentários no NEXUS viram comentários na submissão Bugcrowd (visibilidade configurável) sem loop com autores Bugcrowd.
  • Roteamento por programa: cada submissão cai no projeto NEXUS mapeado (código/UUID do programa), com fallback para o projeto padrão.
  • Intelligence Hub contextualizado: tasks vinculadas mostram severidade, score, estado e vínculo da submissão; URLs app.bugcrowd.com/submissions/* são detectadas como referências.
  • Auditoria completa: todos os deliveries e eventos logados (bugcrowd_webhook_log).
  • Migração transparente: instalações antigas (bugcrowdnd/bugcrowd-company) são migradas de forma idempotente para o slug canônico bugcrowd, com aliases mantidos.

Andamento no GitHub (issues)

Painel em tempo real com as issues mais recentes do repositório.

abertas (amostra): -- fechadas (amostra): -- base: -- ultimas issues

carregando andamento...

Resultados reais

Plugin NEXUS que integra a Bugcrowd para bug bounty: submissões ingeridas via webhooks com digest HMAC-SHA256 (X-Bugcrowd-Digest) viram tarefas com prioridade por severidade, com mapa programa→projeto, sync bidirecional de comentários, enricher no Intelligence Hub e migração automática de legado.

Arquitetura e organização

Execução e operação

O projeto segue fluxo reprodutível de execução com validação técnica em ambiente de produção/similar.

Screenshots

Falar sobre este projeto

Aplique este modelo no seu ambiente e acelere a entrega com consistência técnica.