address(0)
in constructor/initializersImpact: Medium
Likelihood: Low
In Solidity, the Ethereum address 0x0000000000000000000000000000000000000000
is known as the "zero address". This address has significance because it's the default value for uninitialized address variables and is often used to represent an invalid or non-existent address. The "Missing zero address control" issue arises when a Solidity smart contract does not properly check or prevent interactions with the zero address, leading to unintended behavior.
For instance, a contract might allow tokens to be sent to the zero address without any checks, which essentially burns those tokens as they become irretrievable. While sometimes this is intentional, without proper control or checks, accidental transfers could occur.
2
GitHub: 16
GitHub: 43
Ownable2Step
rather than Ownable
Impact: Low
Likelihood: Medium
Ownable2Step and Ownable2StepUpgradeable prevent the contract ownership from mistakenly being transferred to an address that cannot handle it (e.g. due to a typo in the address), by requiring that the recipient of the owner permissions actively accept via a contract call of its own.
3
GitHub: 12
GitHub: 11
GitHub: 27
approve
not checked with IERC20
Impact: Medium
Likelihood: Low
Not all IERC20
implementations revert
when there's a failure in approve
. The function signature has a boolean return value and they indicate errors that way instead.
By not checking the return value, operations that should have marked as failed, may potentially go through without actually approving anything. self.impact_details =
1
GitHub: 20
ERC20
tokensImpact: Medium
Likelihood: Low
Not all IERC20 implementations are totally compliant, and some (e.g UNI, COMP) may fail if the valued passed is larger than uint96. Source
1
GitHub: 74
ERC20
tokensImpact: Medium
Likelihood: Low
Not all IERC20 implementations are totally compliant, and some (e.g UNI, COMP) may fail if the valued passed is larger than uint96. Source
1
GitHub: 20
approve
can revert if the current approval is not zeroImpact: Medium
Likelihood: Low
Some tokens like USDT check for the current approval, and they revert if it's not zero. While Tether is known to do this, it applies to other tokens as well, which are trying to protect against this attack vector.
1
GitHub: 20
Impact: Medium
Likelihood: Low
Even if the function follows the best practice of check-effects-interaction, not using a reentrancy guard when there may be transfer hooks will open the users of this protocol up to read-only reentrancies with no way to protect against it, except by block-listing the whole protocol.
1
GitHub: 74
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.