Generates and validates Foundry PoC tests from attack scenario documents...
Input: $ARGUMENTS (attack scenario file path)
1 Attack Scenario = 1 PoC Code
Read(".vigilo/findings/{severity}/{auditor}/{Severity}-{id}-{title}.md")
Example: .vigilo/findings/high/logic/H-01-donation-attack-inflated-collateral.md
Extract: Finding ID, Bug Class, Preconditions, Attack Steps, Impact, Vulnerable Code
File: test/poc/{Severity}-{id}-{title}.t.sol
Example: test/poc/H-01-donation-attack-inflated-collateral.t.sol
NOTE: PoC code goes in test/poc/ (project root), NOT in .vigilo/ folder.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "forge-std/Test.sol";
import "forge-std/console2.sol";
contract PoC_{ID}_{BugClass} is Test {
// State variables, actors
function setUp() public {
// Reproduce preconditions
}
function test_Exploit_{ID}() public {
// 1. Log initial state
// 2. Execute attack steps
// 3. Log final state
// 4. Assert impact
}
}
makeAddr() for all addressesDetailed templates: references/poc-templates.md
Test Pass ā Vulnerability Validated
Goal: Verify that the Attack Scenario's claimed Impact actually occurs
forge test --match-test "test_Exploit_{ID}" -vvv
| Verbosity | Use Case |
|---|---|
-vvv |
Default recommended |
-vvvvv |
Detailed debugging |
| Result | Meaning | Action |
|---|---|---|
| PASS + Impact proven | Vulnerability valid | ā Complete |
| PASS + Impact unclear | Insufficient verification | ā Strengthen assertions |
| FAIL | Issue occurred | ā Fix PoC (max 3 attempts) |
Scenario Impact ā Assertion Mapping
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
"Vault drain" ā assertGt(attackerAfter, attackerBefore)
"Collateral loss" ā assertLt(userAfter, userBefore)
"Admin bypass" ā assertTrue(attacker.hasRole(ADMIN))
Test failure or Impact mismatch
ā
Fix PoC (max 3 attempts)
ā
After 3 failures ā Review Attack Scenario
ā
If scenario needs update ā Reverse-modify
If PoC validation differs from scenario, update Attack Scenario:
Files (use same naming format {Severity}-{id}-{title}):
test/poc/H-01-donation-attack.t.sol # PoC code (project root)
.vigilo/poc/H-01-donation-attack.md # Validation log
.vigilo/findings/high/logic/H-01-donation-attack.md # (Modified) Attack Scenario
Naming Convention: {Severity}-{id}-{kebab-case-title}
| File | When to Load |
|---|---|
| poc-templates.md | When writing PoC - Bug class patterns |
| debugging.md | When test fails - Error resolution |