CertiK reviewed Cyber (Cyberconnect - staking pool) on 9 Apr 2024: 11 findings, 0 critical; 5 marked fixed, 1 acknowledged, 5 open.
Report hosted on skynet.certik.com.
Trustblock does not review code.
Statuses are the security firm’s own, from its report.
| Severity | Open | Acknowledged | Fixed |
|---|---|---|---|
| Critical | 0 | 0 | 0 |
| High | 0 | 1 | 0 |
| Medium | 0 | 0 | 2 |
| Low | 5 | 0 | 3 |
A reentrancy attack can occur when the contract creates a function that makes an external call to another untrusted contract before resolving any effects. If the attacker can control the untrusted contract, they can make a recursive call back to the original function, repeating interactions that would have otherwise not run after the external call resolved the effects. ### External call(s) ```solidity=265 IERC20(asset).approve(bridgeAddress, amount); ``` ### State variables written after the call(s) ```solidity=262 balance[asset][assetOwner] -= amount; ``` ```solidity=263 totalBalance[asset] -= amount; ```
A reentrancy attack can occur when the contract creates a function that makes an external call to another untrusted contract before resolving any effects. If the attacker can control the untrusted contract, they can make a recursive call back to the original function, repeating interactions that would have otherwise not run after the external call resolved the effects. ### External call(s) ```solidity=119 IERC20(asset).safeTransfer(msg.sender, amount); ``` * This function call executes the following external call(s). * In `SafeERC20._callOptionalReturn`, * `returndata = address(token).functionCall(data,"SafeERC20: low-level call failed")` * In `Address.functionCallWithValue`, * `(success,returndata) = target.call{value: value}(data)` ### State variables written after the call(s) ```solidity=115 balance[asset][msg.sender] -= amount; ``` ```solidity=116 totalBalance[asset] -= amount; ```
Addresses are not validated before assignment or external calls, potentially allowing the use of zero addresses and leading to unexpected behavior or vulnerabilities. For example, transferring tokens to a zero address can result in a permanent loss of those tokens. ```solidity=61 weth = _weth; ``` - `_weth` is not zero-checked before being used.
A reentrancy attack can occur when the contract creates a function that makes an external call to another untrusted contract before resolving any effects. If the attacker can control the untrusted contract, they can make a recursive call back to the original function, repeating interactions that would have otherwise not run after the external call resolved the effects. *This finding is considered minor because the reentrancy only causes out-of-order events. * ### External call(s) ```solidity=75 IERC20(asset).safeTransferFrom(msg.sender, address(this), amount); ``` * This function call executes the following external call(s). * In `SafeERC20._callOptionalReturn`, * `returndata = address(token).functionCall(data,"SafeERC20: low-level call failed")` * In `Address.functionCallWithValue`, * `(success,returndata) = target.call{value: value}(data)` ### Events emitted after the call(s) ```solidity=82 emit Deposit(_logId++, msg.sender, asset, actualAmount); ``` --- ### External call(s) ```solidity=95 IWETH(weth).deposit{ value: msg.value }(); ``` ### Events emitted after the call(s) ```solidity=97 emit Deposit(_logId++, msg.sender, weth, msg.value); ``` --- ### External call(s) ```solidity=119 IERC20(asset).safeTransfer(msg.sender, amount); ``` * This function call executes the following external call(s). * In `SafeERC20._callOptionalReturn`, * `returndata = address(token).functionCall(data,"SafeERC20: low-level call failed")` * In `Address.functionCallWithValue`, * `(success,returndata) = target.call{value: value}(data)` ### Events emitted after the call(s) ```solidity=127 emit Withdraw(_logId++, msg.sender, assets, amounts); ``` --- ### External call(s) ```solidity=265 IERC20(asset).approve(bridgeAddress, amount); ``` ```solidity=269 IBridge(bridgeAddress).bridge(assetOwner, recipient, assets, amounts); ``` ### Events emitted after the call(s) ```solidity=279 emit Bridge( _logId++, bridgeAddress, assetOwner, recipient, assets, amounts ); ```
The smart contract does not check or store the return value of an external call in a local or state variable, which may introduce vulnerabilities due to the unhandled outcome. ```solidity=265 IERC20(asset).approve(bridgeAddress, amount); ```
The report names a repository or files. Open the report to see its scope.
Repository and files the report names (1)
1,044 projects reviewed · 1,375 reports · latest May 2025
See CertiK’s auditsSomething 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