Skip to content

Latest commit

 

History

History
264 lines (209 loc) · 15.3 KB

2023-02-13 - Ourovoros Audit.md

File metadata and controls

264 lines (209 loc) · 15.3 KB

Immunefi

Vault Safe

Security Assessment & Correctness

February 14th, 2023

 

Audited By:
Angelos Apostolidis
angelos.apostolidis@ourovoros.io
George Delkos
george.delkos@ourovoros.io

Overview

Project Summary

Project Name Immunefi - Vault Safe
Website Immunefi
Description Bug Bounty Vaults
Platform Ethereum; Solidity, Yul
Codebase GitHub Repository
Commits 4055bbfe9b9d0e1e157b752898cf815e18cfc2d0

Audit Summary

Delivery Date February 14th, 2023
Method of Audit Static Analysis, Manual Review

Vulnerability Summary

Total Issues 4
Total Major 0
Total Minor 2
Total Informational 2

Files In Scope

Contract Location
src/Withdrawable.sol https://github.com/immunefi-team/vaults/tree/4055bbfe9b9d0e1e157b752898cf815e18cfc2d0/src/Withdrawable.sol
src/Splitter.sol https://github.com/immunefi-team/vaults/tree/4055bbfe9b9d0e1e157b752898cf815e18cfc2d0/src/Splitter.sol

Findings

ID Title Type Severity
F-1 Ambiguous event definition Gas Optimization informational
F-2 Usage of `transfer()` for sending Ether Volatile Code minor
F-3 Inexistent input sanitization Volatile Code minor
F-4 Redundant use of `virtual` Coding Style informational

F-1: Ambiguous event definition

Type Severity Location
Gas Optimization informational Withdrawable L17, L33

Description:

The LogWithdraw event includes data unrelated to the ERC-20 token standard, i.e. a tokenId, leading to static data logging during the said event's emission.

Recommendation:

We advise to remove the tokenId parameter from the LogWithdraw event.

Alleviation:

The team has acknowledged this exhibit but decided to include its alleviation on the next iteration of the code.

F-2: Usage of transfer() for sending Ether

Type Severity Location
Volatile Code minor Withdrawable L28

Description:

After EIP-1884 was included in the Istanbul hard fork, it is not recommended to use .transfer() for transferring ether as these functions have a hard-coded value for gas costs making them obsolete as they are forwarding a fixed amount of gas, specifically 2300. This can cause issues in case the linked statements are meant to be able to transfer funds to other contracts instead of EOAs.

Recommendation:

We advise that the linked .transfer() calls are substituted with the utilization of the sendValue() function from the Address.sol implementation of OpenZeppelin either by directly importing the library or copying the linked code.

Alleviation:

The team has acknowledged this exhibit but decided to include its alleviation on the next iteration of the code. Also, the team has prepared a process to overcome this risk by transferring ownership to an EOA to recover the funds.

F-3: Inexistent input sanitization

Type Severity Location
Volatile Code minor Splitter L45, L76, L85, 109

Description:

The linked code expressions fail to check the address-based values against the zero address.

Recommendation:

We advise to add require statements, checking the aforementioned values against the zero address.

Alleviation:

The team has acknowledged this exhibit but decided to include its alleviation on the next iteration of the code. Also, the team has communicated the risks for using specific values as arguments.

F-4: Redundant use of virtual

Type Severity Location
Coding Style informational Splitter L135

Description:

The linked function contains the virtual keyword without the intention of being extended.

Recommendation:

We advise to remove the virtual keyword from the linked function.

Alleviation:

The team has acknowledged this exhibit but decided to include its alleviation on the next iteration of the code, as it relates to code maintainability and does not affect the users.

Disclaimer

Reports made by Ourovoros are not to be considered as a recommendation or approval of any particular project or team. Security reviews made by Ourovoros for any project or team are not to be taken as a depiction of the value of the “product” or “asset” that is being reviewed.

Ourovoros reports are not to be considered as a guarantee of the bug-free nature of the technology analyzed and should not be used as an investment decision with any particular project. They represent an extensive auditing process intending to help our customers increase the quality of their code while reducing the high level of risk presented by cryptographic tokens and blockchain technology.

Each company and individual is responsible for their own due diligence and continuous security. Our goal is to help reduce the attack parameters and the high level of variance associated with utilizing new and consistently changing technologies, and in no way claim any guarantee of security or functionality of the technology we agree to analyze.