CtrlK
BlogDocsLog inGet started
Tessl Logo

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.

61

Quality

72%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide

SecuritybySnyk

Passed

No findings from the security scan

Fix and improve this skill with Tessl

tessl review fix ./packages/decepticon/decepticon/skills/plugins/verifier/seven-question-gate/SKILL.md
SKILL.md
Quality
Evals
Security

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="passed")
5. If any = no → update_objective(status="blocked",
                  reason="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-patternWhat 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 listSubmission 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 writtenWasted effort writing reports that get killed
Apply this only to High/CriticalAll 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
Repository
PurpleAILAB/Decepticon
Last updated
First committed

Is this your skill?

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.