Part 2

Zaros
PerpetualsDEXFoundrySolidity
70,000 USDC
View results
Submission Details
Severity: low
Valid

Incorrect ERC7201 Storage Slot Calculation

Summary

Custom storage slot implementation risks collisions during upgrades.

Vulnerability Details

Files:

  • FeeConversionKeeper.sol (Lines 15-17)

  • UsdTokenSwapKeeper.sol (Lines 14-16)

bytes32 internal constant FEE_CONVERSION_KEEPER_LOCATION =
keccak256(abi.encode(uint256(keccak256("fi.zaros...")) - 1)) & ~bytes32(uint256(0xff));

The -1 offset and bitmask application deviate from ERC7201 specifications, creating potential storage layout conflicts.

Impact

  • Storage Corruption: Upgrade implementations may overwrite critical data

  • Permanent Loss: Could brick protocol functionality

  • Severity: High

Tools Used

  • Storage layout analysis via solc --storage-layout

  • ERC7201 specification review

Recommendations

  1. Use OpenZeppelin's standardized implementation:

import "@openzeppelin/contracts/utils/StorageSlot.sol";
StorageSlot.getAddressSlot(
keccak256("fi.zaros.keepers.FeeConversionKeeper")
).value = newValue;
Updates

Lead Judging Commences

inallhonesty Lead Judge 7 months ago
Submission Judgement Published
Validated
Assigned finding tags:

ERC7201 implemented incorrectly

Support

FAQs

Can't find an answer? Chat with us on Discord, Twitter or Linkedin.