The transferFeeClaim() function in the DIVA Protocol does not validate whether the sender actually owns the fee claim before transferring it. This means an attacker can transfer arbitrary fee claims without authorization, leading to fund theft.
Additionally, the batch function (batchTransferFeeClaim()) allows mass exploitation, making this vulnerability highly dangerous. Since the contract directly manipulates storage using assembly (fs.slot := position), any missing validation in _transferFeeClaim() could also lead to storage corruption, making legitimate fee claims unrecoverable.
Implementation from Diva Protocol
The transferFeeClaim() function does not verify whether the sender actually owns the specified fee claim before executing the transfer. This means that:
Attackers can transfer arbitrary fee claims they do not own, effectively stealing funds.
Batch execution (batchTransferFeeClaim()) allows mass exploitation, making it possible to drain multiple fee claims in a single transaction.
Direct storage manipulation (fs.slot := position) makes unauthorized transfers even more dangerous, as it could lead to corruption of fee claim records, making legitimate claims unrecoverable.
Users can lose their fee claims without consent.
All fee claims in the system could be drained through repeated unauthorized transfers.
Storage corruption risk due to improper direct slot access, making recovery impossible.
Batch function amplifies damage, allowing attackers to automate large-scale withdrawals in one transaction.
Manual Review
Add ownership checks before executing transfers to prevent unauthorized fee claims.
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.