The participationFeeAddress is intended to receive participation fees from each deposit. Under normal behavior, this address should always be a valid, non-zero address to ensure fees are correctly transferred.
However, the constructor of the BriVault contract does not validate whether _participationFeeAddress is the zero address. As a result, if it is mistakenly deployed with a zero address, all participation fees will be irrecoverably sent to the zero address, permanently locking user funds that were meant as fees.
Likelihood: MEDIUM
Reason 1: This will occur whenever the contract is deployed with a zero address (e.g., misconfiguration during deployment).
Reason 2: The constructor does not enforce any validation, so deployment automation or human error could easily introduce this condition.
Impact: MEDIUM
Impact 1: All participation fees sent during deposits will be permanently lost.
Impact 2: Results in incorrect vault accounting and loss of funds intended for the fee receiver.
participationFeeAddress is set to address(0), the ERC20 transfer of the fee succeeds but effectively burns the tokens by sending them to the zero address. This leads to a permanent and silent loss of funds that the project owner cannot recover.
Add an explicit check in the constructor to ensure that _participationFeeAddress is not the zero address before assigning it.
Adding this validation ensures that the contract cannot be deployed with an invalid or zero fee receiver. It prevents the accidental burning of participation fees and enforces safer deployment practices.
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.