Bạn mua một NFT trên BSC với giá 0.01 ETH. Bạn nghĩ mình đang sở hữu tác phẩm hiếm. Nhưng nếu smart contract cho phép mint không giới hạn thì sao?
Đó chính xác là những gì tôi phát hiện khi audit dự án PunkAfrica – một bản fork CryptoPunks trên BSC. Hàm mint không kiểm tra totalSupply. Chỉ với 0.1 ETH gas, tôi đã mint 50 NFT chỉ trong 3 block.
Context
PunkAfrica là một dự án NFT ra mắt năm 2021 trên BSC, tự nhận là phiên bản châu Phi của CryptoPunks. Họ fork hợp đồng gốc của CryptoPunks từ Ethereum, thay đổi một vài tham số: giá mint 0.01 ETH, supply tối đa 10,000. Đội ngũ gồm 3 người, không có kinh nghiệm solidity. Họ dùng Remix IDE, không qua audit bên thứ ba.
Tôi biết đến dự án qua một bài post trên Reddit. Một user than phiền rằng sau khi mint, totalSupply vẫn là 0. Tôi nghi ngờ có lỗi logic. Tôi clone repo, mở trong Hardhat, chạy thử test.
Core
Dưới đây là code lỗi (rút gọn):