Wormhole's Solana bridge program contained a `verify_signatures` instruction that read guardian signatures from the Solana instructions sysvar. The implementation used the deprecated `solana_program::sysvar::instructions::load_instruction_at` helper instead of the checked variant `load_instruction_at_checked`, which would have validated that the supplied account was the true sysvar at address `Sysvar1nstructions1111111111111111111111111`. The attacker passed a fabricated account in the sysvar position containing a forged `Secp256k1` instruction, so `verify_signatures` happily 'verified' a guardian-signed VAA that none of the real guardians had signed. With the spoofed VAA, the attacker called `complete_wrapped` on the token bridge and minted 120,000 wETH on Solana, bridging ~$326M out. A fix swapping in the checked sysvar loader had already been merged in the public GitHub repo but was not yet deployed to mainnet.
Classification: Protocol Logic. Technique: Signature Exploit. Bridge hack. Target type: DeFi Protocol. Affected chains: Solana. Implementation language: Rust. Funds returned: $326,000,000.
- chain
- solana
- protocol
- Portal
- bug_class
- bridge
- date_occurred
- 2022-02-02
- loss_usd
- $326,000,000
- classification
- Protocol Logic
- technique
- Signature Exploit
- target_type
- DeFi Protocol
- language
- Rust
- bridge_hack
- YES
- source_id
- dl:1541