Venombridge security record

As of 3 Nov 2026, Venombridge has 1 audit report on Trustblock, by CertiK, dated 3 Nov 2022. That report lists no open critical findings.

Critical findings
No open critical findings
In 1 report.
Open the latest report
Your label, live
Get the label for your site

Record last updated . It holds audits, findings and contracts up to Nov 2026, and incidents up to Oct 2026. Trustblock does not review code.

Audits1

Newest first

AuditSecurity firmDateScopeCritical findingsReport
Venom BridgeSecurity firm: CertiKDate: Scope: Files named in the reportNo open critical findingsOpen · skynet.certik.com

Findings33

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

SeverityOpenAcknowledgedFixed
Critical000
High052
Medium006
Low9011
HighMiscalculation of `debtRatio` in Function `updateVenom Bridge · CertiK · 3 Nov 2022Fixed

```solidity=768 /** @notice Change the quantity of assets `strategy` may manage. This may be called by `governance` or `management`. @param strategyId The Strategy to update. @param _debtRatio The quantity of assets `strategy` may now manage. */ function updateStrategyDebtRatio( address strategyId, uint256 _debtRatio ) external override onlyGovernanceOrManagement strategyExists(strategyId) { StrategyParams memory strategy = _strategy(strategyId); _debtRatioReduce(strategy.debtRatio); _strategyDebtRatioUpdate(strategyId, _debtRatio); _debtRatioIncrease(debtRatio); require(debtRatio <= MAX_BPS); emit StrategyUpdateDebtRatio(strategyId, _debtRatio); } ``` Function `updateStrategyDebtRatio()` is supposed to updates `debtRatio` (the total quantity of assets that all strategies can manage) by reducing `strategy.debtRatio` and increasing `_debtRatio`. However, the function call of `_debtRatioIncrease()` at line 787 mistakenly uses `debtRatio` as the parameter rather than `_debtRatio`, which would cause the value of `debtRatio` to be higher than the actual ratio that all strategies can manage. Since `debtRatio` cannot exceed 100% and the total ratio that all strategies can manage is smaller than `debtRatio`, the strategies cannot take full advantage of the assets in the vault contract.

Open the report
HighUpgradeable Contracts Extend Non-Upgradeable ContVenom Bridge · CertiK · 3 Nov 2022Fixed

Upgradeable contract must extend upgradeable contracts and call initializer functions of parent-contracts in its own initializer function. Otherwise, it may malfunction due to improper initialization or improper upgrading.

Open the report
MediumFunction `updateStrategyPerformanceFee()` UpdatesVenom Bridge · CertiK · 3 Nov 2022Fixed

```solidity=830 function updateStrategyPerformanceFee( address strategyId, uint256 _performanceFee ) external override onlyGovernance strategyExists(strategyId) { require(_performanceFee <= MAX_BPS / 2); performanceFee = _performanceFee; emit StrategyUpdatePerformanceFee(strategyId, _performanceFee); } ``` Function `updateStrategyPerformanceFee()` updates the global variable `performanceFee` rather than `strategies_[strategyId].performanceFee`.

Open the report
MediumImplementation Contract Is Not Initialized AutomaVenom Bridge · CertiK · 3 Nov 2022Fixed

When developers deploy the implementation contract and call the function `initialize()` from the Proxy contract, the initialization will be executed in the context of the Proxy contract. Hence the state variable `_initialized` and `_initializing` will be 0 and false, respectively. However, the "initialize" function in the implementation contract is not initialized, and attackers can directly call the function `initialize(),` with malicious inputs to take over the implementation contract. Reference: https://medium.com/immunefi/wormhole-uninitialized-proxy-bugfix-review-90250c41a43a https://docs.openzeppelin.com/upgrades-plugins/1.x/writing-upgradeable#initializing_the_implementation_contract

Open the report
MediumIncorrect interface usedVenom Bridge · CertiK · 3 Nov 2022Fixed

Based on code L72 in the `MultiVaultEverscaleEventAlien.sol` contract, `IProxyMultiVaultAlien_V3` should be used instead of `IProxyMultiVaultAlien_V1` at L140.

Open the report
MediumLack of Storage GapVenom Bridge · CertiK · 3 Nov 2022Fixed

For upgradeable contracts, there must be a storage gap to "allow developers to freely add new state variables in the future without compromising the storage compatibility with existing deployments". Otherwise, it may be very difficult to write new implementation code. Without a storage gap, the variable in the child contract might be overwritten by the upgraded base contract if new variables are introduced to the base contract. Refer to https://docs.openzeppelin.com/contracts/3.x/upgradeable#storage_gaps

Open the report
MediumMissing ModifiersVenom Bridge · CertiK · 3 Nov 2022Fixed

Function `Vault.deposit()` at line 374 misses modifiers `onlyEmergencyDisabled` and `respectDepositLimit`, function `Vault.saveWithdraw()` at line 489 misses modifier `nonReentrant`, and function `MultiVault.deposit()` at line 623 misses modifier `onlyEmergencyDisabled`,

Open the report
MediumNo Access Control and modifier on `forceWithdraw(Venom Bridge · CertiK · 3 Nov 2022Fixed

```solidity=1169 /** @notice Force user's pending withdraw. Works only if Vault has enough tokens on its balance. This may only be called by wrapper. @param pendingWithdrawalId Pending withdrawal ID */ function forceWithdraw( PendingWithdrawalId memory pendingWithdrawalId ) public override onlyEmergencyDisabled pendingWithdrawalOpened(pendingWithdrawalId) pendingWithdrawalApproved(pendingWithdrawalId) { PendingWithdrawalParams memory pendingWithdrawal = _pendingWithdrawal(pendingWithdrawalId); IERC20(token).safeTransfer(pendingWithdrawalId.recipient, pendingWithdrawal.amount); _pendingWithdrawalAmountReduce(pendingWithdrawalId, pendingWithdrawal.amount); emit PendingWithdrawalForce(pendingWithdrawalId.recipient, pendingWithdrawalId.id); } ``` `Vault.forceWithdraw()`'s comment says that the function may only be called by "wrapper", however, the role does not exist and anyone can call the function to withdraw a pending withdrawal to its recipient. `MultiVault.forceWithdraw()` shares the same issue, and it also misses modifiers like `nonReentrant` and `onlyEmergencyDisabled`.

Open the report
Low`mergePoolVersion` not included in upgrade dataVenom Bridge · CertiK · 3 Nov 2022Fixed

`mergePoolVersion` is not included in upgrade data. Its value will be lost after the upgrade. Reference: https://docs.everscale.network/develop/smart-contract/learn/how-to-upgrade-contracts https://github.com/tonlabs/samples/blob/master/solidity/12_BadContract.sol and https://github.com/tonlabs/samples/blob/master/solidity/12_NewVersion.sol

Open the report
LowCheck-Effect-Interaction Pattern ViolationVenom Bridge · CertiK · 3 Nov 2022Fixed

```solidity modifier withdrawalNotSeenBefore(bytes memory payload) { bytes32 withdrawalId = keccak256(payload); require(!withdrawalIds[withdrawalId], "Vault: withdraw payload already seen"); _; withdrawalIds[withdrawalId] = true; } ``` The value of `withdrawalIds[withdrawalId]` is updated after `_;` runs, which violates the check-effect-interaction pattern.

Open the report
Show 9 more
LowInconsistency in Fee CalculationVenom Bridge · CertiK · 3 Nov 2022Fixed

In contract `Vault`, the fee calculation uses `amountPlusBounty`; whereas in contract `MultiVault`, the fee calculation uses `amount` rather than `amountPlusBounty`.

Open the report
LowInconsistency in Function `blacklistAddToken()`Venom Bridge · CertiK · 3 Nov 2022Fixed

```solidity=260 /// @notice Add token to blacklist. Only native token can be blacklisted. /// Blacklisted tokens cant be deposited or withdrawn. /// @param token Token address function blacklistAddToken( address token ) public override onlyGovernance tokenNotBlacklisted(token) { tokens_[token].blacklisted = true; emit BlacklistTokenAdded(token); } ``` Function `blacklistAddToken()`'s comment says that this function should only backlist "native" tokens; however, the function could also blacklist alien tokens and stop them from being deposited or withdrawn since no check guarantees the token is "native".

Open the report
LowInconsistency in Function `setWithdrawalQueue()`Venom Bridge · CertiK · 3 Nov 2022Fixed

```solidity=300 /// @notice Changes `withdrawalQueue` /// This may only be called by `governance` function setWithdrawalQueue( address[20] memory queue ) external override onlyGovernanceOrManagement { withdrawalQueue_ = queue; emit UpdateWithdrawalQueue(withdrawalQueue_); } ``` The comment says "This may only be called by `governance`", however, the modifier `onlyGovernanceOrManagement` allows both `governance` and `management` to call this function.

Open the report
LowMissing Check For `bounty`Venom Bridge · CertiK · 3 Nov 2022Fixed

Function `saveWithdrawAlien()` at line 727 does not require that `pendingWithdrawal.bounty` <= `pendingWithdrawal.amount`. If `pendingWithdrawal.bounty` > `pendingWithdrawal.amount`, this `pendingWithdrawal` will not be filled until `pendingWithdrawal.bounty` is modified.

Open the report
LowMissing Event EmitVenom Bridge · CertiK · 3 Nov 2022Fixed

There should always be events emitted in the sensitive functions that are controlled by privileged roles.

Open the report
LowMissing Input ValidationVenom Bridge · CertiK · 3 Nov 2022Fixed

The given input `vault` is missing the check for the non-zero address.

Open the report
Lowredundant code logicVenom Bridge · CertiK · 3 Nov 2022Fixed

The identified code logic at L144-146 in BaseEvent.sol is redundant: only when the current status is initializing, `status` can be set to initializing.

Open the report
LowState variable `owner` not included in upgrade daVenom Bridge · CertiK · 3 Nov 2022Fixed

State variable `owner` is not included in upgrade data. So after the upgrade, its value will be lost. Reference: https://docs.everscale.network/develop/smart-contract/learn/how-to-upgrade-contracts https://github.com/tonlabs/samples/blob/master/solidity/12_BadContract.sol and https://github.com/tonlabs/samples/blob/master/solidity/12_NewVersion.sol

Open the report
LowUnused ModifierVenom Bridge · CertiK · 3 Nov 2022Fixed

Both the "onlyInitializer" and "eventInitializing" modifiers usage is not found in the bridge codebase.

Open the report

Contracts

No deployed address is recorded for these audits.

The reports name a repository or files. Open a report to see its scope.

The repositories and files the reports name

Show this on your site

Is this your project? Show this record on your own website. The label states what the record holds, links to this page and updates by itself. It is free and needs no sign-in.

Content

Facts

Automatic: the three strongest facts of this project’s own record (its last audit and two more), highlighted. They update with the record. Picking a fact turns Automatic off.

Fixed as
Language

Style

Layout
Theme
Accent
Corners

Format

Size
Date
Embed as
HTML
<head>
<script src="https://widget.trustblock.run/project-widget.min.js" defer></script>
</head>
<body>
<div
data-tb-project-widget
data-tb-project-slug="venom-bridge"
></div>
</body>

Paste the code where the label should appear. It uses no API credit and updates by itself.

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