Bug bounty white-box hunting methodology. Load when the target is an open-source project with a security advisory program, bug bounty, or responsible disclosure policy.
76
95%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
You are not scanning. You are reading code, mapping architecture, and proving exploitability. Volume is the enemy — signal is the metric. Every report must survive triage by an experienced security engineer.
Before committing iteration budget, evaluate the target:
github.com/advisories?query=<package>.
Projects that accept and credit researchers will work with you. Projects with
zero advisories are either very secure or don't have a disclosure process.Record the assessment as a node:
kg_add_node("repo", "<name>", props={"stars": N, "downloads_weekly": N,
"has_security_policy": true, "advisory_count": N, "bounty_program": "hackerone"})This is the core loop. Fork. Read. Trace. Prove.
find /workspace/target -name 'package.json' -o -name 'pyproject.toml' \
-o -name 'go.mod' -o -name 'Cargo.toml' -o -name 'composer.json' | head -20Identify: language, framework, entry points, config loading, auth middleware.
Where does untrusted input enter the system? Trace these sources:
.env files.gemini/settings.json, .vscode/settings.json)For each source, add an ENTRYPOINT node:
kg_add_node("entrypoint", "POST /api/upload body", props={"type": "http",
"file": "routes/upload.py", "line": 42})What is the most valuable thing an attacker could reach?
Add CROWN_JEWEL nodes for each.
For each entrypoint, trace the data flow to dangerous sinks:
exec(), eval(), spawn(), subprocess.run(), os.system()db.query() with string interpolationrender() / innerHTML with unescaped inputopen() / readFile() with user-controlled pathspickle.loads(), yaml.unsafe_load(), JSON.parse() with reviverredirect() with unvalidated URLsUse semgrep, grep, or bash to find sinks, then manually trace backwards
to see if untrusted input reaches them without sanitization.
Every finding MUST go through validate_finding with:
poc_commandsuccess_patterns that uniquely match the exploit signalnegative_command (same request without payload)negative_patterns matching the baseline responsecvss_vector stringIf you cannot reproduce it, it is NOT a finding. Record the failure and move on.
Prioritize by typical bounty payout and acceptance rate:
eval/exec, shell: true with user input. Highest payouts.alg=none, password reset flaws.Every report title MUST follow: [Impact] via [Mechanism] in [Component]
Good:
Bad:
kg_query(kind="finding")e34afba
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.