A Claude Code skill bundle for bug hunting and external red-team work - 82 skills, 15 slash commands, 681 disclosed-report patterns curated across 24 core vulnerability classes, plus enterprise identity + infrastructure attack matrices.
This report summarizes scanner evidence for elementalsouls/Claude-BugHunter, a Python project with 4,947 GitHub stars. SynthScan examined 59,118 lines of code across 263 source files, recording 379 pattern matches distributed across 15 syntactic categories. The legacy adjusted pattern signal is 12.7 (Moderate pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 180 finding(s).
Are imports declared and package/API names verified? 33 finding(s).
Are wrappers, guards, and repeated structures necessary? 171 finding(s).
Which changes need focused human review? 379 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 379 distinct pattern matches across 15 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | docs/disclosed-reports/hunt-session.md | 13 | # Step 1: Set attacker-controlled session ID (pre-auth request) | COMMENT |
| LOW⚡ | docs/disclosed-reports/hunt-session.md | 17 | # Step 2: Social engineer admin to open: | COMMENT |
| LOW⚡ | docs/disclosed-reports/hunt-session.md | 20 | # Step 3: After admin logs in with attacker's session ID, use it: | COMMENT |
| LOW⚡ | docs/verification/phase2e-jwt-graphql-race.md | 41 | # Step 1: legit user token (Alice, role=user) | COMMENT |
| LOW⚡ | docs/verification/phase2e-jwt-graphql-race.md | 46 | # Step 2: admin endpoint correctly denies Alice | COMMENT |
| LOW⚡ | docs/verification/phase2e-jwt-graphql-race.md | 50 | # Step 3: forge an alg=none token claiming role=admin | COMMENT |
| LOW⚡ | docs/verification/phase2e-jwt-graphql-race.md | 59 | # Step 4: submit forged token | COMMENT |
| LOW | docs/verification/phase2e-jwt-graphql-race.md | 95 | # Step 1: introspection | COMMENT |
| LOW | docs/verification/phase2e-jwt-graphql-race.md | 118 | # Step 2: query post id=1 (admin's secret notes) — no auth required, no ownership check | COMMENT |
| LOW | docs/verification/phase2j-cloud-localstack.md | 129 | # Step 1: confirm the key works + identify principal | COMMENT |
| LOW | docs/verification/phase2j-cloud-localstack.md | 147 | # Step 2: walk visible buckets (cloud-iam-deep §"discover scope") | COMMENT |
| LOW | docs/verification/phase2j-cloud-localstack.md | 159 | # Step 3: AssumeRole — the cloud-iam-deep "STS chaining" primitive | COMMENT |
| LOW⚡ | docs/verification/juice-shop-2026-05-15.md | 76 | # Step 1: register attacker (User B) | COMMENT |
| LOW⚡ | docs/verification/juice-shop-2026-05-15.md | 81 | # Step 2: log in as User B, capture token + own basket id | COMMENT |
| LOW⚡ | docs/verification/juice-shop-2026-05-15.md | 89 | # Step 3: try to read basket id=1 (admin's basket) | COMMENT |
| LOW⚡ | docs/verification/phase2f-ssti-oauth-fileupload.md | 40 | # Step 1: Detection probe | COMMENT |
| LOW⚡ | docs/verification/phase2f-ssti-oauth-fileupload.md | 48 | # Step 2: Full RCE via cycler-init-globals walker (canonical Jinja2 escape) | COMMENT |
| LOW | docs/verification/phase2f-ssti-oauth-fileupload.md | 62 | # Step 3: Flask config dump | COMMENT |
| LOW⚡ | docs/verification/phase2i-llm-ato.md | 181 | # Step 1: attacker has Bob's session (assume cookie theft from prior XSS) | COMMENT |
| LOW⚡ | docs/verification/phase2i-llm-ato.md | 184 | # Step 2: attacker changes the email — no re-auth required | COMMENT |
| LOW⚡ | docs/verification/phase2i-llm-ato.md | 188 | # Step 3: attacker requests password reset for the NEW email | COMMENT |
| LOW | commands/web3-audit.md | 18 | ## Step 0: Pre-Dive Kill Signals | COMMENT |
| LOW | commands/web3-audit.md | 39 | ## Step 1: Accounting State Desynchronization (28% of Criticals) | COMMENT |
| LOW | commands/web3-audit.md | 54 | ## Step 2: Access Control (19% of Criticals) | COMMENT |
| LOW | commands/web3-audit.md | 73 | ## Step 3: Incomplete Code Path (17% of Criticals) | COMMENT |
| LOW | commands/web3-audit.md | 89 | ## Step 4: Off-By-One (22% of Highs) | COMMENT |
| LOW | commands/web3-audit.md | 104 | ## Step 5: Oracle / Price Manipulation | COMMENT |
| LOW | commands/web3-audit.md | 122 | ## Step 6: ERC4626 Vaults | COMMENT |
| LOW | commands/web3-audit.md | 134 | ## Step 7: Reentrancy | COMMENT |
| LOW⚡ | commands/web3-audit.md | 147 | ## Step 8: Flash Loan Oracle Manipulation | COMMENT |
| LOW⚡ | commands/web3-audit.md | 155 | ## Step 9: Signature Replay | COMMENT |
| LOW⚡ | commands/web3-audit.md | 164 | ## Step 10: Proxy / Upgrade | COMMENT |
| LOW | commands/recon.md | 34 | ### Step 1: Subdomain Enumeration | COMMENT |
| LOW | commands/recon.md | 52 | ### Step 2: Live Host Discovery | COMMENT |
| LOW | commands/recon.md | 64 | ### Step 3: URL Crawl | COMMENT |
| LOW | commands/recon.md | 79 | ### Step 4: Classify URLs | COMMENT |
| LOW | commands/recon.md | 135 | ### Step 5: Nuclei Scan | COMMENT |
| LOW | commands/recon.md | 167 | ### Step 6: JS Secret Scan | COMMENT |
| LOW | commands/recon.md | 189 | ### Step 7: Subdomain Takeover Check | COMMENT |
| LOW | commands/recon.md | 199 | ### Step 8: Source Leak Quick Wins (30 seconds, often Critical) | COMMENT |
| LOW | commands/recon.md | 230 | ### Step 9: DNS & TLS Quick Checks | COMMENT |
| LOW | commands/token-scan.md | 19 | ## Step 0: Quick Kill Signals | COMMENT |
| LOW | commands/token-scan.md | 33 | ## Step 1: Optional Automated Scanner | COMMENT |
| LOW | commands/token-scan.md | 49 | ## Step 2: Hidden Mint Check | COMMENT |
| LOW⚡ | commands/token-scan.md | 60 | ## Step 3: Honeypot Check | COMMENT |
| LOW⚡ | commands/token-scan.md | 70 | ## Step 4: Fee Manipulation Check | COMMENT |
| LOW⚡ | commands/token-scan.md | 79 | ## Step 5: LP Drain Check | COMMENT |
| LOW⚡ | commands/token-scan.md | 88 | ## Step 6: Bonding Curve Check | COMMENT |
| LOW⚡ | commands/token-scan.md | 96 | ## Step 7: Authority Check (Solana) | COMMENT |
| LOW⚡ | commands/token-scan.md | 106 | ## Step 8: Fake Renounce Check | COMMENT |
| LOW⚡ | commands/token-scan.md | 115 | ## Step 9: Sandwich Amplification Check | COMMENT |
| LOW⚡ | skills/meme-coin-audit/SKILL.md | 189 | // Step 1: Victim buys tokens | COMMENT |
| LOW⚡ | skills/meme-coin-audit/SKILL.md | 194 | // Step 2: Owner mints and dumps | COMMENT |
| LOW⚡ | skills/meme-coin-audit/SKILL.md | 202 | // Step 3: Victim's tokens are now worthless | COMMENT |
| LOW⚡ | skills/meme-coin-audit/SKILL.md | 207 | // Step 1: Victim buys | COMMENT |
| LOW⚡ | skills/meme-coin-audit/SKILL.md | 212 | // Step 2: Owner blacklists victim | COMMENT |
| LOW⚡ | skills/meme-coin-audit/SKILL.md | 217 | // Step 3: Victim cannot sell | COMMENT |
| LOW⚡ | skills/meme-coin-audit/SKILL.md | 225 | // Step 1: Verify initial fee is low | COMMENT |
| LOW⚡ | skills/meme-coin-audit/SKILL.md | 228 | // Step 2: Owner sets fee to 99% | COMMENT |
| LOW⚡ | skills/meme-coin-audit/SKILL.md | 232 | // Step 3: Victim sells — loses 99% to fees | COMMENT |
| 60 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | cbh/cli.py | 75 | # ============================================================ | COMMENT |
| MEDIUM⚡ | cbh/cli.py | 77 | # ============================================================ | COMMENT |
| MEDIUM⚡ | cbh/cli.py | 188 | # ============================================================ | COMMENT |
| MEDIUM⚡ | cbh/cli.py | 190 | # ============================================================ | COMMENT |
| MEDIUM | cbh/cli.py | 394 | # ============================================================ | COMMENT |
| MEDIUM | cbh/cli.py | 396 | # ============================================================ | COMMENT |
| MEDIUM | cbh/cli.py | 459 | # ============================================================ | COMMENT |
| MEDIUM | cbh/cli.py | 461 | # ============================================================ | COMMENT |
| MEDIUM | cbh/cli.py | 595 | # ============================================================ | COMMENT |
| MEDIUM | cbh/cli.py | 597 | # ============================================================ | COMMENT |
| MEDIUM | cbh/cli.py | 660 | # ============================================================ | COMMENT |
| MEDIUM | cbh/cli.py | 662 | # ============================================================ | COMMENT |
| MEDIUM | cbh/cli.py | 823 | # ============================================================ | STRING |
| MEDIUM | cbh/cli.py | 825 | # ============================================================ | STRING |
| MEDIUM | cbh/cli.py | 875 | # ============================================================ | STRING |
| MEDIUM | cbh/cli.py | 877 | # ============================================================ | STRING |
| MEDIUM | docs/verification/hardened-lab/app.py | 107 | # ============================================================ | STRING |
| MEDIUM | docs/verification/hardened-lab/app.py | 109 | # ============================================================ | STRING |
| MEDIUM | docs/verification/hardened-lab/app.py | 148 | # ============================================================ | STRING |
| MEDIUM | docs/verification/hardened-lab/app.py | 150 | # ============================================================ | STRING |
| MEDIUM | docs/verification/hardened-lab/app.py | 172 | # ============================================================ | STRING |
| MEDIUM | docs/verification/hardened-lab/app.py | 174 | # ============================================================ | STRING |
| MEDIUM | docs/verification/hardened-lab/app.py | 192 | # ============================================================ | STRING |
| MEDIUM | docs/verification/hardened-lab/app.py | 194 | # ============================================================ | STRING |
| MEDIUM | docs/verification/hardened-lab/app.py | 221 | # ============================================================ | STRING |
| MEDIUM | docs/verification/hardened-lab/app.py | 223 | # ============================================================ | STRING |
| MEDIUM | docs/verification/hardened-lab/app.py | 241 | # ============================================================ | STRING |
| MEDIUM | docs/verification/hardened-lab/app.py | 243 | # ============================================================ | STRING |
| MEDIUM | docs/verification/hardened-lab/app.py | 260 | # ============================================================ | STRING |
| MEDIUM | docs/verification/hardened-lab/app.py | 262 | # ============================================================ | STRING |
| MEDIUM | docs/verification/phase2i-lab/app.py | 26 | # ============================================================ | COMMENT |
| MEDIUM | docs/verification/phase2i-lab/app.py | 28 | # ============================================================ | COMMENT |
| MEDIUM | docs/verification/phase2i-lab/app.py | 131 | # ============================================================ | COMMENT |
| MEDIUM | docs/verification/phase2i-lab/app.py | 133 | # ============================================================ | COMMENT |
| MEDIUM | docs/verification/phase3-playwright/target_app.py | 14 | # ============================================================ | COMMENT |
| MEDIUM | docs/verification/phase3-playwright/target_app.py | 18 | # ============================================================ | COMMENT |
| MEDIUM | docs/verification/phase3-playwright/target_app.py | 45 | # ============================================================ | STRING |
| MEDIUM | docs/verification/phase3-playwright/target_app.py | 47 | # ============================================================ | STRING |
| MEDIUM | docs/verification/phase3-playwright/target_app.py | 76 | # ============================================================ | STRING |
| MEDIUM | docs/verification/phase3-playwright/target_app.py | 80 | # ============================================================ | STRING |
| MEDIUM | docs/verification/phase2g-lab/app.py | 41 | # ============================================================ | COMMENT |
| MEDIUM | docs/verification/phase2g-lab/app.py | 43 | # ============================================================ | COMMENT |
| MEDIUM | docs/verification/phase2g-lab/app.py | 124 | # ============================================================ | COMMENT |
| MEDIUM | docs/verification/phase2g-lab/app.py | 126 | # ============================================================ | COMMENT |
| MEDIUM | docs/verification/phase2g-lab/app.py | 160 | # ============================================================ | COMMENT |
| MEDIUM | docs/verification/phase2g-lab/app.py | 162 | # ============================================================ | COMMENT |
| MEDIUM | docs/verification/phase2f-lab/app.py | 22 | # ============================================================ | COMMENT |
| MEDIUM | docs/verification/phase2f-lab/app.py | 24 | # ============================================================ | COMMENT |
| MEDIUM | docs/verification/phase2f-lab/app.py | 48 | # ============================================================ | STRING |
| MEDIUM | docs/verification/phase2f-lab/app.py | 50 | # ============================================================ | STRING |
| MEDIUM | docs/verification/phase2f-lab/app.py | 121 | # ============================================================ | STRING |
| MEDIUM | docs/verification/phase2f-lab/app.py | 123 | # ============================================================ | STRING |
| MEDIUM⚡ | docs/verification/phase2e-lab/app.py | 51 | # ============================================================ | COMMENT |
| MEDIUM⚡ | docs/verification/phase2e-lab/app.py | 53 | # ============================================================ | COMMENT |
| MEDIUM | docs/verification/phase2e-lab/app.py | 20 | # ============================================================ | COMMENT |
| MEDIUM | docs/verification/phase2e-lab/app.py | 22 | # ============================================================ | COMMENT |
| MEDIUM | docs/verification/phase2e-lab/app.py | 279 | # ============================================================ | COMMENT |
| MEDIUM | docs/verification/phase2e-lab/app.py | 281 | # ============================================================ | COMMENT |
| MEDIUM⚡ | docs/verification/phase2e-lab/app.py | 114 | # ============================================================ | STRING |
| MEDIUM⚡ | docs/verification/phase2e-lab/app.py | 116 | # ============================================================ | STRING |
| 22 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | research/reports/harvest_bugcrowd.py | 37 | except Exception as e: | CODE |
| LOW | research/reports/verify_citations.py | 52 | except Exception: | CODE |
| LOW | research/reports/harvest_h1.py | 112 | except Exception: | CODE |
| LOW | research/reports/harvest_h1.py | 124 | except Exception: | CODE |
| LOW | research/reports/harvest_h1.py | 132 | except Exception: | CODE |
| LOW | research/reports/classify_reports.py | 110 | except Exception: | CODE |
| LOW⚡ | cbh/cli.py | 67 | except Exception: | CODE |
| LOW⚡ | cbh/cli.py | 181 | except Exception: | CODE |
| LOW⚡ | cbh/cli.py | 184 | except Exception as e: | CODE |
| LOW | cbh/cli.py | 159 | except Exception: | CODE |
| LOW | cbh/cli.py | 204 | except Exception: | CODE |
| LOW | cbh/cli.py | 231 | except Exception: | CODE |
| LOW | cbh/cli.py | 481 | except Exception: | CODE |
| LOW | cbh/cli.py | 840 | except Exception as e: | STRING |
| LOW | docs/verification/phase3-playwright/harness.py | 143 | except Exception as e: | CODE |
| LOW | docs/verification/phase2g-lab/app.py | 62 | except Exception as e: | CODE |
| LOW | docs/verification/phase2g-lab/app.py | 109 | except Exception: | CODE |
| LOW | docs/verification/phase2g-lab/app.py | 183 | except Exception as e: | CODE |
| LOW⚡ | docs/verification/phase2e-lab/app.py | 47 | except Exception: | CODE |
| LOW | docs/superpowers/plans/2026-08-09-autopilot-ledger.md | 140 | except Exception: | CODE |
| LOW | docs/superpowers/plans/2026-08-09-autopilot-ledger.md | 184 | except Exception: | CODE |
| MEDIUM | docs/superpowers/plans/2026-08-09-autopilot-ledger.md | 91 | def _rotate_if_needed(path): | CODE |
| LOW | scripts/refresh-cve-index.py | 81 | except Exception: | CODE |
| LOW | scripts/refresh-cve-index.py | 162 | except Exception: | CODE |
| LOW | scripts/setup_harness_mcp.py | 32 | except Exception: | CODE |
| LOW | scripts/setup_harness_mcp.py | 72 | except Exception: | CODE |
| LOW | scripts/setup_harness_mcp.py | 163 | except Exception: | CODE |
| LOW | scripts/hunt.sh | 250 | except Exception as e: | CODE |
| LOW | …s/offensive-osint/references/helpers-and-automation.md | 164 | except Exception: | CODE |
| LOW | skills/offensive-osint/scripts/h1_reference.py | 110 | except Exception as e: | CODE |
| LOW | skills/offensive-osint/scripts/h1_reference.py | 125 | except Exception as e: | CODE |
| LOW⚡ | skills/offensive-osint/scripts/dashboard.py | 244 | except Exception as exc: # pragma: no cover - last-resort guard | CODE |
| LOW | eval/run_eval_ps_auto.py | 62 | except Exception: | CODE |
| LOW | eval/run_eval_ps_auto.py | 82 | except Exception: | CODE |
| LOW | eval/run_eval_ps_auto.py | 88 | except Exception: | CODE |
| LOW | eval/run_eval.py | 47 | except Exception: | CODE |
| LOW | eval/run_eval.py | 60 | except Exception: | CODE |
| LOW | eval/run_eval.py | 123 | except Exception as e: | CODE |
| LOW | eval/test_harness.py | 39 | except Exception as e: | CODE |
| LOW | eval/test_harness.py | 98 | except Exception: | CODE |
| LOW | eval/test_harness.py | 114 | except Exception as e: | CODE |
| LOW | eval/test_harness.py | 124 | except Exception: | CODE |
| LOW | eval/oracle_portswigger.py | 28 | except Exception: | CODE |
| LOW | eval/run_fp.py | 87 | except Exception: | CODE |
| LOW | engine/memory.py | 106 | except Exception: | CODE |
| LOW | engine/memory.py | 150 | except Exception: | CODE |
| MEDIUM | engine/memory.py | 55 | def _rotate_if_needed(path): | CODE |
| LOW | engine/osint.py | 24 | except Exception: | CODE |
| LOW | engine/osint.py | 49 | except Exception: | CODE |
| LOW | engine/osint.py | 84 | except Exception: | CODE |
| LOW | engine/osint.py | 95 | except Exception: | CODE |
| LOW | engine/osint.py | 109 | except Exception: | CODE |
| LOW | engine/osint.py | 128 | except Exception: | CODE |
| MEDIUM | engine/osint.py | 21 | def _run(cmd, timeout=120): | CODE |
| MEDIUM | engine/osint.py | 92 | def _run_stdin(cmd, stdin, timeout=240): | CODE |
| LOW | engine/engine.py | 229 | except Exception as e: | CODE |
| LOW | engine/engine.py | 329 | except Exception as e: | CODE |
| LOW | engine/engine.py | 387 | except Exception as e: | CODE |
| LOW | engine/agent.py | 52 | except Exception as e: | CODE |
| LOW | engine/agent.py | 65 | except Exception: | CODE |
| 12 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | research/reports/verify_citations.py | 52 | except Exception: | CODE |
| HIGH | research/reports/classify_reports.py | 110 | except Exception: | CODE |
| HIGH | cbh/cli.py | 159 | except Exception: | CODE |
| HIGH | docs/verification/phase2g-lab/app.py | 109 | except Exception: | CODE |
| HIGH | scripts/scan_identifiers.py | 107 | except (OSError, UnicodeError): | CODE |
| HIGH | eval/run_eval_ps_auto.py | 62 | except Exception: | CODE |
| HIGH | engine/osint.py | 109 | except Exception: | CODE |
| HIGH | engine/osint.py | 128 | except Exception: | CODE |
| HIGH | engine/agent.py | 65 | except Exception: | CODE |
| HIGH | engine/agent.py | 70 | except Exception: | CODE |
| HIGH | engine/recon.py | 535 | except Exception: | CODE |
| HIGH | engine/recon.py | 547 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | skills/offensive-osint/scripts/dashboard.py | 760 | if (backScan && consoleAnchor) { | CODE |
| HIGH | skills/offensive-osint/scripts/dashboard.py | 786 | cards.push(`<div class="card sev-${s}"><div class="n">${sev[s]||0}</div><div class="k">${s}</div></div>`); | CODE |
| HIGH⚡ | skills/offensive-osint/scripts/dashboard.py | 822 | let catFilter = null; | CODE |
| HIGH⚡ | skills/offensive-osint/scripts/dashboard.py | 831 | $('#expJson', outEl).onclick = () => download('findings.json', JSON.stringify(currentRows(catFilter), null, 2), 'appli | CODE |
| HIGH⚡ | skills/offensive-osint/scripts/dashboard.py | 839 | (!catFilter || f.category === catFilter) && | CODE |
| HIGH⚡ | skills/offensive-osint/scripts/dashboard.py | 843 | function drawRows(outEl, catFilter=null) { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | README.md | 321 | **Generator tool used (not vendored):** [shuvonsec/public-skills-builder](https://github.com/shuvonsec/public-skills-bui | CODE |
| MEDIUM | docs/credits.md | 115 | ## Tooling acknowledgments (not vendored — used as scaffolding) | COMMENT |
| MEDIUM⚡ | scripts/install.sh | 13 | # NOT port; other harnesses get the knowledge, not the orchestration): | COMMENT |
| MEDIUM | scripts/install.sh | 219 | echo "# Bug-bounty engagement scaffolding (bug-bounty-claude-skills)" >> "$SHELL_RC" | CODE |
| MEDIUM⚡ | scripts/hunt.sh | 3 | # hunt — bug-bounty engagement scaffolding | COMMENT |
| MEDIUM | skills/hunt-llm-ai/SKILL.md | 154 | ### Multi-tenant memory / RAG poisoning (ASI06 variant) | COMMENT |
| MEDIUM | skills/hunt-rag-vector/SKILL.md | 8 | ## LLM08 — Vector & Embedding Weaknesses (RAG Pipeline Attacks) | COMMENT |
| MEDIUM | skills/hunt-rag-vector/SKILL.md | 115 | ## Technique 4 — Retrieval Hijack ("SEO Poisoning" for RAG) | COMMENT |
| MEDIUM | skills/bug-bounty/SKILL.md | 1589 | ### Engagement scaffolding | COMMENT |
| MEDIUM | skills/offensive-osint/references/tooling-install.md | 173 | ### 46.12 Frameworks / orchestration | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL⚡ | docs/verification/phase2f-ssti-oauth-fileupload.md | 49 | PAYLOAD="{{ self._TemplateReference__context.cycler.__init__.__globals__.os.popen('id').read() }}" | CODE |
| CRITICAL | skills/hunt-rce/SKILL.md | 130 | {{self._TemplateReference__context.cycler.__init__.__globals__.os.popen('id').read()}} | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | research/reports/verify_citations.py | 57 | CODE | |
| LOW | cbh/cli.py | 516 | CODE | |
| LOW | docs/verification/phase2e-lab/app.py | 217 | CODE | |
| LOW | scripts/scan_identifiers.py | 44 | CODE | |
| LOW | scripts/scan_identifiers.py | 96 | CODE | |
| LOW | scripts/lint_skills.py | 71 | CODE | |
| LOW | scripts/lint_skills.py | 147 | CODE | |
| LOW | scripts/setup_harness_mcp.py | 26 | CODE | |
| LOW | scripts/setup_harness_mcp.py | 36 | CODE | |
| LOW | scripts/gen_skill_catalog.py | 37 | CODE | |
| LOW | skills/offensive-osint/scripts/dashboard.py | 233 | CODE | |
| LOW | eval/run_eval_ps.py | 40 | CODE | |
| LOW | engine/memory.py | 213 | CODE | |
| LOW | engine/osint.py | 28 | CODE | |
| LOW | engine/osint.py | 99 | CODE | |
| LOW | engine/engine.py | 238 | CODE | |
| LOW | engine/scope.py | 111 | CODE | |
| LOW | engine/recon.py | 134 | CODE | |
| LOW | engine/recon.py | 353 | CODE | |
| LOW | engine/recon.py | 459 | CODE | |
| LOW | engine/recon.py | 511 | CODE | |
| LOW | engine/recon.py | 562 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | research/reports/draft_patterns.py | 18 | CODE | |
| LOW | cbh/cli.py | 31 | CODE | |
| LOW | cbh/cli.py | 37 | CODE | |
| LOW | cbh/cli.py | 46 | CODE | |
| LOW | docs/verification/phase2i-lab/app.py | 21 | CODE | |
| LOW | docs/verification/phase2i-lab/app.py | 22 | CODE | |
| LOW | docs/verification/phase2i-lab/app.py | 22 | CODE | |
| LOW | docs/verification/phase2g-lab/app.py | 21 | CODE | |
| LOW | docs/verification/phase2g-lab/app.py | 22 | CODE | |
| LOW | docs/verification/phase2g-lab/app.py | 23 | CODE | |
| LOW | docs/verification/phase2f-lab/app.py | 12 | CODE | |
| LOW | docs/verification/phase2f-lab/app.py | 15 | CODE | |
| LOW | docs/verification/phase2e-lab/app.py | 10 | CODE | |
| LOW | docs/verification/phase2e-lab/app.py | 12 | CODE | |
| LOW | docs/verification/phase2e-lab/app.py | 13 | CODE | |
| LOW | docs/verification/phase2e-lab/app.py | 15 | CODE | |
| LOW | scripts/gen_skill_index.py | 13 | CODE | |
| LOW | scripts/refresh-cve-index.py | 15 | CODE | |
| LOW | scripts/gen_star_history.py | 15 | CODE | |
| LOW | skills/offensive-osint/scripts/dashboard.py | 26 | CODE | |
| LOW | eval/run_fp.py | 22 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/cbh-cli.md | 201 | COMMENT | |
| LOW | scripts/install.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/install.sh | 21 | # force a path regardless of detection.) | COMMENT |
| LOW | scripts/install-community-skills.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/hunt.sh | 1 | # shellcheck shell=bash | COMMENT |
| LOW | .github/FUNDING.yml | 1 | # Funding links shown on the repo's "Sponsor" button. | COMMENT |
| LOW | skills/hunt-nextjs/SKILL.md | 161 | COMMENT | |
| LOW | skills/hunt-springboot/SKILL.md | 101 | ## Phase 4 — H2 Console RCE | COMMENT |
| LOW | skills/hunt-k8s/SKILL.md | 101 | # Enumerate pods (auth varies; many kubelets allow anonymous read here) | COMMENT |
| LOW | skills/bug-bounty/SKILL.md | 241 | COMMENT | |
| LOW | skills/hunt-brute-force/SKILL.md | 121 | # seed test (above) before claiming "no rate limit". A clean probe is necessary, not sufficient. | COMMENT |
| LOW | skills/offensive-osint/references/secret-validators.md | 241 | COMMENT | |
| LOW | skills/hunt-ato/SKILL.md | 61 | COMMENT | |
| LOW | skills/hunt-dom/SKILL.md | 41 | # CSS injection points: | COMMENT |
| LOW | skills/bb-local-toolkit/SKILL.md | 241 | COMMENT | |
| LOW | skills/hunt-websocket/SKILL.md | 221 | COMMENT | |
| LOW | skills/hunt-ldap/SKILL.md | 241 | # (&(sAMAccountName=*)(memberOf=*Domain Admins*)) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | scripts/install.sh | 3 | # install.sh — Install Claude-BugHunter bundle (multi-harness) | COMMENT |
| MEDIUM | scripts/install.sh | 26 | # copies — only needed if a harness rejects unknown frontmatter keys | COMMENT |
| MEDIUM | scripts/install.sh | 245 | # === Extra harness targets (skills only) === | COMMENT |
| MEDIUM | .github/workflows/install-smoke.yml | 4 | # reaching users. Motivated by a harness PR that shipped a skills path the target | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | cbh/cli.py | 191 | def recon_subdomains_via_crtsh(target: str) -> set[str]: | CODE |
| LOW | cbh/cli.py | 218 | def recon_subdomains_via_subfinder(target: str) -> set[str]: | CODE |
| LOW | cbh/cli.py | 258 | def configure_proxy_from_args(args: argparse.Namespace) -> None: | CODE |
| LOW | docs/verification/phase3-playwright/harness.py | 89 | def test_oauth_userinfo_bypass(): | CODE |
| LOW | scripts/check_doc_counts.py | 119 | def check_catalog_section_sum(errors, actual): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/disclosed-reports/hunt-session.md | 38 | -d '{"email":"test@test.com","password":"pass"}' | \ | CODE |
| LOW | skills/report-writing/SKILL.md | 202 | {"email": "victim@test.com", "address": "123 Main St", ...} | CODE |
| LOW | skills/hunt-laravel/SKILL.md | 159 | -d '{"name": "Test", "email": "test@test.com", "is_admin": true, "role": "admin"}' | CODE |
| LOW | skills/offensive-osint/references/recon-techniques.md | 76 | company: "Acme Corp" | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | scripts/hunt.sh | 9 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/install-community-skills.sh | 39 | # Check if the existing one is shuvonsec's or a custom local toolkit | COMMENT |