OptimismSubmit a Bug
Optimism is a project dedicated to scaling Ethereum's technology and expanding its ability to coordinate people from across the world to build effective decentralized economies and governance systems.
The OP Stack is the modular, decentralized software stack that powers Optimism, forms the backbone of blockchains like OP Mainnet and Base, and is maintained by the Optimism Collective .
The first release of the OP Stack codebase is called Bedrock. The Bedrock release primarily consists of the core software required to run L2 blockchains and was originally designed to power an upgrade to the OP Mainnet network. Bedrock improves on its predecessor by reducing transaction fees using optimized batch compression and Ethereum as a data availability layer; shortening delays of including L1 transactions in rollups by handling L1 re-orgs more gracefully; enabling modular proof systems through code re-use; and improving node performance by removing technical debt.
To read more about Optimism, please visit https://www.optimism.io/. To learn about the OP Stack, please visit https://stack.optimism.io/.
The Optimism network is scheduled to undergo a major upgrade from the currently running (legacy) system to the Bedrock system on Jun 6, 2023. This bounty program will actively cover both the legacy system, as well as the Bedrock system defined by the contracts which are already deployed. For both the legacy system and the forthcoming bedrock system this bounty program is focused on preventing:
- theft of assets held in their smart contracts;
- theft, freezing or other loss of funds due to vulnerabilities in the smart contracts’ or the critical blockchain client services (op-node and op-geth).
In order to encourage reporting of issues in time for us to review and react, no reports will be accepted after 9 AM EDT on June 5th, 2023. The program will then reopen again as soon as the Bedrock system is live.
Rewards by Threat Level
Rewards are distributed according to the impact of the vulnerability based on the Immunefi Vulnerability Severity Classification System. This is a simplified 5-level scale, with separate scales for websites/apps and smart contracts/blockchains, encompassing everything from consequence of exploitation to privilege required to likelihood of a successful exploit.
All smart contract bug reports must come with a PoC in order to be considered for a reward.
For KYC, OptimismPBC will request an invoice, with your name and address in order to payout the reward.
Any freezing of funds that is recoverable via an upgrade would be considered as High severity.
Critical vulnerabilities are further capped at 10% of economic damage, with the main consideration being the funds affected in addition to PR and brand considerations, at the discretion of the team. However, there is a minimum of USD 75 000 for Critical bug reports.
For testing any exploits involving cross-domain transactions, we recommend working with our dockerized services and modifying our integration tests
The following known issues are considered to be out of scope of this bug bounty program.
Known issue for both the legacy and bedrock systems:
- There appears to be an obvious bug which would allow an attacker to withdraw a fake ERC20 token from L2 in exchange for a real ERC20 (such as WBTC) token on L1. There is no check in the L2StandardBridge, however the withdrawal is prevented from finalizing by a check in the L1StandardBridge. Naturally if you do find a way to circumvent our protections, then we would reward you.
- The fact that their contracts are upgradable via a multisig.
- The fact that fault proofs are not yet running.
- A bug in Lib_MerkleTrie.sol which will prevent withdrawals from succeeding in some cases. There is a workaround for this, by modifying the proof to add an extra element.
- A bug in Lib_ResolvedDelegateProxy.sol which could result in a storage slot key collision overwriting the address of the implementation. This bug is dependent on the layout of the implementation contract, and Optimism is not affected.
Known issues for the legacy system:
- The user cannot commit to a L1 gas price, the OVM_GasPriceOracle is owned by a key controlled by Optimism and is responsible for setting the L1 gas price.
Known issues for the Bedrock system:
There is an edge case in which ETH deposited to the OptimismPortal by a contract can be irrecoverably stranded:
- When a deposit transaction fails to execute, the sender’s account balance is still credited with the mint value. However, if the deposit’s L1 sender is a contract, the tx.origin on L2 will be aliased, and this aliased address will receive the minted on L2. In general the contract on L1 will not be able to recover these funds. We have documented this risk and encourage users to take advantage of our CrossDomainMessenger contracts which provide additional safety measures.
Deposit transactions can be grieffed at a cost to the attacker, by filling up the MAX_RESOURCE_LIMIT. This issue is mitigated by PR 5064, which does not completely resolve the issue but does increase the cost of a sustained griefing attack. A more complete fix will require architectural changes.
There are various ‘foot guns’ in the bridge which may arise from misconfiguring a token. To minimize complexity our bridge design does not try to prevent all forms of developer and user error. Examples of such foot guns include:
- Having both (or neither of) the local and remote tokens be OptimismMintable. - Tokens which dynamically alter the amount of a token held by an account, such as fee-on-transfer and rebasing tokens.
When running in non-archive mode op-geth has difficulty executing deep reorgs. We are working on a fix.
Payouts are handled by the Optimism team directly and are denominated in USD. All payouts are done in USDC.
- Up to USD $2,000,042
- USD $50,000
- Up to USD $2,000,042
- USD $50,000
Assets in scope
- Blockchain/DLT - Geth (LEGACY)Type
- Smart Contract - Lib_AddressManager (LEGACY)Type
- Smart Contract - StateCommitmentChain (LEGACY)Type
- Smart Contract - CanonicalTransactionChain (LEGACY)Type
- Smart Contract - ChainStorageContainer-CTC-batches (LEGACY)Type
- Smart Contract - ChainStorageContainer-SCC-batches (LEGACY)Type
- Smart Contract - Proxy__OVM_L1CrossDomainMessenger (LEGACY)Type
- Smart Contract - OVM_L1CrossDomainMessenger (LEGACY)Type
- Smart Contract - Proxy__OVM_L1StandardBridge (LEGACY)Type
- Smart Contract - L1StandardBridge (LEGACY)Type
- Smart Contract - L1StandardBridge (not in use, but included for source code verification) (LEGACY)Type
- Smart Contract - OVM_L2ToL1MessagePasser (LEGACY)Type
- Smart Contract - L2CrossDomainMessenger (LEGACY)Type
- Smart Contract - L2StandardBridge (LEGACY)Type
- Smart Contract - L2StandardTokenFactory (LEGACY)Type
- Smart Contract - L2StandardToken (LEGACY)Type
- Smart Contract - OVM_ETH (LEGACY)Type
- Smart Contract - SequencerFeeVault (LEGACY)Type
- Smart Contract - OVM_GasPriceOracle (LEGACY)Type
- Smart Contract - WETH9 (LEGACY)Type
- Smart Contract - op-geth (Bedrock)Type
- Smart Contract - op-node (Bedrock)Type
- Smart Contract - SystemConfigProxy (Bedrock)Type
- Smart Contract - SystemConfig (Bedrock)Type
- Smart Contract - L2OutputOracleProxy (Bedrock)Type
- Smart Contract - L2OutputOracle (Bedrock)Type
- Smart Contract - OptimismPortalProxy (Bedrock)Type
- Smart Contract - OptimismPortal (Bedrock)Type
- Smart Contract - L1CrossDomainMessengerProxy (Bedrock)Type
- Smart Contract - L1CrossDomainMessenger (Bedrock)Type
- Smart Contract - L1ERC721BridgeProxy (Bedrock)Type
- Smart Contract - L1ERC721Bridge (Bedrock)Type
- Smart Contract - L1StandardBridgeProxy (Bedrock)Type
- Smart Contract - L1StandardBridge (Bedrock)Type
- Smart Contract - OptimismMintableERC20FactoryProxy (Bedrock)Type
- Smart Contract - OptimismMintableERC20Factory (Bedrock)Type
- Smart Contract - ProxyAdmin (Bedrock)Type
- Smart Contract - Lib_AddressManager (Bedrock)Type
- Smart Contract - Geth (Post-Bedrock Migration)Type
- Smart Contract - Lib_AddressManager (Post-Bedrock Migration)Type
- Smart Contract - StateCommitmentChain (Post-Bedrock Migration)Type
- Smart Contract - CanonicalTransactionChain (Post-Bedrock Migration)Type
- Smart Contract - ChainStorageContainer-CTC-batches (Post-Bedrock Migration)Type
All smart contracts of Optimism can be found at https://github.com/ethereum-optimism/optimism. However, only those in the Assets in Scope table are considered as in-scope of the bug bounty program.
Impacts in scope
Only the following impacts are accepted within this bug bounty program. All other impacts are not considered as in-scope, even if they affect something in the assets in scope table.
- Network not being able to confirm new transactions (Total network shutdown)CriticalImpact
- Direct loss of fundsCriticalImpact
- Permanent freezing of funds (fix requires hardfork)CriticalImpact
- Transient consensus failuresHighImpact
- Loss of user funds by permanent freezing or direct theft, other than unclaimed yieldCriticalImpact
- Permanent freezing of fundsCriticalImpact
- Protocol InsolvencyCriticalImpact
- Temporary freezing of fundsHighImpact
Out of Scope & Rules
The following vulnerabilities are excluded from the rewards for this bug bounty program:
- Attacks that the reporter has already exploited themselves, leading to damage
- Attacks requiring access to leaked keys/credentials
- Attacks requiring access to privileged addresses (governance, strategist)
Smart Contracts and Blockchain
- Incorrect data supplied by third party oracles
- Not to exclude oracle manipulation/flash loan attacks
- Basic economic governance attacks (e.g. 51% attack)
- Vulnerabilities in the implementation of ‘custom token bridges’ which are written by third parties for bridging tokens to their network
- Lack of liquidity
- Best practice critiques
- Sybil attacks
- Centralization risks
Since Optimism uses a fork of Geth, issues which are responsibly disclosed to upstream cannot be "replayed" against Optimism’s bug bounty program if the vulnerability has already been made public. If the vulnerability is disclosed to Optimism at the same time as upstream Geth, the vulnerability is eligible for the bug bounty program.
The following known issues are considered to be out of scope of this bug bounty program:
- All currently known issues with devp2p here: https://github.com/ethereum/devp2p/blob/master/rlpx.md#known-issues-in-the-current-version
The following activities are prohibited by this bug bounty program:
- Any testing with mainnet or public testnet contracts; all testing should be done on private testnets
- Any testing with pricing oracles or third party smart contracts
- Attempting phishing or other social engineering attacks against our employees and/or customers
- Any testing with third party systems and applications (e.g. browser extensions) as well as websites (e.g. SSO providers, advertising networks)
- Any denial of service attacks
- Automated testing of services that generates significant amounts of traffic
- Public disclosure of an unpatched vulnerability in an embargoed bounty