Snowbridge is a general-purpose, trustless, and decentralized bridge between Polkadot and Ethereum.
| Target | Type | Severity |
|---|---|---|
https://github.com/Snowfork/snowbridge Copy Ethereum Contracts which cover our Beefy Light Client, Parachain Light Client, Gateway, Agent, Messaging Protocol and Asset transfer functionality | Smart Contract | Critical |
https://github.com/paritytech/polkadot-sdk/tree/master/bridges/snowbridge Copy Pallets and support crates that are deployed to the BridgeHub parachain | Smart Contract | Critical |
Ethereum Contracts which cover our Beefy Light Client, Parachain Light Client, Gateway, Agent, Messaging Protocol and Asset transfer functionality
Pallets and support crates that are deployed to the BridgeHub parachain
Docs: https://docs.snowbridge.network/
V2 Arch docs: https://github.com/paritytech/polkadot-sdk/blob/master/bridges/snowbridge/docs/v2.md
App: https://app.snowbridge.network/
BridgeHub parachain explorer (Polkadot): https://bridgehub-polkadot.subscan.io/
Gateway contract (Ethereum: https://etherscan.io/address/0x27ca963c279c93801941e1eb8799c23f407d68e7
Documentation on the crypto-economic security architecture for the Polkadot->Ethereum light client protocol (BEEFY): https://eprint.iacr.org/2025/057.pdf.
Where applicable, submissions should contain an analysis or POC for both the Polkadot and Ethereum side of the bridge. For example, if an aspect of the implementation of the Ethereum smart contracts is a potential vulnerability but only when in conjunction with an exploitable vulnerability on the Polkadot side of the bridge, then that exploit analysis or POC must be included too.
Only the BridgeHub parachain can directly send messages to the Gateway contract on Ethereum. This parachain is within Snowbridge's trust domain, and acts a proxy for other parachains in the Polkadot network.
Missing access control on SnowbridgeL1Adaptor / SnowbridgeL2Adaptor: Reports claiming that depositToken, depositNativeEther, sendTokenAndCall, or the trailing residual-sweep-to-recipient pattern allow theft because any EOA can call them are out of scope. In production, these adaptors are invoked atomically within a single V2 message batch: the AssetHub agent funds them via UnlockNativeToken and consumes them via CallContract in the same transaction. They are never prefunded across transaction boundaries. Exploits of this class rely on a separate, unrelated pre-funding assumption that does not occur in the production flow, and are also captured by the “vulnerabilities that can be exploited through front-run attacks only” exclusion.
Do not submit reports about missing message.origin checks in the Gateway contract’s V2 handlers. message.origin is informational metadata, not an authorisation input. Only BridgeHub can commit messages to the outbound queue that BEEFY signs for delivery to Ethereum; BridgeHub is within Snowbridge’s trust domain and performs origin binding before committing. The Gateway deliberately does not re-check message.origin on the Gateway deliberately does not re-check message.origin on the Ethereum side. If you believe you have found a way to get a malicious outbound message committed to BridgeHub’s outbound queue (i.e. accepted for BEEFY signing), you must include a unnable Polkadot-side PoC demonstrating the full path end-to-end. Specifically, the PoC must:
We are looking for evidence and reasons for incorrect behavior of the smart contract, which could cause unintended functionality:
delegatecall in Agent.solWe are happy to thank everyone who submits valid reports which help us improve the security. However, only those that meet the following eligibility requirements may receive a monetary reward: