Lucene search

K
code423n4Code4renaCODE423N4:2022-08-RIGOR-FINDINGS-ISSUES-365
HistoryAug 06, 2022 - 12:00 a.m.

Lack of storage gap for upgradable contracts

2022-08-0600:00:00
Code4rena
github.com
4

Lines of code
<https://github.com/code-423n4/2022-08-rigor/blob/main/contracts/DebtToken.sol#L11&gt;
<https://github.com/code-423n4/2022-08-rigor/blob/main/contracts/Disputes.sol#L17&gt;
<https://github.com/code-423n4/2022-08-rigor/blob/main/contracts/HomeFi.sol#L27&gt;
<https://github.com/code-423n4/2022-08-rigor/blob/main/contracts/HomeFiProxy.sol#L14&gt;
<https://github.com/code-423n4/2022-08-rigor/blob/main/contracts/Project.sol#L24&gt;
<https://github.com/code-423n4/2022-08-rigor/blob/main/contracts/ProjectFactory.sol#L16&gt;

Vulnerability details

Impact

Safe usage of upgradable contract should include a storage gap to allow the addition of new state. OpenZeppelin docs

Proof of Concept

The following contracts on the project are using upgradable contracts from OpenZeppelin.

File: contracts/Community.sol
contract Community is
    ICommunity,
    PausableUpgradeable,
    ReentrancyGuardUpgradeable,
    ERC2771ContextUpgradeable

<https://github.com/code-423n4/2022-08-rigor/blob/main/contracts/Community.sol#L21&gt;

File: contracts/DebtToken.sol
contract DebtToken is IDebtToken, ERC20Upgradeable {

<https://github.com/code-423n4/2022-08-rigor/blob/main/contracts/DebtToken.sol#L11&gt;

File: contracts/Disputes.sol
contract Disputes is
    IDisputes,
    ReentrancyGuardUpgradeable,
    ERC2771ContextUpgradeable

<https://github.com/code-423n4/2022-08-rigor/blob/main/contracts/Disputes.sol#L17&gt;

File: contracts/HomeFi.sol
contract HomeFi is
    IHomeFi,
    ReentrancyGuardUpgradeable,
    ERC721URIStorageUpgradeable,
    ERC2771ContextUpgradeable

<https://github.com/code-423n4/2022-08-rigor/blob/main/contracts/HomeFi.sol#L27&gt;

File: contracts/HomeFiProxy.sol
contract HomeFiProxy is OwnableUpgradeable {

<https://github.com/code-423n4/2022-08-rigor/blob/main/contracts/HomeFiProxy.sol#L14&gt;

File: contracts/Project.sol
contract Project is
    IProject,
    ReentrancyGuardUpgradeable,
    ERC2771ContextUpgradeable

<https://github.com/code-423n4/2022-08-rigor/blob/main/contracts/Project.sol#L24&gt;

File: contracts/ProjectFactory.sol
contract ProjectFactory is
    IProjectFactory,
    Initializable,
    ERC2771ContextUpgradeable

<https://github.com/code-423n4/2022-08-rigor/blob/main/contracts/ProjectFactory.sol#L16&gt;

Recommended Mitigation Steps

For the contracts where inheritance is used by an upgradeable contract, consider adding an appropriate storage gap at the end of the contracts, according to OpenZeppelin recommendation, to avoid compromising the storage compatibility with existing deployments.

uint256[50] private __gap;

The text was updated successfully, but these errors were encountered:

šŸ‘€ 1 horsefacts reacted with eyes emoji

All reactions

  • šŸ‘€ 1 reaction