Automated exploit hunting for Solidity (EVM & HyperEVM) and Rust (Solana / Anchor). Point it at source; specialised agents return ranked findings — each with a plain-English reason, a PoC stub and a patch sketch.
IBM Bob 2.0 Hackathon · Jason Parser Research · built and demonstrated inside IBM Bob IDE
git clone https://github.com/jamesparser/solguardian.git
cd solguardian
python3 -m solguardian analyze samples --out out/samples --html
open out/samples/report.html
Python 3.8+, standard library only. No RPC, no API keys, no network. The detectors are deterministic code, so this report reproduces byte-for-byte on your machine.
| where | rule | what SolGuardian says |
|---|---|---|
Vault.sol:74 withdraw() | CEI-001 |
Reentrancy — value is sent before balanceOf is
decremented, so a callback re-enters while the old balance is still readable. |
Vault.sol:83 adminDrain() | AC-001 |
No access control — moves value to a caller-chosen address with no modifier, no sender check and no caller-scoped accounting. |
Vault.sol:120 assetValue() | OR-001 |
Spot-price oracle — in-pool reserves decide valuation; a flash loan can move that print inside the same transaction. |
HyperVault.sol:54 migrate() | DC-001 |
delegatecall to a caller-chosen target — the callee runs in this contract's storage and can rewrite the admin slot. |
HyperVault.sol:87 claimTreasuryGrant() | SR-002 |
Unlimited signature replay — no nonce, no spend-once map: one
captured (v,r,s) pays out forever, on every fork. |
lib.rs:174 withdraw() | SIGNER-001 |
Missing signer — a raw AccountInfo authorises a
lamport credit; on Solana the account list is the authorisation model. |
lib.rs:31 deposit() | MATH-001 |
Precision loss — amount / total_deposits * SCALE
truncates a small deposit to exactly zero shares. |
lib.rs:117 load_foreign_config() | DESER-001 |
Unsafe deserialization — raw pointer cast over foreign account data with no owner, length or discriminator check. |
skills/ it
enforced and lists the items it satisfied — you can argue with the rule.delegatecall
bug belongs to the proxy pack, not access control), and each exclusion has a regression test.--fail-on high exits 1.Bob IDE is the development environment: /init +
AGENTS.md, Agent-mode multi-file work, parallel subagents for the EVM and
Solana detectors, document understanding over the skills/ packs, and the review /
commit flow. The same split ships in the product — solguardian/agents/ runs
EvmHunter and SolanaHunter concurrently, then
ReportWriter enforces the finding contract. Task evidence and the verbatim prompts
are in bob_sessions/.