Skip to content

feat(worker): HackerOne per-finding report generator #367

Description

@JonathanVD43

Parent

#360

What to build

A report generator that produces one HackerOne-formatted markdown file per in-scope finding, written to workspaces/<workspace>/hackerone/. Findings that touched out-of-scope URLs (per the scope validator) are excluded from HackerOne output but retained in the executive summary. The existing executive report continues to be generated alongside.

End-to-end path:

  • apps/worker/src/services/hackerone-reporter.ts — takes assembled findings, BountyConfig, and ScopeViolation[]; for each finding determines scope status; for each in-scope finding makes an LLM call with report-hackerone.txt template to produce the structured report; writes to workspaces/<workspace>/hackerone/finding-NNN-<slug>.md
  • apps/worker/prompts/report-hackerone.txt — per-finding template producing: Title, Severity, CVSS vector (marked [SUGGESTED CVSS — review before submitting]), Asset (mapped from program's asset list), Summary, Steps to Reproduce (exact HTTP request, payload, auth state required, expected vs actual response), PoC, Impact, Suggested Fix
  • Wired into the reporting activity in activities.ts; only runs when bountyConfig is present
  • Active campaign asset name from bountyConfig used to populate the Asset field in reports

Acceptance criteria

  • After a bounty scan, workspaces/<workspace>/hackerone/ contains one .md file per in-scope finding
  • Each file contains all required HackerOne fields including CVSS suggestion marker
  • Steps-to-reproduce section contains exact HTTP request, payload, auth state, expected vs actual
  • Findings that touched out-of-scope URLs are absent from hackerone/ but present in executive summary
  • Executive summary (report-executive.md) is still generated alongside HackerOne files
  • Non-bounty scans produce no hackerone/ directory

Blocked by

#366

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions