475 lines
9.1 KiB
Markdown
475 lines
9.1 KiB
Markdown
---
|
|
id: security-bug-bounty
|
|
title: Bug Bounty — Program / Triage / Pay
|
|
category: Coding
|
|
status: draft
|
|
source_trust_level: B
|
|
verification_status: conceptual
|
|
created_at: 2026-05-09
|
|
updated_at: 2026-05-09
|
|
tags: [security, bug-bounty, vibe-coding]
|
|
tech_stack: { language: "Process", applicable_to: ["Security"] }
|
|
applied_in: []
|
|
aliases: [bug bounty, HackerOne, Bugcrowd, vulnerability disclosure, VDP, responsible disclosure]
|
|
---
|
|
|
|
# Bug Bounty
|
|
|
|
> 외부 researcher 가 vulnerability 발견 → reward. **HackerOne / Bugcrowd / 자체**. Cost vs benefit. Internal team + bug bounty + external pen test = defense in depth.
|
|
|
|
## 📖 핵심 개념
|
|
- Program: scope + rules + reward.
|
|
- VDP: Vulnerability Disclosure Policy (no reward).
|
|
- Bug bounty: VDP + reward.
|
|
- Triage: severity + valid?
|
|
|
|
## 💻 코드 패턴
|
|
|
|
### VDP (basic, free)
|
|
```markdown
|
|
# Vulnerability Disclosure Policy
|
|
|
|
We welcome security research.
|
|
|
|
## Scope
|
|
- *.example.com (production)
|
|
- Mobile apps
|
|
- API endpoints
|
|
|
|
## Out of scope
|
|
- Third-party services
|
|
- Social engineering
|
|
- Physical attacks
|
|
- DoS
|
|
|
|
## Rules
|
|
- No data exfiltration beyond proof
|
|
- No service disruption
|
|
- Provide reasonable disclosure time (90 days)
|
|
|
|
## Report
|
|
security@example.com
|
|
PGP: <key>
|
|
|
|
## Recognition
|
|
Hall of Fame for valid reports.
|
|
No monetary reward (this is VDP).
|
|
```
|
|
|
|
→ Free. 작은 회사 시작.
|
|
|
|
### Bug bounty program (paid)
|
|
```markdown
|
|
# Bug Bounty
|
|
|
|
## Scope
|
|
- *.example.com (prod)
|
|
- iOS / Android apps
|
|
- API (api.example.com)
|
|
|
|
## Out of scope
|
|
- *.dev.example.com
|
|
- Third-party SaaS
|
|
- DoS / DDoS
|
|
- Social engineering
|
|
- Physical attacks
|
|
|
|
## Rewards (CVSS-based)
|
|
- Critical (9.0+): $5,000
|
|
- High (7.0-8.9): $1,500
|
|
- Medium (4.0-6.9): $500
|
|
- Low (0.1-3.9): $100
|
|
|
|
## Eligibility
|
|
- First reporter wins
|
|
- Must include reproduction
|
|
- No public disclosure before fix
|
|
|
|
## Submit
|
|
HackerOne: https://hackerone.com/example
|
|
Direct: security@example.com (PGP encrypted)
|
|
```
|
|
|
|
### HackerOne setup
|
|
```
|
|
1. Account create
|
|
2. Program create (private 또는 public)
|
|
3. Define scope (asset)
|
|
4. Set bounty range
|
|
5. Configure triage workflow
|
|
6. Onboard internal team
|
|
|
|
→ HackerOne 가 triage tier 제공 (cost).
|
|
```
|
|
|
|
### Bugcrowd
|
|
```
|
|
HackerOne 와 비슷.
|
|
"Crowdcontrol" platform.
|
|
Researcher community 다름.
|
|
```
|
|
|
|
### 자체 program (internal / hosted)
|
|
```
|
|
Pros:
|
|
- Direct relationship
|
|
- Cheaper
|
|
- Custom workflow
|
|
|
|
Cons:
|
|
- Researcher discovery 어려움
|
|
- Triage burden
|
|
- Payment / tax handling
|
|
```
|
|
|
|
→ 큰 organization 만 권장.
|
|
|
|
### Triage process
|
|
```
|
|
1. Receive report (24h ack)
|
|
2. Reproduce
|
|
3. Severity (CVSS)
|
|
4. Valid? (in-scope, novel, working)
|
|
5. Reward decision
|
|
6. Fix
|
|
7. Verify fix with reporter
|
|
8. Pay + close
|
|
9. Public disclosure (옵션)
|
|
```
|
|
|
|
### Severity (CVSS calculator)
|
|
```
|
|
Vector:
|
|
- Attack vector: Network / Adjacent / Local / Physical
|
|
- Complexity: Low / High
|
|
- Privileges: None / Low / High
|
|
- User interaction: None / Required
|
|
- Scope: Unchanged / Changed
|
|
- Confidentiality / Integrity / Availability impact
|
|
|
|
Score: 0-10
|
|
```
|
|
|
|
→ cvssjs.org / nvd.nist.gov calculator.
|
|
|
|
### Common reports
|
|
```
|
|
Critical:
|
|
- RCE (Remote Code Execution)
|
|
- SQL injection (큰 data)
|
|
- Authentication bypass
|
|
- IDOR (sensitive)
|
|
|
|
High:
|
|
- Stored XSS
|
|
- SSRF
|
|
- Privilege escalation
|
|
|
|
Medium:
|
|
- Reflected XSS
|
|
- CSRF (sensitive)
|
|
- Information disclosure (PII)
|
|
|
|
Low:
|
|
- Self XSS
|
|
- Missing security headers
|
|
- Outdated library (no exploit)
|
|
|
|
Informational (no reward):
|
|
- Best practice
|
|
- Lack of header
|
|
```
|
|
|
|
### Duplicate detection
|
|
```
|
|
같은 issue 여러 reporter:
|
|
- 첫 reporter wins
|
|
- 후속 = "Duplicate" (no reward 또는 작음)
|
|
- Public 의 program 가 자주.
|
|
```
|
|
|
|
### Out-of-scope handling
|
|
```
|
|
정중 reject:
|
|
"Thanks for your report. This is out of scope ([reason]).
|
|
We don't accept reports for this — please refer to our scope.
|
|
However, we appreciate your effort."
|
|
|
|
너무 strict 하면 — 좋은 researcher 잃음.
|
|
```
|
|
|
|
### Researcher relationship
|
|
```
|
|
Good researcher:
|
|
- Detailed report
|
|
- PoC (proof of concept)
|
|
- Suggested fix
|
|
- Patient
|
|
|
|
Bad researcher:
|
|
- Spam (low quality)
|
|
- Threatening (public disclosure)
|
|
- Begging
|
|
- 불완전 report
|
|
|
|
→ Good 가 valuable. Bad 가 대부분.
|
|
```
|
|
|
|
### Internal cost
|
|
```
|
|
Triage time (per report):
|
|
- Read + reproduce: 30 min - 4 hour
|
|
- Severity assess: 30 min
|
|
- Communicate: 30 min
|
|
- Fix: variable
|
|
|
|
→ 1 person 가 full-time triage 가능.
|
|
```
|
|
|
|
### ROI
|
|
```
|
|
Bug bounty $:
|
|
- Setup: $0 (HackerOne base)
|
|
- Bounty 지급: $0-100K / year (작은-중간)
|
|
- Triage cost: $50-200K / year (1 FTE)
|
|
|
|
Discovery:
|
|
- 큰 vulnerability prevent (cost = 사고 X $$)
|
|
- Attack surface 측정
|
|
- 외부 perspective
|
|
|
|
→ 큰 organization (security-critical) 가치.
|
|
```
|
|
|
|
### Disclosure
|
|
```
|
|
Coordinated:
|
|
1. Reporter → vendor private
|
|
2. Vendor fix (90 days)
|
|
3. Public disclosure (after fix)
|
|
4. Researcher 가 publicly recognize
|
|
|
|
Forced:
|
|
- Vendor 가 무시 → researcher 가 public
|
|
- Industry pressure
|
|
```
|
|
|
|
### Public disclosure (after fix)
|
|
```
|
|
Researcher writeup blog:
|
|
- 유익 (다른 researcher 학습)
|
|
- 회사 brand 영향 (transparency)
|
|
- CVE assignment 가능
|
|
|
|
Company 가 publish:
|
|
- Acknowledge
|
|
- Fix detail (high-level)
|
|
- Mitigation
|
|
```
|
|
|
|
### Internal vs external bug bounty
|
|
```
|
|
Internal hackathon:
|
|
- 회사 employees 가 bug 발견
|
|
- 작은 reward
|
|
- Team building
|
|
|
|
External bug bounty:
|
|
- Public researcher
|
|
- 큰 reward
|
|
- 깊은 외부 시각
|
|
```
|
|
|
|
→ 둘 다.
|
|
|
|
### Legal
|
|
```
|
|
Safe Harbor:
|
|
- Researcher 가 program rules follow 시 = no legal action
|
|
- 명시 (program page 안)
|
|
- DMCA / CFAA 면제
|
|
|
|
→ Researcher 가 안 felt threatened.
|
|
```
|
|
|
|
```markdown
|
|
## Safe Harbor
|
|
|
|
We will not pursue legal action against researchers who:
|
|
- Comply with program rules
|
|
- Make a good-faith effort to avoid disrupting service
|
|
- Don't access data beyond proof of concept
|
|
- Provide reasonable time for fix
|
|
```
|
|
|
|
### CVE assignment
|
|
```
|
|
큰 vulnerability:
|
|
- CVE-2026-XXXXX number
|
|
- NVD database
|
|
- 공개 reference
|
|
|
|
→ Researcher 가 자랑 + public learning.
|
|
```
|
|
|
|
### Top researcher 의 motivation
|
|
```
|
|
1. 돈 (큰 reward)
|
|
2. 명성 (recognition, CVE)
|
|
3. 학습 (real-world target)
|
|
4. 즐거움 (puzzle)
|
|
5. Mission (better internet)
|
|
|
|
→ Reward 만 X. 좋은 program.
|
|
```
|
|
|
|
### Hall of Fame
|
|
```markdown
|
|
# Security Researchers
|
|
|
|
Thanks to the following for responsible disclosure:
|
|
|
|
## 2026
|
|
- @researcher1 — Critical RCE
|
|
- @researcher2 — Authentication bypass
|
|
- @researcher3 — Stored XSS
|
|
|
|
## 2025
|
|
...
|
|
```
|
|
|
|
→ Public recognition. Free + valuable.
|
|
|
|
### Program maturity
|
|
```
|
|
Phase 1: VDP only (no reward)
|
|
Phase 2: Private bug bounty (invite-only)
|
|
Phase 3: Public bug bounty
|
|
Phase 4: Continuous + multiple platform
|
|
|
|
→ 점진 grow.
|
|
```
|
|
|
|
### Common 함정
|
|
```
|
|
- Scope 너무 큼 (모든 거 in-scope) — noise
|
|
- Reward 너무 적음 — quality 낮음
|
|
- Triage 늦음 — researcher 잃음
|
|
- Communication 명확 X
|
|
- Duplicate handling 불공정
|
|
- Out-of-scope 가 unclear
|
|
```
|
|
|
|
### Vendor 의 mindset
|
|
```
|
|
"우리 가 보안 잘 함 — bug bounty 안 필요" → 잘못.
|
|
"Bug bounty 가 비싸" → ROI 측정.
|
|
"Researcher 가 우리 attack" → 그들 가 도움.
|
|
|
|
→ Researcher = ally, not enemy.
|
|
```
|
|
|
|
### Modern best practice
|
|
```
|
|
1. SDLC 안 security (shift left)
|
|
2. Internal pen test (quarterly)
|
|
3. External pen test (annual)
|
|
4. Bug bounty (continuous)
|
|
5. Threat modeling (큰 feature)
|
|
6. Security training (모든 dev)
|
|
```
|
|
|
|
→ Defense in depth.
|
|
|
|
### Tools (vendor side)
|
|
```
|
|
- HackerOne / Bugcrowd / Intigriti / YesWeHack
|
|
- Triage SaaS (포함)
|
|
- Internal: Slack + Jira + GitHub
|
|
|
|
자체:
|
|
- Email (security@)
|
|
- PGP key
|
|
- Vulnerability tracking system
|
|
```
|
|
|
|
### Duplicate / informational handling
|
|
```
|
|
Polite + clear:
|
|
"Thanks for the report. This was previously reported by [hash/anonymous].
|
|
We don't reward duplicates, but we appreciate the effort.
|
|
|
|
Hall of Fame eligible? [yes/no based on quality]"
|
|
```
|
|
|
|
### Stuck reports
|
|
```
|
|
Triage backlog:
|
|
- 30+ open reports
|
|
- New researcher 가 frustrated
|
|
|
|
해결:
|
|
- Add triage capacity
|
|
- Auto-close low quality
|
|
- Internal SLA (14 day acknowledge)
|
|
```
|
|
|
|
### Yearly stats (good practice)
|
|
```markdown
|
|
# 2026 Bug Bounty Report
|
|
|
|
- Reports received: 423
|
|
- Valid: 87 (21%)
|
|
- Critical: 3
|
|
- High: 12
|
|
- Medium: 31
|
|
- Low: 41
|
|
- Total payout: $58,400
|
|
- Avg time to triage: 2.3 days
|
|
- Avg time to fix: 14 days
|
|
|
|
Top researchers:
|
|
1. @x — 12 valid reports
|
|
2. @y — 8
|
|
...
|
|
```
|
|
|
|
→ Transparency + community trust.
|
|
|
|
### Hire researchers
|
|
```
|
|
좋은 bug bounty researcher = 좋은 internal security engineer.
|
|
Top reporter 에게 직접 job offer.
|
|
|
|
→ Talent pipeline.
|
|
```
|
|
|
|
## 🤔 의사결정 기준
|
|
| 회사 단계 | 추천 |
|
|
|---|---|
|
|
| Startup (early) | VDP only |
|
|
| 작은 SaaS | Private bounty (invite) |
|
|
| Mid-size | Public bounty (HackerOne) |
|
|
| Enterprise | Multi-platform + internal |
|
|
| Compliance critical | + Annual external pen test |
|
|
|
|
## ❌ 안티패턴
|
|
- **Pay denial 후 disclosure 위협**: bad faith.
|
|
- **Triage 매우 늦음**: researcher 잃음.
|
|
- **Scope 명확 X**: 분쟁.
|
|
- **Legal threat researcher**: PR disaster.
|
|
- **Reward 너무 적음**: low quality.
|
|
- **Internal team 가 bounty 받음 (employee)**: conflict of interest.
|
|
- **Public 의 researcher list 무**: motivation 적음.
|
|
|
|
## 🤖 LLM 활용 힌트
|
|
- HackerOne / Bugcrowd 가 빠른 시작.
|
|
- Safe Harbor 명시 — legal 보호.
|
|
- Triage SLA + transparency.
|
|
- Researcher = ally.
|
|
|
|
## 🔗 관련 문서
|
|
- [[Security_Pen_Testing]]
|
|
- [[Security_OWASP_Top_10_Practical]]
|
|
- [[DevSec_Threat_Modeling]]
|