Contributing
The repo is a compounding asset: every contribution should make the next target easier to audit — ideally by adding or sharpening a catalog detector. Read AGENTS.md first.
Hard rules
- Responsible disclosure only. In-scope bounty targets, public post-mortems, or your own deploys — to get bugs fixed.
- No claimed finding without a runnable PoC. Foundry (EVM) or the chain’s native harness; the PoC must break the stated invariant.
- Cite primary sources. Web reporting is a lead, not a fact — verify $ figures and root causes against the post-mortem + on-chain trace.
- Don’t break the build.
cd poc && forge testmust pass.
The contribution loop
Every new exploit studied updates four places — this is the loop:
- A case study in
docs/exploits/. - A detector entry in
catalog/exploits.yaml— with checkableapplies_whenpreconditions, aroot_causeline, andvariant_queries. - A sharpened item in
checklists/master-checklist.md. - A detection artifact — a semgrep rule and/or invariant template — plus a runnable PoC (
Vulnerable<X>+Safe<X>+ test).
Then append a dated note to research-log/.
Adding a PoC
poc/src/<area>/<X>.sol— minimalVulnerable<X>+Safe<X>. Comment the bug.poc/test/<X>.t.sol—test_*_isExploited(attack profits / invariant breaks) andtest_*_resistsAttack(the fix holds).- Flip the catalog entry to
status: codedwithpoc+poc_cmd. - For a real deployed target, add a fork replay under
sim/and point the entry’sfork_pocat it.
Where things live
| Path | What |
|---|---|
catalog/ | the exploit catalog (sweep source) |
skills/ | aegis-audit (red) · aegis-defender (blue) |
docs/exploits/ | one case study per incident/class |
poc/ | runnable model PoCs |
sim/ | real-incident fork replays |
ethernaut/ | the wargame validation harness |
checklists/, tools/ | exploit-justified checks; slither/semgrep/invariants |