Hacker bỏ túi 1 triệu usd nhờ vào bug backend API trong game Wanakafarm
NFT hiện đang là xu hướng khá hot trong thế giới DeFi hiện nay với sự thành công của tựa game Axie Infinity cùng một số tựa game NFT khác. Verichains Lab đã audit khá nhiều NFT Game và team cũng rất quan tâm theo dõi thị trường GameFi.
Wanaka Farm là một tựa game nông trại và cũng có khá nhiều sự kỳ vọng, tuy nhiên sau các quá trình alpha test, beta test game user report rất nhiều lỗi trong game và các lỗi liên quan đến deposit/withdraw crypto currency. Dưới đây là một phân tích của Verichains Lab cùng với team BShield (startup cung cấp giải pháp bảo vệ ứng dụng trên Android/iOS) về một tấn công vào Wanaka Farm cho phép hacker lợi dụng lỗ hổng bỏ túi triệu USD.
TLDR;
Attacker đã lợi dụng sự delay trong quá trình transaction đang được confirm trên chain để thực hiện tấn công replay attack vào backend API. Dẫn đến việc backend API call smart contract nhiều lần. Attacker đã lợi dụng bug này để bỏ túi khoảng 500k usd chỉ trong vài giờ.
Wanaka Farm ra bản game chính thức vào ngày 29/10, chỉ sau vài giờ user report lỗi liên quan đến deposit/withdraw, nhà phát hành ra thông báo bảo trì game. Đến ngày 31/10 nhà phát hành thông báo đã fix lỗi deposit.
Sau đó nhà phát hành tiếp tục thông báo bảo trì game thời gian dài nhưng vẫn giữ marketplace hoạt động.
Tuy nhiên vào ngày 11/11, hacker đã lợi dụng bug deposit/withdraw và bỏ túi khoảng 400k usd. Sau khi inspect giao dịch của hacker, thì thấy attacker tạo ra 100 ví để exploit bug này.
Các bước mà hacker đã thực hiện:
Bước 1: Tạo 1000 ví và chia 2x1.188BNB cho 1000 ví phụ làm phí giao dịch, mỗi ví khoảng 0.02 BNB. Sau đó chuyển token WANA vào 1 ví phụ bất kỳ.
Bước 2: Trên ví phụ đó thực hiện deposit WANA vào contract 0x164664fcf89f3b722bcba6f02f2c9e3b9081c2a1, sau đó thực hiện withdraw từ 5–7 lần. Số token đã nhân lên 5–7 lần dù chỉ deposit 1 lần.
Bước 3: Chuyển số token gốc qua ví phụ khác, và chuyển số token bug được vào ví chính.
Bước 4: Quay về bước 2
Mình thử thực hiện reproduce bug này, tuy nhiên sau đó phát hiện bug này không phải là bug của smart contract, mình đoán là bug backend API. Mình đã thử replay payload của attacker, call 2 function trong smart contract depositWana(uint256), withdrawWana(address,uint256).
Deposit thì thực hiện thành công, tuy nhiên withdraw thì không thực hiện được do smart contract restrict permission.
Sau khi inspect kỹ lại transaction của hacker, mình nhận ra transaction withdraw không phải thực hiện từ ví của hacker mà là một ví khác có quyền operator.
Do đó mình nghĩ transaction trên của ví 0x97..ca1 đến từ backend API. Attacker đã replay attack vào API endpoint claim deposited token nhiều lần.
Sau khi bị tấn công, nhà phát hành ra thông báo đóng cửa marketplace để bảo trì và truy cập vào backend api bị đóng.
Sau khi thực hiện tấn công, attacker chuyển toàn bộ token về ví 0x1f7234eabcb85242f15e3fd8962b70a4caf92b4c và thực hiện bán số một số lượng lớn token này và thu về 310k usd.
Kết luận: Do sự delay trong quá trình withdraw, lúc transaction chưa được confirm. Attacker liên tục gửi yêu cầu withdraw, backend check số dư của attacker là available nên call hàm withdraw trong smart contract, từ đó tạo ra nhiều giao dịch withdraw cùng lúc. Đến khi transaction withdraw đầu tiên đã được hoàn tất thì backend không cho phép withdraw nữa nhưng attacker đã thu về x5–7 lần số token. Đây là một lỗi khá cơ bản trong quá trình dev đối với api có giao dịch call smart contract.
Security của một sản phẩm dùng công nghệ blockchain và tiền/token crypto như NFT Game không chỉ nằm ở smart contract mà còn ở app, backend API, quá trình phát triển phần mềm, vận hành và các hệ thống dịch vụ khác nữa…
Một số ví đang giữ tiền của hacker:
0xb23067D4660f0E2de2978dc8Bda1432986709554: 235k BUSD + 125k WANA
0xD704b5CDf9737997b89181DFe4fd8457F3E42F53: 235k BUSD
0xAC68f671A876Bff46a66CFFFE064F0283d59BC91: 245k BUSD
Hacker bỏ túi 1 triệu usd nhờ vào bug backend API trong game Wanakafarm was originally published in VeriChains Lab on Medium, where people are continuing the conversation by highlighting and responding to this story.