Skip to main content

seven-question-gate

7-question gate run before promoting a finding to FINDING + opening a report. Kills weak/non-impactful findings before they reach the report stage and damage validity ratio.

Jump to install

Source facts

Repository
BitterSecurity/Decepticon
Last source activity
August 16, 2026 at 02:36
Detected SKILL.md language
English
Stars
5,522
Forks
1,048

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
seven-question-gate
description
7-question gate run before promoting a finding to FINDING + opening a report. Kills weak/non-impactful findings before they reach the report stage and damage validity ratio.
metadata
{"when_to_use":"bug bounty triage gate validate finding before report n/a duplicate","mitre_attack":"T1497","subdomain":"verification"}
# 7-Question Gate Run this gate **after `validate_finding` returns success but BEFORE adding the finding to the report**. Any "no" → kill the finding, don't write a report. This saves bounty validity-ratio and engagement- report quality. ## The 7 questions ### 1. Is the asset in scope? Check the engagement's `scope.md` (recon/decepticon's RoE doc): - In-scope domain list - In-scope IP/CIDR list - Out-of-scope explicit exclusions (test envs, staging, third-party CDNs/CDN-managed subdomains where the org doesn't own the underlying machine) If asset is not on the in-scope list OR on the out-of-scope list: **kill**. Do not write the report. ### 2. Is there real-world impact? Theoretical bugs without demonstrable impact get N/A on every BB program. Concrete impact statements include: - "An attacker can read victim user X's PII (email, name, DOB, SSN)" - "An attacker can post on behalf of victim user X" - "An attacker can transfer funds from victim user X's account" - "An attacker can persist code on the production server" - "An attacker can pivot to internal network 10.0.0.0/8" If the finding's impact is "configuration is non-default" or "the manual recommends X but the deployment does Y" without concrete attacker-reachable harm: **kill**. ### 3. Does the PoC actually prove the impact? The `validate_finding` result is necessary but not sufficient. The **PoC must demonstrate the IMPACT**, not just trigger the vector. Examples: - IDOR PoC must show ATTACKER session reading VICTIM data — not just "request returned 200 OK" - XSS PoC must execute attacker-controlled JS in victim's browser context — not just "alert(1) reflected in HTML source" - SQLi PoC must extract real data — not just "single quote → 500" - SSRF PoC must reach an internal-only target — not just "external fetch worked" If the PoC stops short of impact demonstration: **kill** or queue for re-verification with a better PoC. ### 4. Is the impact **above the program's severity floor**? Many BB programs explicitly out-of-scope: - CSRF on logout endpoint - Self-XSS (requires victim to inject own payload) - Missing security headers - Information disclosure of public-by-design info - Rate-limit issues w/o demonstrated abuse - Subdomain takeover candidates where ownership can't be proven - Clickjacking without authenticated state change Read the program's "out of scope" / "won't fix" / "informational only" list. If the finding falls in those: **kill** or escalate to a chain that crosses the floor. ### 5. Can the operator reproduce it from your PoC alone? A triager will not have your engagement context. The PoC must work standalone: - All required prerequisites stated explicitly (account registration, specific user role, specific test data) - Exact URL / parameter / cookie values - Browser version if it matters - Date/time stamp if the bug is recent and the program may patch in between If the PoC requires "you also need state X that I had set up": **kill** or rewrite the PoC to include the setup. ### 6. Is it a known duplicate? Check before submitting: - Run `gh search` / Hacktivity search for the same vuln class on the same domain - Read CHANGELOG / recent disclosures - Check `confirmed-findings.md` and `rejected-hypotheses.md` notepad files in the current engagement If the report likely duplicates a known disclosure: **kill** unless your variant has materially different impact or affects a different component. ### 7. Does the title sell the impact in one line? Bad titles: - "SSRF on /webhook" - "JWT issue" - "Mass assignment" Good titles: - "SSRF on /webhook → AWS instance-metadata cred extract → full account takeover" - "JWT alg=none bypass → admin impersonation of any user" - "Mass assignment on PATCH /api/users/me → self-promote to is_admin=true" If you can't write a one-line title that names {vuln class, target, impact, severity}: **kill** and re-think whether the impact is real. ## Decision If all 7 are "yes" → proceed to report. Confidence: high. If any are "no" → kill the finding. Mark it in `notepad/rejected-hypotheses.md` with the question number that failed and a one-line reason. Do NOT submit. ## Why this gate matters Bug-bounty programs track **validity ratio** (valid reports ÷ total submissions). Low validity → lower triage priority + lower long-term reward tier. The 7-Question Gate is the difference between a researcher with 90% validity (high earner) and one with 30% validity (eventually banned). For internal engagements, this gate is the difference between a report consumed by stakeholders and a report that sits in a Jira backlog forever. ## Integration Verifier agent loads this skill BEFORE calling `update_objective` on a validated finding. Specifically: ``` 1. validate_finding(...) returns success 2. load_skill("/skills/verifier/seven-question-gate/SKILL.md") 3. Walk through Q1-Q7 — write each answer to the finding's KG node: kg_add_node(kind="vulnerability", key=<finding>, props={"gate_q1_scope": "yes", "gate_q2_impact": "yes", "gate_q3_poc_proves_impact": "yes", ...}) 4. If all Q1-Q7 = yes → update_objective(status="completed") 5. If any = no → update_objective(status="blocked", notes="seven_question_gate: <Q#> failed: <reason>") ``` This makes the gate auditable — every finding has a written record of which question pass/failed before it reaches the report stage. ## Anti-patterns | Anti-pattern | What goes wrong | |---|---| | Skip the gate "because validate_finding passed" | False positives reach the report; validity ratio drops | | Answer "yes" to Q4 without reading the program's out-of-scope list | Submission gets N/A'd as known-out-of-scope | | Skip Q7 "title sells impact" | Triagers downgrade based on bad first-impression | | Run the gate AFTER report draft is written | Wasted effort writing reports that get killed | | Apply this only to High/Critical | All findings benefit; Low findings w/ bad titles also damage validity | ## Cross-references - Verifier agent prompt: `decepticon/agents/prompts/verifier.md` - Verifier router: `skills/verifier/SKILL.md` - Bounty report skill: `skills/verifier/bounty-report/SKILL.md` - Operator's external `triage-validation` skill (Decepticon-external) for the broader gate methodology
View on GitHub