zkSync EraSubmit a Bug
zkSync Era is a layer 2 rollup that uses zero-knowledge proofs to scale Ethereum without compromising on security or decentralization. Since it's EVM compatible (Solidity/Vyper), 99% of Ethereum projects can redeploy without refactoring or re-auditing a single line of code. zkSync Era also uses an LLVM-based compiler that will eventually let developers write smart contracts in C++, Rust and other popular languages.
For more information about zkSync Era, please visit https://zksync.io/
For Whitehats: It is highly recommended that you review the details of this program in full. Although many Bug Bounty programs have standard terms and conditions, each also has their own unique details that are critical to your success.
Prior to submitting a report please review the Immunefi Bug Report Template and Best Practices.
Rewards by Threat Level
Please review how rewards are distributed based on the Immunefi Vulnerability Severity Classification System V2.2. This is a simplified 5-level scale system with separate scales for Smart Contracts and Websites/Apps.
Payouts and Payout Requirements: Rewards for critical smart contract bug reports will be further capped at 10% of direct funds at risk if the bug discovered is exploited. However, there is a minimum reward of USD 50 000.
For the project's bug bounty program, high-severity smart contract vulnerability rewards are determined according to an internal set of criteria established by the team. These criteria take into account the exploitability, impact, and probability of the vulnerability occurring, with special consideration given to bug reports that require multiple conditions not currently in place. There is a minimum reward of USD 20,000 for high-severity level vulnerabilities, and the maximum reward is capped at 100% of the affected funds.
Payouts are handled by the zkSync team directly and are denominated in USD. However, payouts are done in USDC (zkSync Era). zkSync commits to honoring payouts according to the terms set out in this program at the time of report submission, and to treat this program as the agreement and source of truth concerning bug reports and responsible disclosures.
For the purposes of determining report validity, this is a Primacy of Impact program.
Learn more about report validity best practices here: Best Practice - Primacy of Impact vs Primacy of Rules.
zkSync Era has a Know Your Customer (KYC) requirement for bug bounty payouts. Government identification is required for the KYC process.
Audit Discoveries and Known Issues:
Bug reports covering previously-discovered bugs are not eligible for any reward through the bug bounty program. If a bug report covers a known issue, it may be rejected together with proof of the issue being known before escalation of the bug report via Immunefi.
Previous audits and known issues can be found at:
- https://blog.openzeppelin.com/zksync-layer-1-diff-audit/ A separate note on the fee model: zkSync has different gas prices per opcodes than Ethereum. Also, it is known that since gasPerPubdataByte is fluctuating, it may lead for gasLimits to not be reliable in the middle/long-term.
The fee model is still in development and so the operator may not be fully compensated. The impact of griefing attacks will be evaluated based on the ratio between funds spent by the attacker and the funds spent by the operator.
- Up to USD $1,100,000
- USD $20,000 - $50,000
- USD $5,000
- USD $1,000
Websites and Applications
- USD $20,000
- USD $5,000
Assets in scope
- Smart Contract - DiamondCutFacet.solType
- Smart Contract - DiamondProxy.solType
- Smart Contract - ExecutorFacet.solType
- Smart Contract - GettersFacet.solType
- Smart Contract - GovernanceFacet.solType
- Smart Contract - Verifier.solType
- Smart Contract - MailboxFacet.solType
- Smart Contract - L1ERC20Bridge proxy TransparentUpgradeableProxy.solType
- Smart Contract - L1ERC20Bridge.solType
- Smart Contract - ValidatorTimelockType
- https://github.com/matter-labs/era-system-contracts/blob/857da713d9756ec13f071916848e283e74579817/bootloader/bootloader.yulTargetSmart Contract - BootloaderType
- https://github.com/matter-labs/era-system-contracts/blob/857da713d9756ec13f071916848e283e74579817/contracts/AccountCodeStorage.solTargetSmart Contract - AccountCodeStorageType
- https://github.com/matter-labs/era-system-contracts/blob/857da713d9756ec13f071916848e283e74579817/contracts/BootloaderUtilities.solTargetSmart Contract - BootloaderUtilitiesType
- https://github.com/matter-labs/era-system-contracts/blob/857da713d9756ec13f071916848e283e74579817/contracts/BytecodeCompressor.solTargetSmart Contract - BytecodeCompressorType
- https://github.com/matter-labs/era-system-contracts/blob/857da713d9756ec13f071916848e283e74579817/contracts/ContractDeployer.solTargetSmart Contract - ContractDeployerType
- https://github.com/matter-labs/era-system-contracts/blob/857da713d9756ec13f071916848e283e74579817/contracts/DefaultAccount.solTargetSmart Contract - DefaultAccountType
- https://github.com/matter-labs/era-system-contracts/blob/857da713d9756ec13f071916848e283e74579817/contracts/EmptyContract.solTargetSmart Contract - EmptyContractType
- https://github.com/matter-labs/era-system-contracts/blob/857da713d9756ec13f071916848e283e74579817/contracts/EventWriter.yulTargetSmart Contract - EventWriterType
- https://github.com/matter-labs/era-system-contracts/blob/857da713d9756ec13f071916848e283e74579817/contracts/ImmutableSimulator.solTargetSmart Contract - ImmutableSimulatorType
- https://github.com/matter-labs/era-system-contracts/blob/857da713d9756ec13f071916848e283e74579817/contracts/KnownCodesStorage.solTargetSmart Contract - KnownCodesStorageType
- https://github.com/matter-labs/era-system-contracts/blob/857da713d9756ec13f071916848e283e74579817/contracts/L1Messenger.solTargetSmart Contract - L1MessengerType
- https://github.com/matter-labs/era-system-contracts/blob/857da713d9756ec13f071916848e283e74579817/contracts/L2EthToken.solTargetSmart Contract - L2EthTokenType
- https://github.com/matter-labs/era-system-contracts/blob/857da713d9756ec13f071916848e283e74579817/contracts/MsgValueSimulator.solTargetSmart Contract - MsgValueSimulatorType
- https://github.com/matter-labs/era-system-contracts/blob/857da713d9756ec13f071916848e283e74579817/contracts/NonceHolder.solTargetSmart Contract - NonceHolderType
- https://github.com/matter-labs/era-system-contracts/blob/857da713d9756ec13f071916848e283e74579817/contracts/SystemContext.solTargetSmart Contract - SystemContextType
- https://github.com/matter-labs/era-system-contracts/blob/857da713d9756ec13f071916848e283e74579817/contracts/precompiles/Ecrecover.yulTargetSmart Contract - EcrecoverType
- https://github.com/matter-labs/era-system-contracts/blob/857da713d9756ec13f071916848e283e74579817/contracts/precompiles/Keccak256.yulTargetSmart Contract - Keccak256Type
- https://github.com/matter-labs/era-system-contracts/blob/857da713d9756ec13f071916848e283e74579817/contracts/precompiles/SHA256.yulTargetSmart Contract - SHA256Type
- Websites and Applications - zkSync Era PortalType
- Websites and Applications - zkSync Era Block ExplorerType
- Websites and Applications - WEB3 HTTP APIType
- Websites and Applications - WEB3 WebSocket APIType
- Websites and Applications - Block Explorer APIType
Smart Contracts - PoC, Smart Contract bug reports are to include a runnable Proof of Concept (PoC) in order to prove impact.
For more information on PoCs please visit: Proof of Concept (PoC) Guidelines and Rules.
Web/App - Bug reports are to include a runnable Proof of Concept (PoC) in order to prove impact. All web/app bug reports must come with a PoC with an end-effect impacting an asset-in-scope in order to be considered for a reward. All PoC content must adhere to the PoC guidelines and rules of Immunefi. In the event that a PoC requires an attack on a web/app asset provided, they must still adhere to the rules provided, otherwise eligibility for a reward may be revoked.
For more information on PoCs please visit: Proof of Concept (PoC) Guidelines and Rules
Whitehats we highly encourage you to review any potential subdomains and what specific port(s) are in scope. Even though the domain may be the same, different ports may point to different assets.
Dev Environment and Documentation:
zkSync has included dev documentation and/or instructions to help in reviewing code and exploring for bugs:
Impacts to other assets:
Hackers are encouraged to submit issues outside of the outlined Impacts and Assets in Scope.
If whitehats can demonstrate a critical and high impact for an asset not in scope, zkSync encourages you to submit your bug report using the “primacy of impact exception” asset.
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.
- Direct theft of any user funds, whether at-rest or in-motionCriticalImpact
- Permanent freezing of funds (that cannot be fixed by upgrade)CriticalImpact
- Protocol insolvencyCriticalImpact
- Permanent freezing of funds (that can be fixed by upgrade)HighImpact
- Permanent stopping the priority queueHighImpact
- Theft of user feesHighImpact
- Block stuffing for profitMediumImpact
- Griefing (e.g. no profit motive for an attacker, but damage to the users or the protocol)MediumImpact
- Theft of gasMediumImpact
- Unbounded gas consumptionMediumImpact
- Contract fails to deliver promised returns, but doesn't lose valueLowImpact
Websites and Applications
- Execute arbitrary system commandsCriticalImpact
- Retrieve sensitive data/files from a running server such as: database passwords, blockchain keys, etc (this does not include non-sensitive environment variables, open source code, or usernames)CriticalImpact
- Taking down the application/websiteCriticalImpact
- Contract verification bypassHighImpact
- Misrepresentation of the transaction data that may lead to misleading third party users (e.g. manipulating transaction event log representation, transfer amount, etc)HighImpact
- Misrepresentation of the transaction data that may lead to misleading API users (e.g. manipulating transaction event log representation, transfer amount, etc)HighImpact
Out of Scope & Rules
The following impacts and attack vectors are excluded from rewards by default for all Immunefi bug bounty programs:
- 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, operator), except in such cases where the contracts are intended to have no privileged access to functions that make the attack possible
- Broken link hijacking is out of scope
Smart Contracts and Blockchain/DLT
- Basic economic governance attacks (e.g. 51% attack)
- Best practice critiques
- Sybil attacks
- Centralization risks
- Attacks related to AllowList and deposit limits
Websites and Apps
- Theoretical impacts without any proof or demonstration
- Content spoofing / Text injection issues
- Captcha bypass using OCR
- CSRF with no security impact (logout CSRF, change language, etc.)\
- Missing HTTP Security Headers (such as X-FRAME-OPTIONS) or cookie security flags (such as “httponly”)
- Server-side information disclosure such as IPs, server names, and most stack traces
- Vulnerabilities used to enumerate or confirm the existence of users or tenants
- Vulnerabilities requiring unlikely user actions
- URL Redirects (unless combined with another vulnerability to produce a more severe vulnerability)
- Lack of SSL/TLS best practices
- Attacks involving DDoS
- Attacks requiring privileged access from within the organization
- SPF records for email domains
- Feature requests
- Best practices
The following activities are prohibited by this bug bounty program. Violation of these rules can result in a temporary suspension or permanent ban from the Immunefi platform at the sole discretion of the Immunefi team, which may also result in: 1) the forfeiture and loss of access to all bug submissions, and 2) zero payout.
Please note that Immunefi has no tolerance for spam/low-quality/incomplete bug reports, “beg bounty” behavior, and misrepresentation of assets and severity. Immunefi exists to protect the global crypto community, not facilitate grift.
- Any testing with mainnet or public testnet deployed code; all testing should be done on private testnets
- 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
- Any other actions prohibited by the Immunefi Rules. These rules are subject to change at any time.