Bug Bounty Program

Owner: Security. Review cadence: annual or on material change. Approver: CEO.

This is the program structure behind MeterBox's paid security-researcher channel. The public researcher-facing terms — what's in scope, safe harbor, response SLAs — live in the vulnerability disclosure policy; this doc covers what MeterBox commits internally — reward tiers, program lifecycle, eligibility, duplicate handling, hall-of-fame format, budget owner.

Until the managed program is live (see § 8), the canonical channel is the email address in the VDP and reports are handled as coordinated disclosure (no payout). This document then becomes the SOW for standing the program up.

1 — Program lifecycle

The program graduates through three phases. The Security lead decides when to graduate each phase based on signal quality + remediation throughput.

Phase Who can participate Triage volume target
Private (invite-only) — initial state ≤ 25 invited researchers with prior SaaS bounty history ≤ 5 reports / week
Private (expanded) ≤ 100 researchers ≤ 15 reports / week
Public Anyone within scope + eligibility uncapped; cap by paying for triage

Graduation criterion at each step: at least one quarter at the prior phase with no Critical findings missed by internal CI, and remediation SLA met on at least 90% of received reports.

2 — Reward tiers

Rewards are paid in USD via the bounty platform (HackerOne or equivalent). Amounts are guidelines — the Security lead may adjust ± 50% based on report quality (clarity of reproduction, novelty of attack chain, severity of customer impact).

Severity (CVSS v3.1) Reward range
Critical (9.0 – 10.0) — cross-tenant data exposure, auth bypass, billing-integrity break, RCE on control or data plane $5,000 – $15,000
High (7.0 – 8.9) — privilege escalation within a tenant, sensitive-data exposure within a tenant, MFA bypass for a known account $1,500 – $5,000
Medium (4.0 – 6.9) — IDOR with limited impact, CSRF on a state-changing endpoint, secrets exposure with limited blast radius $500 – $1,500
Low (0.1 – 3.9) $50 – $500

Bonuses:

No reward for:

3 — Scope refinements specific to the bounty

The VDP scope is the floor. The bounty program adds:

4 — Researcher eligibility

A researcher is eligible to receive a reward if all the following hold:

An ineligible researcher who submits a valid report is acknowledged, credited (with consent), and given the remediation update; no payout.

5 — Duplicate handling

6 — Disclosure timeline

7 — Hall of fame

Researchers credited (with consent) for valid reports are listed in the public hall of fame at /security#hall-of-fame (rendered from SECURITY.md). Format:

- @<handle>  —  <one-line attribution>  —  <YYYY>

A researcher may request anonymity or removal at any time. Removal is honored within 5 business days.

8 — Standing up the program (the human steps)

The doc cannot stand up the platform — these are the org actions:

  1. Pick the platform. HackerOne private invite-only is the default per the VDP; Bugcrowd is the documented alternative. Selection is on the same criteria as the pentest vendor: SaaS experience, methodology, MSA + NDA, payment-rail coverage for sanctioned-juris screening.
  2. Fund the bounty pool. Initial quarterly budget set by the CEO based on phase 1 expected volume + the § 2 ranges. Pool replenished monthly.
  3. Paste this doc as the program brief. The VDP is the public policy; this doc — minus § 8 — is the private program brief.
  4. Update /.well-known/security.txt to point at the program URL once it exists.
  5. Wire reports into the triage workflow. Same workflow as CI / Dependabot / pentest findings.

9 — Annual program review

Each fiscal year, Security lead reviews:

Review notes filed with the year's pentest review (annual program review checkpoint in penetration-testing.md).

10 — Review + version control

This document is reviewed annually or on material change (platform switch, tier restructure, phase graduation, regulator requirement). Material changes go through PR review + Security lead + CEO sign-off + a CHANGELOG entry.

Last reviewed: 2026-06-04

Related docs