How Fuzzy works

Checking a Solana program has meant separate tools run by a person: confirm the deployed build, run a static scanner, write a fuzz harness, test against real state, then commission an audit. Fuzzy runs the parts a machine can prove as one automated pass. It attacks the program in LiteSVM, a local copy of Solana, keeps only the attacks that work, grades the run, and can send the result to a Verafy jury that imprints a certification on Verafy Devnet.

What a Sniff run does

Every step, in detail

1. Ingest

2. Learn

3. Replay

4. Attack

From every path that completed, Fuzzy runs each attack class that applies. A class applies when the interface has something it can target, such as a signer, a numeric argument, a state account or an instruction named close.

ClassThe attackCounts as proof whenStatus
Missing signer checkFor every instruction that worked when the owner called it, Fuzzy calls it again with each required signature dropped, paid for by an attacker, with any payout redirected to the attacker.SOL reaches the attacker, or the attacker's key replaces the owner's in program state.runs today
Missing owner checkFuzzy passes a copy of each state account owned by a different program, with the same bytes, and checks whether the instruction still accepts it.The forged account is accepted and funds or authority move to the attacker.runs today
Account substitutionFuzzy signs as the attacker in the owner's place, and swaps in look-alike accounts the attacker controls.The attacker, signing as themselves, moves the owner's funds or authority.runs today
ReinitializationAfter an honest setup, Fuzzy runs initialize again as a stranger on the same account, then tries to withdraw.The stranger's key is written in as the authority, or the follow-up withdrawal succeeds.runs today
Arithmetic overflowFuzzy sends 0, 1, the maximum and maximum minus one for every numeric argument.A wrapped amount moves funds to the attacker. A panic alone is a lead.runs today
Lamport drainingEvery attack above measures every account's SOL before and after; any path that moves SOL to the attacker counts here too.The attacker's SOL balance goes up.runs today
Compute exhaustionFuzzy records the compute each call used and flags calls that hit the limit.Shown as a lead. It never counts toward the score in this engine version.runs today
Unchecked CPI targetPlanned: pass an attacker program in each program slot and watch what it is asked to do.Not built yet.planned
PDA seed collisionPlanned: derive colliding seeds and non-canonical bumps for each PDA in the IDL.Not built yet.planned
Close, then reusePlanned: close an account, then refund and reuse it in the same transaction.Not built yet.planned
Unchecked token ownerIn mainnet replay, the attacker signs in the user's place and each of the user's token accounts is swapped, one at a time, for an empty copy the attacker owns.Tokens land in the attacker-owned copy. It starts empty, so every unit came from someone else.runs today
Price manipulationPlanned: move the pool or oracle a program reads before calling it.Not built yet.planned

5. Prove

6. Grade

The Fuzzy Score, below. A Sniff run has a budget of 600 transactions and 40 seconds; replay gets half of each when there is history.

7. Jury and 8. Imprint

The report is hashed as canonical JSON and sent to a jury of registered Verafy harnesses on Verafy Devnet. The verafy_certification program writes the level only if the ruling is sealed, its contract hash binds this program, bytecode hash, report hash and score, and every seat is an active registered harness, with at least three seats from at least two model families. Certifications

Built on

The Fuzzy Score

The score is the lower of two numbers: Depth, which says how hard Fuzzy tried, and a cap set by the worst proven finding. A shallow run can't score high because it found nothing, and a deep run can't score high with a critical bug.

Worst proven findingMeaningCap
CriticalAnyone can steal or permanently lock funds, or seize an authority20
HighFunds at risk under realistic conditions, or access control bypassed45
MediumAn invariant breaks without direct loss70
LowHygiene, such as a dependency with a published advisory90
None proven100
Depth partWeightMeasured as
Branch coverage40Share of the program's branches executed. Not measured by this engine version yet, so it scores 0.
Instruction coverage20Share of instructions driven to both success and failure.
Attack classes tried20Share of the attack classes that apply to this program that Fuzzy actually ran.
Real state10Cloned mainnet accounts 10, synthetic accounts from the IDL 5, empty accounts 0.
Effort10Share of the planned run completed within the time limit.

Grades: 90 and up is Hardened, 75 Solid, 50 Shaky, 25 Exposed, and below 25 Broken. Scores are versioned as fuzzy-score/1 and tied to one exact build of the program.

Add-ons

A Sniff run costs 100 credits. Add-ons run more checks for more credits. Most need source code, which Fuzzy finds through a verified build: when the deployed bytecode has been rebuilt from a public repository, Fuzzy reads that exact commit. Add-ons are reported beside the Fuzzy Score and never change it.

Add-onCreditsWhat it runsNeedsStatus
Verified-source check+25Whether the deployed bytecode was rebuilt from public source, and from which repository and commit.A deployed mainnet programavailable
Dependency advisories+100Every crate in the verified commit's Cargo.lock checked against the RustSec advisory database.A verified buildavailable
Rebuild from source+500Fuzzy clones the verified commit, builds every program in it with cargo-build-sbf, and checks a build matches the deployed bytecode byte for byte.A verified buildavailable
Static lints+300Trail of Bits' Solana lints (through dylint) and Clippy over the verified source.A verified buildavailable
Deep Fuzz+1,000Four times the mainnet history and five times the budget of a Sniff run, plus branch coverage: every invocation is traced instruction by instruction in agave-ledger-tool. Required for the Fuzzed level.Nothingavailable
Property fuzzing+1,500Random call sequences by several users, with invariants derived from the IDL checked after every transaction: authorities change only when they sign, and SOL leaves state only when its authority signs.An IDLavailable
AI design review+1,000Four models from different labs read the source and IDL for design and economic risk; risks two or more raise independently are reported as agreed. Not a human audit.A verified buildavailable
Kitchen Sink+4,000Everything above in one run, for less than the parts. Required for the Hardened level.A verified build for the source checksavailable

Rebuild, lints, Deep Fuzz, property fuzzing and the AI design review run on Fuzzy's build machine: an isolated container on Modal with Node 22, the Rust toolchain, the Agave tools and cargo-dylint, because a web request cannot build Rust or run for minutes. Until the build machine is online, the add-on panel says so and nothing is charged. Token balances are part of the proof in every mainnet-replay run, at no extra cost.

Still not automated

What this version does not do yet