Art Gobblers contest - Ch_301's results

Experimental Decentralized Art Factory By Justin Roiland and Paradigm.

General Information

Platform: Code4rena

Start Date: 20/09/2022

Pot Size: $100,000 USDC

Total HM: 4

Participants: 109

Period: 7 days

Judge: GalloDaSballo

Id: 163

League: ETH

Art Gobblers

Findings Distribution

Researcher Performance

Rank: 29/109

Findings: 1

Award: $696.90

🌟 Selected for report: 0

πŸš€ Solo Findings: 0

The users could check the emissionMultiple without revealing it

The user can mintFromGoo() and invoke requestRandomSeed() with toBeRevealed == 1. Now he can check emissionMultiple without invoking revealGobblers(). If he doesn't like the result of the emissionMultiple he can sell these Gobblers without revealing it

Finding

File: /src/ArtGobblers.sol function transferFrom( address from, address to, uint256 id ) public override {

https://github.com/code-423n4/2022-09-artgobblers/blob/main/src/ArtGobblers.sol#L880-L917

Add check is it revealed or not before transfer() the Gobblers to a new address

Users in the allowance mapping can not mintFromGoo()

If someone has an amount on allowance list he can’t use it So he needs to transfer it first to his balance and then he can invoke mintFromGoo() or addGoo()

Finding

File: /src/ArtGobblers.sol function addGoo(uint256 gooAmount) external { // Burn goo being added to gobbler. goo.burnForGobblers(msg.sender, gooAmount); // Increase msg.sender's virtual goo balance. updateUserGooBalance(msg.sender, gooAmount, GooBalanceUpdateType.INCREASE); }

https://github.com/code-423n4/2022-09-artgobblers/blob/main/src/ArtGobblers.sol#L770-L776 https://github.com/code-423n4/2022-09-artgobblers/blob/main/src/Pages.sol#L195-L213 https://github.com/code-423n4/2022-09-artgobblers/blob/main/src/ArtGobblers.sol#L368-L390

Miss to check isApprovedForAll() and getApproved()

Finding

File: /src/ArtGobblers.sol if (owner != msg.sender) revert OwnerMismatch(owner);

https://github.com/code-423n4/2022-09-artgobblers/blob/main/src/ArtGobblers.sol#L733 https://github.com/code-423n4/2022-09-artgobblers/blob/main/src/ArtGobblers.sol#L437

if(owner != msg.sender || !isApprovedForAll(owner, msg.sender) || getApproved(tokenId) != msg.sender) revert OwnerMismatch(owner);

And for mintLegendaryGobbler()

require(owner == msg.sender || isApprovedForAll(owner, msg.sender) || getApproved(Id) == msg.sender,'WRONG_FROM');

Use safeTransferFrom() rather than transferFrom()

The transaction can fail and getCopiesOfArtGobbledByGobbler will keep the value on it

Finding

File: /src/ArtGobblers.sol : ERC721(nft).transferFrom(msg.sender, address(this), id);

https://github.com/code-423n4/2022-09-artgobblers/blob/main/src/ArtGobblers.sol#L748

#0 - GalloDaSballo

2022-10-06T18:20:27Z

The users could check the emissionMultiple without revealing it

Disputed as the user can chose not to reveal but their outcome is already determined and no way of altering it was shown

Users in the allowance mapping can not mintFromGoo()

R

Miss to check isApprovedForAll() and getApproved()

R

Use safeTransferFrom() rather than transferFrom()

L

1L 2R

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