figma guide

Designing bug bounty and vulnerability disclosure program UI in Figma: scope, submissions, and researcher workflows

Design bug bounty and vulnerability disclosure program UI in Figma with scope rules, safe harbor, submission forms, triage queues, reward tiers, and researcher dashboards.

Published
Updated
Jul 30, 2026
Read time
10 min
Level
Intermediate

Quick answer

Bug bounty and vulnerability disclosure program (VDP) UI is how security teams invite external researchers to report flaws safely—clear scope, safe harbor language, structured submissions, and transparent triage without leaking exploit details. Design a public program hub with scope, out-of-scope rules, and reward tiers; a researcher submission portal with severity self-assessment and encrypted attachments; an internal triage queue linked to vulnerability management; and a researcher dashboard for status, duplicates, and payout tracking. Start from the Figma guides hub and pair with trust center, security posture dashboard, audit log, incident runbooks, and Dev Mode handoff.


Who this is for

  • Product designers building public VDP pages, HackerOne/Bugcrowd-style portals, or in-house researcher platforms for B2B SaaS.
  • Design system teams aligning severity badges, scope tables, and submission wizards with forms, badges, and modals.
  • Security and legal teams implementing safe harbor, scope enforcement, duplicate handling, and payout workflows.

Public program hub

BugBountyHub — security.acme.com/bug-bounty · Program v3.2 · Updated 2026-07-01
├── Hero: Responsible disclosure · Safe harbor · Average first response 2.4 days
├── Quick stats: 847 reports · 312 valid · $1.2M paid · Hall of fame 89 researchers
├── CTAs: [ Submit a report ] [ View scope ] [ Program rules ] [ Hall of fame ]
├── Tabs: Scope · Rewards · Rules · Safe harbor · FAQ · Contact
├── Scope summary: *.acme.com · api.acme.com · mobile apps · Excludes: third-party SaaS
├── Reward range: Critical $5k–$25k · High $1k–$5k · Medium $250–$1k · Low $50–$250
└── Footer: security@acme.com · PGP key · Link to [trust center](/designing-trust-center-and-security-documentation-ui-in-figma/)
SectionPurpose
ScopeIn-scope assets with environment labels (prod, staging)
Out of scopeSocial engineering, DoS, third-party dependencies without PoC
RewardsTier table with examples; note discretionary bonuses
Safe harborLegal language researchers need before testing
RulesOne report per issue; no public disclosure before fix
Hall of fameOpt-in researcher recognition

Verdict: Public hub is legal + security marketing—Legal must approve safe harbor text before publish; scope must match actual DNS and app inventory.


Scope and asset registry

ScopeRegistry — In scope · Last reviewed 2026-06-15
├── Production:
│   ├── *.acme.com (web app, marketing) · Max severity: Critical
│   ├── api.acme.com · Rate limit: 10 req/s for automated testing
│   ├── admin.acme.com · Requires researcher account provisioning
│   └── iOS/Android apps · Latest store builds only
├── Staging (limited):
│   ├── staging.acme.com · No real customer data · Medium max payout
│   └── sandbox-api.acme.com · API keys via researcher portal
├── Out of scope:
│   ├── *.acme-cdn.net (CDN only — report to provider)
│   ├── Third-party chat widget · Redirect to vendor program
│   ├── Physical security · Out of program
│   └── DoS / load testing without written approval
└── [ Download scope.json ] [ Subscribe to scope changes ] [ Request test account ]
Asset fieldUI detail
Domain / appClickable; environment badge (prod, staging)
Max severityCaps payout for staging or legacy apps
Rate limitsPrevents accidental DoS during scanning
Test accountRequest flow for admin-only surfaces
Out of scope reasonShort explanation + redirect link
Last reviewedFreshness signal for researchers

Link scope changes to audit log—researchers screenshot outdated scope during disputes.

Use tables for asset lists; badges for environment and severity caps.


Researcher submission form

SubmitReport — Step 2 of 4: Vulnerability details
├── Asset: api.acme.com/v2/payments · Auto-suggest from scope registry
├── Vulnerability type: [ ] XSS [ ] IDOR [x] Auth bypass [ ] SSRF [ ] Other
├── Severity (self-assessed): High · CVSS calculator link
├── Title: Payment API allows cross-tenant refund without auth
├── Description: Markdown · Min 100 chars · Template hints
├── Steps to reproduce: Numbered list · Required
├── Impact: What attacker can do · Required
├── Proof of concept: [ Upload encrypted zip ] Max 25MB · PGP optional
├── Affected versions: Web · API v2.3 · Mobile 4.1.0
├── Researcher: handle@hackerone.com · PGP key on file ✓
├── Safe harbor ack: [x] I agree to program rules · Required
└── [ Save draft ] [ Submit report ] · Duplicate check runs on submit
FieldHandoff detail
Asset pickerAutocomplete from scope; warn if out of scope
Vulnerability typeEnum; maps to internal taxonomy
Self-assessed severityInformational only; triage may override
Repro stepsRich text; min length validation
PoC attachmentVirus scan; encrypt at rest; access audit
Safe harbor checkboxTimestamp + IP logged
Duplicate checkHash title + asset; suggest existing report

Multi-step wizard uses progress stepper—researchers abandon long single-page forms.

Never show other researchers’ PoC in duplicate suggestions—title and status only.


Internal triage queue

TriageQueue — 23 open · SLA: Critical 24h · High 72h · Medium 7d
├── Filters: Severity · Status · Asset · Assignee · Source (VDP / pentest / internal)
├── Row: VDP-2026-1847 · High · api.acme.com · Auth bypass · 6h ago · Unassigned
├── Bulk: [ Assign ] [ Mark duplicate ] [ Request more info ] [ Escalate to incident ]
├── Detail drawer:
│   ├── Report VDP-2026-1847 · Researcher: crypt0naut · Safe harbor ✓
│   ├── Triage severity: [ Critical ] [ High ✓ ] [ Medium ] [ Low ] [ N/A ]
│   ├── Status: New → Triaged → Needs fix → Fixed → Rewarded → Closed
│   ├── Link to VM finding: VM-8842 · Same repro attached
│   ├── Internal notes (hidden from researcher)
│   ├── Researcher comms: Thread · Last reply 2h ago
│   └── Reward: $3,500 proposed · Pending security lead approval
└── Metrics: Mean time to triage 1.8d · Valid rate 38% · Duplicate rate 22%
StatusResearcher-visible label
NewReceived
TriagedUnder review
Needs more infoMore information needed
Needs fixValid — fix in progress
FixedResolved — pending reward
RewardedReward issued
DuplicateDuplicate of VDP-XXXX
N/AOut of scope / not applicable

Triage queue should sync or link to vulnerability management—one finding object, two views (researcher + internal).

Critical valid reports may trigger incident runbook—design one-click escalate with pre-filled summary.


Reward tiers and payout workflow

RewardTiers — Program v3.2 · Effective 2026-01-01
├── Critical: $5,000 – $25,000 · RCE, auth bypass affecting all tenants
├── High: $1,000 – $5,000 · IDOR on sensitive data, stored XSS in admin
├── Medium: $250 – $1,000 · CSRF on state change, info disclosure
├── Low: $50 – $250 · Missing headers, low-impact issues
├── Bonus: +25% first valid report on new asset · Discretionary excellence bonus
└── Out of scope: $0 · May still send thank-you + hall of fame credit
PayoutApproval — VDP-2026-1847 · Proposed $3,500 · Status: Pending finance
├── Severity: High (confirmed) · Asset: api.acme.com · Fix deployed 2026-07-28
├── Researcher: crypt0naut · Tax form W-9 on file ✓ · Payment: PayPal / wire
├── Approval chain: Security lead ✓ → Finance ⏳ → Auto-notify researcher
├── Duplicate check: None · CVE assignment: Pending
└── [ Approve ] [ Adjust amount ] [ Deny with reason ] · Reason visible to researcher
Payout stateUI treatment
ProposedInternal only; amount + rationale
Pending approvalFinance queue badge
ApprovedResearcher notified; ETA shown
PaidTransaction ID; receipt download
AdjustedShow original vs final with comment
DeniedRequired reason; appeal link optional

Finance integration needs PII separation—researcher payment details in restricted admin view, not in general triage drawer.


Researcher dashboard

ResearcherDashboard — crypt0naut · 12 reports · 7 valid · $18,750 earned
├── My reports:
│   VDP-2026-1847 · High · Under review · Last update 2h ago
│   VDP-2026-1802 · Medium · Rewarded $750 · Paid 2026-07-10
│   VDP-2026-1755 · Duplicate of VDP-1740 · Closed
├── Notifications: [ ] Email [x] Platform · Scope change alerts ✓
├── Profile: PGP key · Payment method · Tax form · Hall of fame opt-in ✓
├── Resources: Scope JSON · Test account status: Approved · API docs link
└── [ Submit new report ] [ Download tax summary 2026 ]
FeatureWhy it matters
Status timelineReduces “any update?” emails to security@
Scope change alertsResearchers retest after new assets added
Duplicate referenceLink to original report ID only—no PoC leak
Tax summaryYear-end export for US/international researchers
Test account statusPending / approved / revoked with reason

Use empty states for first-time researchers with guided submit CTA.


Comparison: VDP vs managed bug bounty platform

DimensionSelf-hosted VDP portalHackerOne / Bugcrowd
BrandingFull control on trust sitePlatform chrome + your program page
Researcher poolSmaller; you drive trafficLarge existing community
PayoutYour finance workflowPlatform handles many payment methods
Triage UICustom queue + VM integrationPlatform triage + API sync
Safe harborYour Legal wordingPlatform + your policy
CostEngineering + security timePlatform fees + bounties

Many teams start with VDP only (no monetary rewards), then add bounties—design reward tier section as optional/collapsible for VDP-only mode.


Handoff checklist (Dev Mode)

  • Program object — version, safe harbor text hash, effective date.
  • Scope asset — domain, environment, max severity, rate limit, test account required.
  • Report object — status enum, severity (self + triaged), duplicate_of_id, safe_harbor_ack_at.
  • Attachment — encrypted storage, scan status, download audit per viewer.
  • Reward — tier, proposed amount, approval chain, payout transaction ID.
  • Researcher profile — handle, PGP, payment method token, tax form status.
  • Notification — scope change, status update, payout issued templates.
  • VM sync — webhook or shared finding ID to vulnerability management.
  • Accessibility — submission form keyboard navigable; severity not color-only.

Common mistakes

MistakeWhy it hurtsFix
Scope list stale vs productionInvalid reports + researcher frustrationSync from asset inventory; monthly review task
Safe harbor buried in PDFLegal exposure if researcher didn’t see itCheckbox on submit + link in hero
PoC visible to all triage usersInsider threat; leakRole-based attachment access
Duplicate shows other PoCSecond researcher weaponizedShow ID and status only
No researcher status updatesEmail flood to security@Dashboard timeline + email prefs
Reward table without examplesDisputes on every High reportAdd 2–3 concrete examples per tier
Staging same payout as prodBudget blowout from scannersCap severity/payout on non-prod
No link from trust centerResearchers can’t find programProminent footer link on trust hub
Critical report stuck in queueActive exploitation windowSLA badges + escalate to incident
Public hall of fame without opt-inPrivacy violationDefault off; explicit opt-in

  1. Design public hub with scope table, reward tiers, safe harbor, and rules.
  2. Build multi-step submission form with asset validation and encrypted uploads.
  3. Create internal triage queue linked to vulnerability management.
  4. Spec payout approval flow with finance handoff and researcher notifications.
  5. Add researcher dashboard with status timeline and scope change alerts.
  6. Link from trust center and security posture dashboard for program health metrics.

FAQ

VDP without monetary rewards?

Yes—design VDP mode with “Recognition / hall of fame” instead of dollar tiers. Submission and triage UI stays the same; payout steps hidden.

Same queue as pentest findings?

Unified finding object is ideal—source field distinguishes VDP, pentest, SAST. Researcher-facing status is a filtered view; internal notes never sync outward.

Bug bounty link belongs in trust center footer and security docs. Program rules PDF can live in document library (public tier).

During active incident?

Show banner: “We are responding to an active incident—triage may be delayed.” Do not pause submissions; duplicates may reveal related flaws.

CVE assignment UI?

Optional CVE request step after fix deployed—internal admin only; researcher notified when published.


Next steps

Share on X

§ Keep reading

Related guides.