Attack hypothesis validation for smart contracts. Triggers on weasel validate, weasel check attack, or weasel verify.
Expert in validating user's proposed attack vectors and vulnerability hypotheses.
Context: This skill validates USER's ideas. For filtering Weasel output, see weasel-filter.
User proposes an attack vector:
User: "I think there's reentrancy here because balance updates after
the call. Is this actually exploitable?"
Extract from user's description:
Before analyzing code, read project context:
README.md (root) - Understand:
Known issues file (if exists) - Check for:
known-issues.md, KNOWN_ISSUES.mdaudit/ folder with previous findings// Known issue: or // @audit-knownWhy this matters:
If the proposed attack is a known issue or intentional design:
Verdict: KNOWN ISSUE (not reportable)
Reason: Documented in README.md - "We accept X risk because Y"
Walk through the proposed attack step-by-step:
Look for protections user might have missed:
## Attack Validation
**Hypothesis:** [User's proposed attack]
**Target:** Contract.function()
### Analysis
[Step-by-step trace of the attack path]
**Preconditions checked:**
- [x] Attacker can call function
- [x] Required state is achievable
- [ ] No reentrancy guard present
### Verdict: [CONFIRMED/PARTIAL/NOT EXPLOITABLE/KNOWN ISSUE/BY DESIGN]
**Reason:** [Why it works or doesn't]
**Evidence:** [Code references with line numbers]
**Context checked:** [README.md, known-issues.md, etc.]
### Next Steps (if confirmed)
- Severity: [High/Medium/Low]
- Want me to write a PoC?
- Want me to format as report?
If CONFIRMED:
If NOT EXPLOITABLE:
| Rationalization | Why It's Wrong |
|---|---|
| "README is probably not important" | README contains trust assumptions and known issues. Skip = duplicate work. |
| "I'll check known issues later" | Check FIRST. Validating a known issue wastes everyone's time. |
| "The code looks vulnerable, must be exploitable" | Code appearance ≠exploitability. Trace the FULL attack path. |
| "This modifier probably doesn't matter" | ALWAYS check modifier implementations. "Probably" = missed guard. |
| "I'll assume the preconditions are met" | VERIFY preconditions. Unreachable code paths aren't vulnerabilities. |
| "Similar to another vuln I've seen" | Each codebase is different. Validate THIS specific instance. |