Venom Bridge

CertiKFiles named in the report

CertiK reviewed Venombridge (Venom Bridge) on 3 Nov 2022: 33 findings, 0 critical; 19 marked fixed, 5 acknowledged, 9 open.

No open critical findings
Open the reportOpen Venombridge’s security record

Report hosted on skynet.certik.com.

Trustblock does not review code.

Findings33

Statuses are the security firm’s own, from its report.

SeverityOpenAcknowledgedFixed
Critical000
High052
Medium006
Low9011
HighCentralization Related Risks(Ethereum)Acknowledged

On the Ethereum side, the following contracts(see "Contracts") contain Privileged functions(see "Privileged Function") can only call by privileged roles(See "Privileged Roles"). Privileged functions can be used to modify the bridge's configurations, upgrade contracts and move assets from the bridge. Any compromise to one or more privileged accounts may allow a hacker to take advantage of this authority and alter the bridge configuration, take full control of the bridge, and withdraw assets from the bridge. "Contracts" * DAO.sol * Registry.sol * Bridge.sol * multivault/MultiVault.sol * multivault/MultiVaultToken.sol * ProxyAdmin * TransparentUpgradeableProxy * strategies/BaseStrategy.sol * strategies/Convex3crv.sol * strategies/ConvexCrvLp.sol * strategies/ConvexFrax.sol * vault/Vault.sol, "Privileged Roles" * Owner * roundSubmitter * Keepers * Governance * pendingGovernance * Guardian * strategist * WithdrawGuardian * StrategyRewardsManager * Management "Privileged Functions" * setConfiguration() * setBridge() * setBridge() * setRewards() * setProxyAdmin() * newVaultRelease() * newVault() * endorseVault() * setBanksy() * tagVault() * setConfiguration() * pause() * unpause() * updateMinimumRequiredSignatures() * updateRoundTTL() * forceRoundRelays() * setRoundSubmitter() * banRelays() * unbanRelays() * setPrefix() * blacklistAddToken() * blacklistRemoveToken() * setRewards() * setDefaultNativeDepositFee() * setDefaultNativeWithdrawFee() * setDefaultAlienDepositFee() * setDefaultAlienWithdrawFee() * setTokenDepositFee() * setTokenWithdrawFee() * setConfigurationAlien() * setConfigurationNative() * setGovernance() * acceptGovernance() * setManagement() * setGuardian() * setEmergencyShutdown() * skim() * migrateAlienTokenToVault() * mint() * burn() * changeProxyAdmin() * upgrade() * upgradeAndCall() * changeAdmin() * upgradeTo() * upgradeToAndCall() * setStrategist() * setKeeper() * setMinReportDelay() * setMaxReportDelay() * setProfitFactor() * setDebtThreshold() * setMetadataURI() * tend() * harvest() * migrate() * setEmergencyExit() * sweep() * setPathTarget() * _approveBasic() * _approveDex() * approveAll() * switchDex() * setSlippageFactor() * setIsClaimRewards() * setIsClaimExtras() * withdrawToConvexDepositTokens() * withdrawToWrappedTokens() * claimWantTokens() * claimWrappedWantTokens() * claimRewardTokens() * harvest() * sweep() * setPathTarget() * setDepositFee() * setWithdrawFee() * setConfiguration() * setGovernance() * acceptGovernance() * setManagement() * setGuardian() * setWithdrawGuardian() * setStrategyRewards() * setRewards() * setLockedProfitDegradation() * setDepositLimit() * setPerformanceFee() * setManagementFee() * setWithdrawLimitPerPeriod() * setUndeclaredWithdrawLimit() * setEmergencyShutdown() * setWithdrawalQueue() * addStrategy() * updateStrategyDebtRatio() * updateStrategyMinDebtPerHarvest() * updateStrategyMaxDebtPerHarvest() * updateStrategyPerformanceFee() * migrateStrategy() * revokeStrategy() * revokeStrategy() * skim() * skimFees() * sweep() * setPendingWithdrawalApprove()

HighCentralization Related Risks(Everscale)Acknowledged

On the Everscale side, the following contracts(see "Contracts") contain Privileged functions(see "Privileged Function") can only call by privileged roles(See "Privileged Roles"). Privileged functions can be used to modify the bridge's configurations, upgrade contracts and move assets from the bridge. Any compromise to one or more privileged accounts may allow a hacker to take advantage of this authority and alter the bridge configuration, take full control of the bridge, and withdraw assets from the bridge. "Contracts" * Bridge.sol: * Connector.sol: * MergePool.sol: * MergeRouter.sol: * EthereumEventConfiguration.sol: * EverscaleEventConfiguration.sol: * BaseEvent.sol: * ProxyMultiVaultNative.sol: * ProxyTokenTransfer.sol: * ProxyMultiVaultAlien_V3.sol: * DaoRoot.sol: * Staking.sol: * StakingV1_1.sol: * StakingBase.sol: * StakingUpgradable.sol: "Privileged Roles" * Manager * Owner * Admin * Rewarder * Rescuer "Privileged Functions" * addDelegate() * addToken() * burn() * disableAll() * disablePool() * disableToken() * enable() * enableAll() * enableToken() * forceUpgradeUserData() * installOrUpdateElectionCode() * installOrUpdateRelayRoundCode() * installOrUpdateUserDataCode() * legacyTransferTokenOwnership() * mint() * removeToken() * sendMessage() * sendRelaysToRelayRound() * setActive() * setBridgeEventEthTonConfig() * setBridgeEventTonEthConfig() * setCanon() * setConfiguration() * setEmergency() * setEndBlockNumber() * setEndTimestamp() * setManager() * setMergePool() * setMergePoolPlatform() * setMergeRouter() * setMeta() * setPool() * setStakingRoot() * setTonEventDeployValue() * startNewRewardRound() * transferAdmin() * transferTokenOwnership() * updateActive() * updateConnectorDeployValue() * updateEthereumActionEventConfiguration() * updateGracePeriod() * updateProposalCode() * updateProposalConfiguration() * updateQuorumVotes() * updateThreshold() * updateTimeLock() * updateVotingDelay() * updateVotingPeriod() * upgrade() * upgradeElection() * upgradeMergePool() * upgradeRelayRound() * withdrawTokensEmergency() * withdrawTonsEmergency()

HighIncompatibility With non-standard ERC20 tokensAcknowledged

The current bridge design is not compatible with non-standard ERC20 tokens, such as deflationary tokens or rebase tokens. For example:\ When transferring ERC20 deflationary tokens, the input amount may not be equal to the received amount due to the charged transaction fee. As a result, an inconsistency in the amount will occur and the transaction may fail due to the validation checks. For example, if a user sends 100 deflationary tokens (with a 10% transaction fee) to the target contract, only 90 tokens actually arrived in the contract. ```sol IERC20(token).safeTransferFrom( msg.sender, address(this), amount ); _transferToEverscaleAlien(token, recipient, amount - fee); ```

HighPotential Loss When Withdraw TokensAcknowledged

If a user calls `withdraw()` and the balance in this contract is insufficient, the function would trigger `IStrategy(strategyId).withdraw()` which may incur losses that would be undertaken by the user.

HighRisk of supporting "arbitrary" tokensAcknowledged

Based on the comment("Allows to transfer arbitrary tokens from Everscale to EVM and backwards.") and implementation, the "MultiVault" contract plan to support arbitrary types of ERC20 tokens. The `deposit(EverscaleAddress memory recipient, address token, uint amount)` function takes the user input "token," and the contract performs multiple external calls to the token address, such as: * IERC20(token).safeTransfer() * IERC20(token).balanceOf(address(this)) * IERC20Metadata(_token).name(), * IERC20Metadata(_token).symbol(), * IERC20Metadata(_token).decimals(), * IERC20(pendingWithdrawal.token).safeTransfer() One of the most dangerous behaviors in smart contracts is to perform an external call to an untrusted contract. An attacker can deploy a contract and implement the contract whatever they want. When the "MultiVault" contract performs the external call, the attacker-defined code will be executed.

Contracts in scope

No deployed address is recorded for this audit.

The report names a repository or files. Open the report to see its scope.

Repository and files the report names (133)

  • everscale/contracts/bridge/alien-token/AlienTokenWalletPlatform.sol
  • everscale/contracts/bridge/interfaces/IProxyExtended.sol
  • everscale/contracts/utils/cell-encoder/CellEncoderStandalone.sol
  • ethereum/contracts/bridge/Bridge.sol
  • ethereum/contracts/multivault/interfaces/IMultiVault.sol
  • everscale/contracts/utils/cell-encoder/ProxyTokenTransferCellEncoder.sol
  • everscale/contracts/staking/UserData.sol
  • everscale/contracts/dao/structures/ActionStructure.sol
  • everscale/contracts/dao/interfaces/IVoter.sol
  • everscale/contracts/staking/base/StakingRelay.sol
  • everscale/contracts/bridge/interfaces/multivault/IMultiVaultEverscaleEventAlien.sol
  • everscale/contracts/bridge/proxy/alien/ProxyMultiVaultAlien_V3.sol
  • everscale/contracts/bridge/interfaces/event-configuration-contracts/IEverscaleEventConfiguration.sol
  • everscale/contracts/bridge/interfaces/alien-token-merge/IMergeRouter.sol
  • everscale/contracts/staking/interfaces/IRelayRound.sol
  • everscale/contracts/staking/interfaces/ITokensReceivedCallback.sol
  • ethereum/contracts/multivault/interfaces/IERC20.sol
  • everscale/contracts/bridge/interfaces/multivault/IMultiVaultEverscaleEventNative.sol
  • ethereum/contracts/Registry.sol
  • ethereum/contracts/vault/Vault.sol
  • everscale/contracts/staking/Staking.sol
  • everscale/contracts/bridge/alien-token/TokenRootAlienEVM.sol
  • everscale/contracts/bridge/factory/ProxyTokenTransferFactory.sol
  • everscale/contracts/bridge/event-contracts/base/EthereumBaseEvent.sol
  • everscale/contracts/staking/StakingV1_1.sol
  • everscale/contracts/bridge/event-contracts/base/EverscaleBaseEvent.sol
  • everscale/contracts/utils/cell-encoder/ProxyMultiVaultCellEncoder.sol
  • ethereum/contracts/DAO.sol
  • everscale/contracts/dao/DaoRoot.sol
  • everscale/contracts/utils/Receiver.sol
  • everscale/contracts/bridge/alien-token-merge/MergePool.sol
  • everscale/contracts/bridge/interfaces/event-contracts/IEverscaleEvent.sol
  • ethereum/contracts/multivault/utils/ChainId.sol
  • everscale/contracts/staking/RelayRound.sol
  • everscale/contracts/bridge/interfaces/legacy/ILegacyTransferOwner.sol
  • everscale/contracts/bridge/event-contracts/base/BaseEvent.sol
  • ethereum/contracts/multivault/utils/Initializable.sol
  • ethereum/contracts/multivault/MultiVaultToken.sol
  • everscale/contracts/bridge/event-contracts/token-transfer/TokenTransferEverscaleEvent.sol
  • everscale/contracts/bridge/event-configuration-contracts/EverscaleEventConfiguration.sol
  • everscale/contracts/bridge/interfaces/event-contracts/IBasicEvent.sol
  • everscale/contracts/bridge/interfaces/IConnector.sol
  • everscale/contracts/bridge/interfaces/multivault/IProxyMultiVaultAlien_V1.sol
  • everscale/contracts/staking/libraries/Gas.sol
  • everscale/contracts/dao/structures/PlatformTypes.sol
  • everscale/contracts/staking/base/StakingBase.sol
  • everscale/contracts/dao/interfaces/IProposal.sol
  • ethereum/contracts/vault/VaultHelpers.sol
  • everscale/contracts/bridge/interfaces/multivault/IMultiVaultEVMEventNative.sol
  • everscale/contracts/utils/cell-encoder/MergePoolCellEncoder.sol
  • ethereum/contracts/multivault/utils/Context.sol
  • ethereum/contracts/bridge/BridgeMockup.sol
  • everscale/contracts/bridge/interfaces/ITokenRootAlienEVM.sol
  • everscale/contracts/bridge/event-contracts/multivault/MultiVaultEVMEventAlien.sol
  • everscale/contracts/bridge/alien-token-merge/MergeRouter.sol
  • everscale/contracts/bridge/alien-token-merge/MergePoolPlatform.sol
  • ethereum/contracts/multivault/interfaces/proxy/IBeacon.sol
  • everscale/contracts/dao/libraries/DaoErrors.sol
  • ethereum/contracts/vault/VaultStorage.sol
  • everscale/contracts/utils/ErrorCodes.sol
  • everscale/contracts/bridge/event-contracts/staking/StakingEthEvent.sol
  • ethereum/contracts/multivault/proxy/Proxy.sol
  • everscale/contracts/staking/StakingRootDeployer.sol
  • everscale/contracts/staking/interfaces/IUpgradableByRequest.sol
  • everscale/contracts/utils/cell-encoder/DaoCellEncoder.sol
  • ethereum/contracts/multivault/utils/Ownable.sol
  • everscale/contracts/bridge/interfaces/alien-token-merge/IMergePool.sol
  • everscale/contracts/utils/Delegate.sol
  • everscale/contracts/bridge/interfaces/IProxy.sol
  • everscale/contracts/utils/TransferUtils.sol
  • ethereum/contracts/multivault/MultiVault.sol
  • everscale/contracts/dao/structures/ProposalSates.sol
  • everscale/contracts/bridge/event-contracts/token-transfer/TokenTransferEthereumEvent.sol
  • everscale/contracts/bridge/interfaces/event-contracts/IEthereumEvent.sol
  • ethereum/contracts/bridge/StakingRelayVerifier.sol
  • everscale/contracts/bridge/interfaces/IProxyTokenTransferConfigurable.sol
  • everscale/contracts/dao/structures/ProposalConfigurationStructure.sol
  • ethereum/contracts/multivault/interfaces/IMultiVaultToken.sol
  • ethereum/contracts/utils/ReentrancyGuard.sol
  • everscale/contracts/staking/Encoder.sol
  • everscale/contracts/staking/Election.sol
  • everscale/contracts/bridge/interfaces/IStaking.sol
  • ethereum/contracts/multivault/utils/ReentrancyGuard.sol
  • ethereum/contracts/utils/Initializable.sol
  • everscale/contracts/bridge/interfaces/multivault/IProxyMultiVaultNative.sol
  • ethereum/contracts/multivault/proxy/TransparentUpgradeableProxy.sol
  • everscale/contracts/bridge/interfaces/multivault/IMultiVaultEVMEventAlien.sol
  • everscale/contracts/staking/interfaces/IElection.sol
  • ethereum/contracts/multivault/interfaces/IEverscale.sol
  • everscale/contracts/staking/base/StakingUpgradable.sol
  • everscale/contracts/dao/interfaces/IStakingAccount.sol
  • everscale/contracts/bridge/Bridge.sol
  • everscale/contracts/bridge/interfaces/event-configuration-contracts/IEthereumEventConfiguration.sol
  • everscale/contracts/bridge/Connector.sol
  • ethereum/contracts/utils/Token.sol
  • everscale/contracts/bridge/interfaces/IRound.sol
  • ethereum/contracts/multivault/interfaces/IBridge.sol
  • ethereum/contracts/multivault/proxy/ProxyAdmin.sol
  • ethereum/contracts/multivault/interfaces/IERC20Metadata.sol
  • everscale/contracts/bridge/interfaces/IBridge.sol
  • everscale/contracts/bridge/interfaces/IEventNotificationReceiver.sol
  • everscale/contracts/bridge/factory/EverscaleEventConfigurationFactory.sol
  • everscale/contracts/bridge/factory/EthereumEventConfigurationFactory.sol
  • everscale/contracts/bridge/event-contracts/multivault/MultiVaultEVMEventNative.sol
  • everscale/contracts/staking/interfaces/IStakingPool.sol
  • ethereum/contracts/utils/Cache.sol
  • everscale/contracts/dao/interfaces/IUpgradableByRequest.sol
  • ethereum/contracts/multivault/proxy/ERC1967Proxy.sol
  • everscale/contracts/dao/Proposal.sol
  • ethereum/contracts/multivault/proxy/ERC1967Upgrade.sol
  • everscale/contracts/dao/libraries/Gas.sol
  • everscale/contracts/staking/libraries/PlatformTypes.sol
  • everscale/contracts/bridge/event-contracts/dao/DaoEthereumActionEvent.sol
  • everscale/contracts/staking/interfaces/IStakingDao.sol
  • everscale/contracts/bridge/alien-token/AlienTokenWalletUpgradeable.sol
  • everscale/contracts/bridge/interfaces/legacy/ILegacyBurnTokensCallback.sol
  • everscale/contracts/bridge/interfaces/event-configuration-contracts/IBasicEventConfiguration.sol
  • everscale/contracts/utils/cell-encoder/StakingCellEncoder.sol
  • everscale/contracts/utils/Platform.sol
  • everscale/contracts/dao/interfaces/IDaoRoot.sol
  • everscale/contracts/bridge/event-contracts/multivault/MultiVaultEverscaleEventAlien.sol
  • everscale/contracts/bridge/event-contracts/staking/StakingTonEvent.sol
  • everscale/contracts/utils/cell-encoder/TokenCellEncoder.sol
  • everscale/contracts/bridge/event-contracts/multivault/MultiVaultEverscaleEventNative.sol
  • everscale/contracts/staking/interfaces/IUserData.sol
  • everscale/contracts/bridge/proxy/ProxyTokenTransfer.sol
  • ethereum/contracts/multivault/interfaces/proxy/draft-IERC1822.sol
  • ethereum/contracts/utils/ChainId.sol
  • everscale/contracts/dao/interfaces/IUpgradable.sol
  • everscale/contracts/bridge/interfaces/multivault/IProxyMultiVaultAlien_V3.sol
  • everscale/contracts/dao/interfaces/IProposer.sol
  • everscale/contracts/bridge/proxy/ProxyMultiVaultNative.sol
  • everscale/contracts/bridge/event-configuration-contracts/EthereumEventConfiguration.sol

Part of Venombridge’s security record

Venombridge
Audits1 audit by 1 firmLast audit Nov 2022, by CertiK.
Critical findingsNo open critical findingsIn 1 report.
Open Venombridge’s security record

Security firm

CertiK

1,044 projects reviewed · 1,375 reports · latest May 2025

See CertiK’s audits

Something wrong on this page? A missing report, a wrong date, a finding that was fixed since. Tell us and we check it against its source.

Tell us