PSIRT Process
This document describes the internal Product Security Incident Response Team (PSIRT) process for handling security vulnerabilities in Lighthouse.
Overview
The PSIRT process covers the complete lifecycle of a security vulnerability:
- Intake — Receiving and logging the report
- Triage — Validating, reproducing, and classifying the issue
- Fix — Developing and testing a remediation
- Disclosure — Communicating the fix to users
- Postmortem — Learning from the incident
PSIRT Team
| Role | Assignee | Contact |
|---|---|---|
| PSIRT Contact (Main) | Benjamin Huser-Berta | benjamin@letpeople.work |
| PSIRT Contact (Backup) | Peter Zylka-Greger | peter@letpeople.work |
Phase 1: Intake
Intake Channels
| Channel | Destination |
|---|---|
| Primary: security@letpeople.work | Shared inbox monitored by PSIRT team |
| Alternative: GitHub Security Advisories | Private vulnerability reporting (if enabled) |
Intake Checklist
When a report is received:
- Log the report in the vulnerability tracker (private)
- Assign a unique tracking ID
- Send acknowledgement to reporter within 5 business days
- Include:
- Tracking ID
- Expected timeline for triage
- Request for any additional information needed
Intake Template (Acknowledgement)
Subject: [Lighthouse Security] Report Received - Tracking ID: SEC-YYYY-NNN
Thank you for reporting a potential security vulnerability in Lighthouse.
We have received your report and assigned tracking ID: SEC-YYYY-NNN
Next steps:
- We will triage this report within 10 business days
- We will contact you if we need additional information
- We will provide a status update once triage is complete
Please reference the tracking ID in any follow-up communications.
Best regards,
Lighthouse PSIRT
Phase 2: Triage
Triage Timeline
Target: Within 10 business days of intake
Triage Steps
- Validate: Confirm the report describes a real security issue
- Reproduce: Attempt to reproduce the vulnerability
- Classify: Assign severity using CVSS or simplified classification
- Scope: Identify affected versions and components
- Decide: Determine next action
Severity Classification
| Severity | CVSS | Typical Examples |
|---|---|---|
| Critical | 9.0–10.0 | RCE, complete auth bypass, data breach |
| High | 7.0–8.9 | Auth bypass (limited), sensitive data exposure |
| Medium | 4.0–6.9 | CSRF, limited info disclosure, requires auth |
| Low | 0.1–3.9 | Minor info leak, requires unlikely conditions |
Actively Exploited Flag
If there is credible evidence of active exploitation:
- Set Actively Exploited = True
- Escalate immediately regardless of CVSS
- Consider emergency mitigation / communication
Triage Decisions
| Decision | When | Action |
|---|---|---|
| Fix | Valid vulnerability | Proceed to Phase 3 |
| Defer | Low severity, high effort | Document rationale, schedule for later |
| Dispute | Not a vulnerability | Document rationale, notify reporter |
| Duplicate | Already reported | Link to existing issue, notify reporter |
| Out of Scope | Third-party, not our code | Redirect to appropriate party |
Triage Communication
Send triage outcome to reporter:
- Severity classification
- Expected fix timeline (if applicable)
- Any questions or requests for clarification
Phase 3: Fix
Fix Timeline Targets
| Severity | Target | Notes |
|---|---|---|
| Actively Exploited | 30 calendar days | May publish interim mitigation within 10 business days |
| Critical | 60 calendar days | Priority scheduling |
| High | 90 calendar days | Standard priority |
| Medium | 180 calendar days | May bundle with regular release |
| Low | As time permits | Address opportunistically |
Fix Process
- Branch: Create a private branch for the fix (if sensitive)
- Develop: Implement the remediation
- Test: Verify the fix resolves the issue without regression
- Review: Code review with security focus
- Prepare: Draft release notes and advisory content
- Coordinate: Align disclosure timing with reporter
Emergency Mitigation
If a full fix will take longer than acceptable:
- Document workaround / mitigation steps
- Communicate to users via release notes or advisory
- Continue work on full fix
Phase 4: Disclosure
Disclosure Channels
| Channel | Use Case |
|---|---|
| Release Notes | All security fixes |
| GitHub Security Advisory | Significant vulnerabilities (High/Critical) |
| CVE | Optional; request if warranted and resources allow |
Advisory Content
Each advisory should include:
- Affected versions
- Fixed version
- Description of the vulnerability (without exploit details)
- Severity rating
- Mitigation steps (if applicable)
- Credit to reporter (if desired)
Coordinated Disclosure
- Default embargo: up to 90 days from report
- Negotiate with reporter if more time needed
- Release fix and advisory simultaneously
- Notify reporter before public disclosure
Phase 5: Postmortem
When to Conduct
Conduct a postmortem for:
- Critical or High severity vulnerabilities
- Actively exploited vulnerabilities
- Vulnerabilities with significant user impact
- Cases where the process broke down
Postmortem Template
## Security Postmortem: SEC-YYYY-NNN
### Summary
[Brief description of the vulnerability]
### Timeline
- Date reported:
- Date acknowledged:
- Date triaged:
- Date fixed:
- Date disclosed:
### Root Cause
[How did this vulnerability come to exist?]
### Impact
[What was the actual or potential impact?]
### Response Evaluation
- What went well?
- What could be improved?
### Action Items
- [ ] Action item 1
- [ ] Action item 2
### Lessons Learned
[Key takeaways for future prevention]
Vulnerability Tracker
Maintain a private vulnerability tracker with:
- Tracking ID (SEC-YYYY-NNN format)
- Report date
- Reporter contact
- Status (Intake / Triage / Fix / Disclosed / Closed)
- Severity
- Affected component(s)
- Fix version
- Disclosure date
- Notes
Location: Private (not in public repository)
Annual Review
Review this process annually or after significant incidents:
- Update timelines if capacity changes
- Incorporate lessons learned
- Align with regulatory changes (e.g., CRA reporting obligations starting Sept 2026)
Document Version: 1.0
Last Updated: 2025-12-30
Next Review: 2026-12-30