LapTrinhBlockchain

Chia sẻ kiến thức về Lập Trình Blockchain

An toàn Bảo mật, Kiến thức Blockchain

Pinecone Finance bị hack mất khoảng 3.5M PCT – Cách mà hacker đã thực hiện

Pinecone Finance bị hack mất khoảng 3.5M PCT – Cách mà hacker đã thực hiện

Pinecone Finance bị hack mất khoảng 3.5M PCT – Cách mà hacker đã thực hiện

Chia sẻ bài viết
5
(6)

Vào ngày 2021-08-18, Pinecone Finance đã bị hacker tấn công và đã lấy đi khoảng 3.5M PCTs, tương đương giá trị khoảng #200K. Dưới là ảnh chụp các giao dịch rút tiền của hacker.

Các giao dịch rút PCT
Các giao dịch rút PCT

Sau khi phát hiện sự việc, nhóm dự án đã lần ra địa chỉ ví của tin tặc và tìm thấy một số giao dịch được liên kết với địa chỉ ví nóng của CEX bao gồm Binance, Okex Huobi. Nhóm dự án đã liên hệ với CEX và sẽ làm việc cùng nhau để theo dõi danh tính của tin tặc để khôi phục tổn thất.

Binance sau đó đã thông báo giữ tài khoản của hacker: https://twitter.com/PineconeFinance/status/1428306286639128578. Ngày 2020-08-19, hacker gửi lại toàn bộ tài sản cho dự án: https://twitter.com/PineconeFinance/status/1428287136554393603

Lỗ hổng nào trong contract để hacker lợi dụng

Nguyên nhân chính là do lỗi “False Deposit Bug“, việc xử lý gửi tiền trong contract của Pinecone Finance. Mặc dù việc gửi tiền thất bại nhưng contract vẫn coi nó là khoản tiền gửi hợp lệ và thực hiện xử lý bình thường.

Lỗi không kiểm tra kết quả trả về của lệnh safeTransferFrom()
Lỗi không kiểm tra kết quả trả về của lệnh safeTransferFrom()

Chi tiết cuộc tấn công của hacker

Đây là một giao dịch của hacker: 0x10236426cbe9a6380b7990150013125a623784ed1002fe3e34d07ff89ffa2619. Hacker không có đủ PCT nhưng lại đặt cược 200K PCT vào kho tiền. Tuy nhiên giao dịch vẫn thành công và nhận cho hacker khoản tiền 200K PCT hợp lệ được đặt cọc.

Luồng tấn công của hacker
Luồng tấn công của hacker

Vấn đề ở đây là tại sao team phát triển lại sử dụng hàm safeTransfer(). Bởi vì các hàm này xử lý khi không đủ số dư thay vì hoàn nguyên, nó thay đổi số lượng thành số dư sẵn có của người dùng. Bạn xem chi tiết hơn source code trong tệp PineconeFarm.sol.

Lỗi đã được đội dự án fix chỉ bằng thay đổi 1 kí tự, nhưng nếu thực sự fix lỗi kiểu này tôi cảm thấy vẫn còn rủi ro, ví dụ như trường hợp điều kiện vẫn thỏa mãn nhưng gọi hàm safeTransferFrom() trả về false do chưa approve chẳng hạn. Đây chỉ là ý kiến cá nhân.

Lỗi sai khi thực hiện kiểm tra giá trị đầu vào
Lỗi sai khi thực hiện kiểm tra giá trị đầu vào

Chi tiết xem: https://twitter.com/peckshield/status/1428233500260511746

Tái hiện lỗi trên mỗi trường Testnet

Lỗi này thực sự rất dễ nhìn ra nên mình cũng không thực hiện tái hiện trên môi trường testnet.

Nguồn: Tổng hợp

Bài viết này có hữu ích với bạn?

Kích vào một biểu tượng ngôi sao để đánh giá bài viết!

Xếp hạng trung bình 5 / 5. Số phiếu: 6

Bài viết chưa có đánh giá! Hãy là người đầu tiên đánh giá bài viết này.

Trả lời

Giao diện bởi Anders Norén