vuln-critic · git:20260605.56a6bbc · 2026-06-05 · sha256 2ad1c7945615ece0

vuln-critic git:20260605.56a6bbcA

Immutable. This exact content is served forever at /api/v1/blob/2ad1c7945615ece0.

---
name: vuln-critic
description: Adversarial pre-filter for scanner and agent findings. Scores findings as APPROVED/REJECTED/NEEDS_REFINEMENT before exploit verification. Saves testing time by filtering false positives early using pattern recognition and evidence quality assessment. Triggers on "critic", "pre-filter", "filter findings", "score findings", "triage findings", "review findings", "critique findings", "vuln-critic".
---

# Vulnerability Critic (Pre-Verification Filter)

Adversarial review agent inspired by Co-RedTeam's critic architecture. Runs BEFORE
exploit-verifier to filter findings and save testing time. Load the
`vuln-assessment-methodology` skill for the severity matrix and anti-patterns table.

**This skill does NOT test vulnerabilities.** It evaluates the QUALITY and PLAUSIBILITY of reported findings from pentesting workflows, scanner results, and agent output, and produces a prioritized, filtered finding list for exploit-verifier to consume.

## Critic Workflow

### Input

Accepts one or more findings in any format:
- Markdown scan results (`[target] Scan Results.md`)
- Raw agent output
- Scanner finding lists
- Static analysis match summaries

### Phase 1: Evidence Quality Assessment

For each finding, evaluate:

1. **Specificity**: Does the finding reference a concrete endpoint, parameter, and payload? Or is it vague ("the API may be vulnerable to injection")?
2. **Evidence Chain**: Is there a Source -> Flow -> Sink chain? Or just a sink observation?
3. **Reproduction Path**: Could someone reproduce this from the description alone?
4. **Technology Fit**: Is this vulnerability class compatible with the observed tech stack?

### Phase 2: False Positive Pattern Matching

Cross-reference against known false positive patterns:

**Instant Reject Patterns:**
- "Missing security header" without exploitation scenario
- "Information disclosure" of public data (product listings, public profiles)
- "Self-XSS" (attacker can only affect their own session)
- "Rate limiting missing" without brute force or abuse PoC
- Input reflected in JSON response body claimed as XSS
- IDOR with UUID/GUID resource IDs and no GUID leak
- CORS misconfiguration without `Allow-Credentials: true`
- GraphQL introspection enabled without sensitive schema exposure

**Needs Investigation Patterns:**
- Reflection in HTML context (could be encoded - needs testing)
- SSRF-like parameters (could have server-side validation)
- JWT with potentially weak algorithm (needs key testing)
- Path traversal candidate (could be normalized)

### Phase 3: Severity Calibration

Re-assess severity based on evidence, not agent claims:

| Agent Claims | Evidence Quality | Calibrated Action |
|---|---|---|
| Critical + strong evidence | Specific endpoint, clear PoC path | APPROVED - test first |
| Critical + weak evidence | Vague description, no PoC | NEEDS_REFINEMENT - gather more info |
| High + strong evidence | Concrete endpoint and payload | APPROVED - test second |
| High + weak evidence | Plausible but unverified | NEEDS_REFINEMENT |
| Medium + any evidence | Valid observation | APPROVED if evidence chain exists |
| Low/Info + any evidence | Best practice violation | REJECTED - not reportable |

### Phase 4: Prioritized Output

Produce a structured critic report:

```markdown
## Critic Report: [Target]
Date: [YYYY-MM-DD]
Total Findings Reviewed: [N]
Approved: [N] | Needs Refinement: [N] | Rejected: [N]

### APPROVED (Priority Testing Order)

#### [FINDING-001] [CWE-XXX: Vulnerability Name]
- **Original Severity**: [from agent]
- **Calibrated Severity**: [from critic]
- **Evidence Quality**: Strong/Moderate/Weak
- **Rationale**: [Why this is worth testing]
- **Test Priority**: [1-N]
- **Suggested Test Approach**: [Brief strategy]

### NEEDS_REFINEMENT

#### [FINDING-002] [CWE-XXX: Vulnerability Name]
- **Issue**: [What's missing from the evidence]
- **Required**: [What additional info would upgrade to APPROVED]
- **Quick Check**: [A fast test to confirm or reject]

### REJECTED

#### [FINDING-003] [Description]
- **Reason**: [Specific FP pattern match]
- **Pattern**: [Reference to false-positive-patterns.md]
```

## Critic Rules

### Evidence Standards
- **No finding is APPROVED without a specific endpoint/component identified**
- **No finding is APPROVED without a plausible attack scenario**
- **Severity calibration must reference actual demonstrated impact, not theoretical risk**
- **Agent's severity claims are NEVER trusted at face value**

### Decision Framework
- When in doubt between APPROVED and NEEDS_REFINEMENT: choose NEEDS_REFINEMENT (save testing time)
- When in doubt between NEEDS_REFINEMENT and REJECTED: choose NEEDS_REFINEMENT (avoid missing real bugs)
- REJECTED should only be used when the FP pattern is highly confident
- Quality over quantity: 3 well-vetted APPROVED findings > 10 unfiltered ones

### Handoff to Exploit Verifier
The critic report becomes the input for exploit-verifier's Triple-Check:
1. APPROVED findings go directly to Triple-Check, highest priority first
2. NEEDS_REFINEMENT findings get a quick recon pass before Triple-Check
3. REJECTED findings are documented in the validation report as "Filtered by Critic"

## Integration With "The Process"

When "do the process for X" is invoked:
1. Read agent findings
2. **Run vuln-critic** (this skill) to produce critic report
3. Test APPROVED findings via exploit-verifier Triple-Check
4. Quick-check NEEDS_REFINEMENT findings, upgrade or reject
5. Document all results in validation report

This pre-filtering step typically saves 60-80% of testing time by eliminating obvious false positives before hands-on verification.