• Stars
    star
    177
  • Rank 208,620 (Top 5 %)
  • Language
    Solidity
  • Created 6 months ago
  • Updated 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A repo to showcase web3 hacks

SC Exploits Minimized

Smart Contract exploits, minimized for your learning pleasure.

Getting Started

Requirements

  • git
    • You'll know you did it right if you can run git --version and you see a response like git version x.x.x
  • foundry
    • You'll know you did it right if you can run forge --version and you see a response like forge 0.2.0 (816e00b 2023-03-16T00:05:26.396218Z)

Quickstart

git clone https://github.com/Cyfrin/sc-exploits-minimized
cd sc-exploits-minimized
make

Test

forge test

Running a single test

forge test --mt test_reenter

Running a FV test

To run halmos test, you'll need to have Halmos installed.

halmos --function check_hellFunc_doesntRevert

Remix, CTFs, & Challenge Examples

A set of examples where you can see the attack in remix or practice it in a gameified way.

  • The Remix links will bring you to a minimal example of the exploit.
  • The Ethernaut links will bring you to a challenge where that exploit exists in a "capture the flag".
  • The Damn Vulnerable DeFi links will bring you to a challenge where that exploit exists in a difficult DeFi/OnChain Finance related "capture the flag".
Exploit Remix 🎧 Ethernaut 👩🏻‍🚀 Damn Vulnerable DeFi 💰 Case Studies 🔎
Reentrancy Remix Re-entrancy Side Entrance The Ultimate List
Arithmetic Remix Token None Coming Soon...
Denial Of Service (DoS) Remix Denial Unstoppable Coming Soon...
Mishandling Of Eth Remix (Not using push over pull)
Remix (Vulnerable to selfdestruct)
King None Sushi Swap
Weak Randomness Remix Coin Flip None Meebits
Missing Access Controls Remix Fallout None Coming Soon...
Centralization Remix None Compromised Oasis And every rug pull ever.
Failure to initialize Remix Motorbike Wallet Mining Parity Wallet
Storage Collision Remix Preservation None Coming Soon...
Oracle/Price Manipulation (Click all of these) OracleManipulation.sol
BadExchange.sol
FlashLoaner.sol
IFlashLoanReceiver.sol
Dex 2 Puppet
Puppet V2
Puppet V3
The Rewarder
Selfie
Cream Finance
Signature Replay Remix N/A Coming soon... Coming soon...
Opcode Support/EVM Compatibility Coming Soon... None None zkSync/GEM
Governance Attack Coming Soon... None None Tornado Cash
Stolen Private Keys Coming Soon... None None Vulcan Forged Mixin
MEV Remix None None Vyper Attack
Invariant Break (Other exploits can cause this) Doesn't work great in remix N/A N/A Euler

Invariants

Now, "Invariant Breaks" isn't exactly a class of bug, however it's important to know about and use when it comes to hacks. We look at 3 different methods for attempting to break invariants.

  1. Stateless Fuzzing (Easiest)
  2. Stateful Fuzzing - Open / Unguided (A little harder)
  3. Stateful Fuzzing - Handler method / Guided (Harder)
  4. Formal Verification w/ Halmos (Hardest)

See more in ./src/invariant-break/README.md

Formal Verification

We are using the following tools to do Formal Verification (FV) / Symbolic execution (SE). :

Not used, with rationale:

  • hevm: I had a very hard time setting it up. It's likely I didn't spend enough time.
  • EthBMC: Unclear if it's still maintained.
  • manticore: No longer maintained.
  • mythril: It's unclear to me if it performs better than the Solidity SMT Checker.

Halmos cheat sheet

  • Use assert, don't revert or require
  • vm.assume() works better than bound() or clamp()
  • halmos looks for check_ by default so it's easier to have separate fuzz and symbolic tests. You can name it test_ if you want to run both halmos and foundry (halmos --function test_)

Fuzzers vs Formal Verificaion cheat sheet

  • Fuzzers try a bunch of pseudo-random data to try to break an invariant
  • FV/Symbolic Execution convert
  • Fuzzers are best at finding "simple" bugs (issues well spread out over a domain space that is not crazy large)
  • Formal Verification/Halmos is currently best at showing the absence of bugs. You can have assurance you don't have a bug rather than wondering how long to run a fuzzer.
  • FV is perfect for 100% equivalence tests 👌

Thank you!

Follow us!

More Repositories

1

foundry-full-course-f23

2,321
star
2

security-and-auditing-full-course-s23

The ultimate, most advanced, security, DeFi, assembly, web3 auditor course ever created.
Solidity
908
star
3

foundry-devops

Solidity
267
star
4

audit-report-templating

211
star
5

foundry-defi-stablecoin-f23

Solidity
186
star
6

aderyn

Aderyn 🦜 Rust-based Solidity AST analyzer.
Rust
161
star
7

cyfrin-audit-reports

A list of public audit reports conducted by the Cyfrin team
102
star
8

audit-checklist

Aggregated audit checklist
100
star
9

chainlink-lottery

A web3 implementation of a lottery using Chainlink VRF and Chainlink alarm clock to have a totally decentralized lottery
JavaScript
75
star
10

OpenPositions

44
star
11

foundry-fund-me-f23

Solidity
35
star
12

assembly-evm-opcodes-and-formal-verification-course

28
star
13

2023-07-foundry-defi-stablecoin

Solidity
27
star
14

foundry-simple-storage-f23

Solidity
25
star
15

4-puppy-raffle-audit

Solidity
25
star
16

remix-simple-storage-f23

Solidity
22
star
17

ctf

A minimal repo to create EVM/solidity capture the flags
Solidity
21
star
18

foundry-smart-contract-lottery-f23

Solidity
21
star
19

alchemy_sdk_py

An SDK to use the Alchemy API
Python
19
star
20

2023-07-escrow

Solidity
17
star
21

remix-fund-me-f23

Solidity
17
star
22

trello_to_audit_report

Python
17
star
23

foundry-upgrades-f23

Solidity
16
star
24

Updraft

TypeScript
16
star
25

1-horse-store-s23

C++
15
star
26

remix-storage-factory-f23

Solidity
13
star
27

2023-09-ditto

Solidity
13
star
28

codehawks-docs

🦅 CodeHawks documentation
13
star
29

chainlink_feeds

This gets the data from the Chainlink Price feeds in an easy way. Can use either an RPC_URL or the Chainlink Subgraph.
Python
13
star
30

foundry-nft-f23

Solidity
11
star
31

audit-repo-cloner

A Python package to clone a repo and automatically prepare it for audit report generation
Python
11
star
32

foundry-erc20-f23

Solidity
10
star
33

2023-10-PasswordStore

Solidity
10
star
34

5-t-swap-audit

Solidity
10
star
35

2023-07-beedle

Solidity
9
star
36

brownie-stablecoin-v23

Python
9
star
37

2023-08-sparkn

Solidity
9
star
38

evm-wallet-and-post-deployment-course

9
star
39

2023-11-Thunder-Loan

Solidity
8
star
40

8-vault-guardians-audit

Solidity
8
star
41

6-thunder-loan-audit

Solidity
8
star
42

js-backend-engineer

7
star
43

html-fund-me-f23

JavaScript
7
star
44

2023-09-vyper-compiler

Vyper Compiler Audit competition
Python
7
star
45

3-passwordstore-audit

Makefile
7
star
46

diverge-converge-audit

TeX
7
star
47

2023-10-SteadeFi

Solidity
7
star
48

2023-10-Puppy-Raffle

Solidity
6
star
49

flux-link

View and withdraw your LINK in one command
Python
5
star
50

7-boss-bridge-audit

Solidity
5
star
51

demo_code

Python
4
star
52

foundry-dao-f23

Solidity
4
star
53

3-gas-bad-nft-marketplace-audit

Solidity
4
star
54

2023-12-stake-link

TypeScript
4
star
55

2024-01-Morpheus

TypeScript
4
star
56

2023-12-the-standard

JavaScript
3
star
57

2024-03-Moonwell

Solidity
3
star
58

2024-02-one-shot

Solidity
3
star
59

2023-12-Voting-Booth

Solidity
3
star
60

2024-02-Beanstalk-1

TypeScript
3
star
61

chainlink-gmx-automation

High Frequency Price Automation for GMX, Using Chainlink Keeper Data Streams
Solidity
2
star
62

gas-optimization-tips

Contracts and Test for Gas optimization Article
Solidity
2
star
63

dup-hawk

AI Triage Bot - Groups and labels issues submitted to a CodeHawks audits
Python
2
star
64

2024-02-soulmate

Solidity
2
star
65

2023-11-Santas-List

Solidity
2
star
66

2024-01-horse-store

Solidity
2
star
67

2024-01-math-master

Solidity
2
star
68

zksync-contracts

Solidity
2
star
69

.github

1
star
70

alphachain-cl-ea

JavaScript
1
star
71

nyth-by-example

An Example Nyth repo
Rust
1
star
72

2023-11-Boss-Bridge

Solidity
1
star
73

2-math-master-audit

Solidity
1
star
74

2024-03-snek-raffle

Python
1
star