Platform: Code4rena
Start Date: 18/04/2024
Pot Size: $36,500 USDC
Total HM: 19
Participants: 183
Period: 7 days
Judge: Koolex
Id: 367
League: ETH
Rank: 169/183
Findings: 1
Award: $0.02
🌟 Selected for report: 0
🚀 Solo Findings: 0
🌟 Selected for report: MrPotatoMagic
Also found by: 0x175, 0x486776, 0x77, 0xAkira, 0xAsen, 0xDemon, 0xabhay, 0xblack_bird, 0xlemon, 0xloscar01, 0xtankr, 3docSec, 4rdiii, Abdessamed, AlexCzm, Angry_Mustache_Man, BiasedMerc, Circolors, Cryptor, DMoore, DPS, DedOhWale, Dinesh11G, Dots, GalloDaSballo, Giorgio, Honour, Imp, Jorgect, Krace, KupiaSec, Mrxstrange, NentoR, Pechenite, PoeAudits, Ryonen, SBSecurity, Sabit, T1MOH, TheFabled, TheSavageTeddy, Tychai0s, VAD37, Vasquez, WildSniper, ZanyBonzy, adam-idarrha, alix40, asui, blutorque, btk, c0pp3rscr3w3r, caglankaan, carrotsmuggler, d_tony7470, dimulski, dinkras, djxploit, falconhoof, forgebyola, grearlake, imare, itsabinashb, josephdara, kartik_giri_47538, ke1caM, kennedy1030, koo, lionking927, ljj, niser93, pep7siup, poslednaya, ptsanev, sashik_eth, shaflow2, steadyman, turvy_fuzz, ubl4nk, valentin_s2304, web3km, xyz, y4y, zhaojohnson, zigtur
0.0234 USDC - $0.02
The deposit()
function allows anyone to deposit on behalf of other user(holding dNFT). This result in updating the idToBlockOfLastDeposit[id]
to current block.number
. As a result, any future withdrawal for that id
in the same block will revert.
Actually, the idToBlockOfLastDeposit[id]
is used to prevent from flashloan based attack, which require deposit and withdraw to be in the same txn. However, this check can also maliciously be used against legitmate user who want to withdraw their assets.
withdraw()
txn to VaultManagerV2,deposit()
txn for that user id
, with 1 wei of assets as amount,idToBlockOfLastDeposit[id]
got updated,DepositedInSameBlock()
.Manual review
Allow idToBlockOfLastDeposit[id]
to update, only when the caller is the ownerOf(id)
. This way, anyone can make deposit to id
without any interruption.
function deposit( uint id, address vault, uint amount ) external isValidDNft(id) { - idToBlockOfLastDeposit[id] = block.number; + if (dNft.ownerOf(id) == msg.sender) idToBlockOfLastDeposit[id] = block.number; Vault _vault = Vault(vault); _vault.asset().safeTransferFrom(msg.sender, address(vault), amount); _vault.deposit(id, amount); }
DoS
#0 - c4-pre-sort
2024-04-27T11:38:31Z
JustDravee marked the issue as duplicate of #1103
#1 - c4-pre-sort
2024-04-27T11:45:35Z
JustDravee marked the issue as duplicate of #489
#2 - c4-pre-sort
2024-04-29T09:28:38Z
JustDravee marked the issue as sufficient quality report
#3 - c4-judge
2024-05-05T20:38:17Z
koolexcrypto marked the issue as unsatisfactory: Invalid
#4 - c4-judge
2024-05-05T20:39:23Z
koolexcrypto marked the issue as unsatisfactory: Invalid
#5 - c4-judge
2024-05-05T20:39:26Z
koolexcrypto marked the issue as unsatisfactory: Invalid
#6 - c4-judge
2024-05-05T21:40:10Z
koolexcrypto marked the issue as nullified
#7 - c4-judge
2024-05-05T21:40:16Z
koolexcrypto marked the issue as not nullified
#8 - c4-judge
2024-05-08T15:28:00Z
koolexcrypto marked the issue as duplicate of #1001
#9 - c4-judge
2024-05-11T19:53:10Z
koolexcrypto marked the issue as satisfactory
#10 - c4-judge
2024-05-13T18:34:30Z
koolexcrypto changed the severity to 3 (High Risk)