The load function is incorrectly marked as pure while directly interacting with storage using inline assembly. This misclassification breaks Solidity’s security guarantees and can lead to unintended storage access, potentially exposing sensitive data or causing logical errors in contract execution.
The load function, which retrieves a withdrawalRequest from storage, is declared as pure, implying it neither reads nor modifies blockchain state. However, it uses inline assembly to directly access storage by assigning a slot in memory. Solidity’s type system does not enforce pure restrictions within assembly, allowing unintended state interactions.
pure functions should not read or modify storage, but load does.
Developers may incorrectly assume load has no storage interaction, leading to security oversights.
If used in sensitive contexts, this could bypass security assumptions about contract state access.
Calling this function gives the illusion of "safe" execution while interacting with contract state.
Breaks Solidity’s function classification, leading to misleading assumptions.
Could expose sensitive data if used improperly in access-controlled logic.
Potential storage access manipulation, increasing risk in upgradeable contracts.
Likelihood Explanation - LOW
Any contract using load under incorrect assumptions is vulnerable.
Inline assembly bypasses Solidity’s safety checks, making this issue subtle but impactful.
No direct exploit, but risk escalates in complex contract interactions.
Change pure to view
This prevents the compiler and developers from assuming load() has no storage interaction.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.