Hawk High

First Flight #39
Beginner FriendlySolidity
100 EXP
View results
Submission Details
Severity: medium
Valid

Inconsistent Storage Layout Between LevelOne and LevelTwo Contracts

Summary

The LevelTwo.sol contract has a different storage layout compared to LevelOne.sol, which can lead to storage collisions when upgrading the contract through a proxy pattern.

Vulnerability Details

  • Storage variables in LevelTwo.sol are not aligned with LevelOne.sol

  • Different order or types of state variables can cause storage collisions

LevelTwo.sol
address principal;
bool inSession;
uint256 public sessionEnd;
uint256 public bursary;
uint256 public cutOffScore;
mapping(address => bool) public isTeacher;
mapping(address => bool) public isStudent;
mapping(address => uint256) public studentScore;
address[] listOfStudents;
address[] listOfTeachers;
uint256 public constant TEACHER_WAGE_L2 = 40;
uint256 public constant PRINCIPAL_WAGE_L2 = 5;
uint256 public constant PRECISION = 100;
LevelOne.sol
address principal;
bool inSession;
uint256 schoolFees;
uint256 public immutable reviewTime = 1 weeks;
uint256 public sessionEnd;
uint256 public bursary;
uint256 public cutOffScore;
mapping(address => bool) public isTeacher;
mapping(address => bool) public isStudent;
mapping(address => uint256) public studentScore;
mapping(address => uint256) private reviewCount;
mapping(address => uint256) private lastReviewTime;
address[] listOfStudents;
address[] listOfTeachers;
uint256 public constant TEACHER_WAGE = 35; // 35%
uint256 public constant PRINCIPAL_WAGE = 5; // 5%
uint256 public constant PRECISION = 100;

Impact

High: Storage collisions can lead to:

  • Corrupted data

  • Unexpected behavior

  • Potential loss of funds

  • Contract malfunction

Tools Used

Manual code review

Recommendations

Ensure storage variables in LevelTwo.sol match exactly with LevelOne.sol

Updates

Lead Judging Commences

yeahchibyke Lead Judge 10 months ago
Submission Judgement Published
Validated
Assigned finding tags:

storage collision

Support

FAQs

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

Give us feedback!