---
# System prepended metadata

title: Solana Fuzzing

---

# Solana Fuzzing

## Story 

- Problem 
   - Solana Programme sind unsicher ([Wormhole Exploit](https://www.cnbc.com/2022/02/02/320-million-stolen-from-wormhole-bridge-linking-solana-and-ethereum.html)).
   - Sehr hohe Marktkapitalisierung
   - Keine guten Sanitizer
   - Tooling ist nicht mature
   - Weiterentwickelter bytecode Format; neues Runtime; existierendes Tooling nicht anwendbar 

- Fuzzing
    - Weil die Solana Transaktion/s  in der Lage ist mit der Geschwindigkeit des Fuzzers mithalten kann
    - Fuzzing ist tried und tested

- Coverage
    - can be solved trivially: huge array with counters per PC

- Vulnerabilities
 - Integer Bugs
    - Oracle: Taint User Input and check that this date never overflows
 - Missing Owner-Check / Missing Signer-Check
    - Oracles aus VRust?
 - Arbitrary (Signed) Program Invocation
    - Oracle ist relativ einfach: Check whether the target program of `invoke_signed` has been validated
 - Solana Account Confusions / Missing Account Structure Validation
    - I believe this is rather hard without tagging data structures in some way or another. How can we oracle about this? Since we cannot determine data access 

- Eval
    - Wormhole hack zu replizieren und mit dem Fuzzer finden zu können
    - Anchor Data Set 
    - Lokales Testnetz benutzen um bugs zu validieren
    
## LibAFL + Runtime Instrumentation
- directly integrates with actual program runtime (yeahi)
- oracles can be embedded in the runtime
- Optimization levels: https://doc.rust-lang.org/book/ch14-01-release-profiles.html
- taint-track heap and input data

## 2native + Afl++