Poolz bị tấn công tràn số học, thiệt hại khoảng 66,5 triệu đô la
Gần đây, nền tảng Poolz đã bị tấn công trên mạng Ethereum, Binance Smart Chain và Polygon, dẫn đến việc hàng triệu token bị đánh cắp, tổng giá trị khoảng 665.000 đô la Mỹ. Cuộc tấn công xảy ra vào lúc 3 giờ 16 phút sáng (theo giờ UTC) ngày 15 tháng 3 năm 2023.
Theo dữ liệu trên chuỗi được theo dõi, cuộc tấn công này liên quan đến nhiều loại token, bao gồm MEE, ESNC, DON, ASW, KMON, POOLZ, v.v. Kẻ tấn công đã đổi một phần token bị đánh cắp thành BNB, nhưng hiện tại số tiền chưa được chuyển đi.
Kẻ tấn công đã lợi dụng một lỗ hổng tràn số học trong hợp đồng Poolz. Cụ thể, vấn đề nằm ở hàm getArraySum trong hàm CreateMassPools. Hàm này khi tính toán số lượng token, do kết quả cộng dồn vượt quá giá trị tối đa của kiểu uint256, dẫn đến tràn, và giá trị trả về cuối cùng trở thành 1.
Quy trình tấn công như sau:
Kẻ tấn công đầu tiên đã đổi một số token MNZ thông qua một DEX.
Sau đó gọi hàm CreateMassPools, tận dụng lỗ hổng của hàm getArraySum. Mảng _StartAmount do kẻ tấn công truyền vào chứa các giá trị siêu lớn, dẫn đến tràn số khi cộng.
Do hàm CreatePool sử dụng _StartAmount để ghi lại thuộc tính của bể, kẻ tấn công thực tế chỉ chuyển vào 1 token, nhưng hệ thống ghi lại là một giá trị khổng lồ.
Cuối cùng, kẻ tấn công gọi hàm withdraw để rút token, hoàn thành cuộc tấn công.
Để ngăn chặn các vấn đề như vậy xảy ra lần nữa, khuyên các nhà phát triển nên sử dụng phiên bản mới hơn của Solidity để biên dịch, vì phiên bản mới sẽ tự động thực hiện kiểm tra tràn. Đối với các dự án sử dụng phiên bản Solidity cũ, có thể xem xét sử dụng thư viện SafeMath của OpenZeppelin để giải quyết vấn đề tràn số nguyên.
Sự kiện này một lần nữa nhắc nhở chúng ta rằng, trong phát triển hợp đồng thông minh, phải đặc biệt cẩn thận khi xử lý các phép toán toán học, đặc biệt là khi liên quan đến tính toán số lớn. Đồng thời, việc thường xuyên tiến hành kiểm toán mã và kiểm tra an ninh cũng là những biện pháp quan trọng để đảm bảo an toàn cho dự án.
Xem bản gốc
Trang này có thể chứa nội dung của bên thứ ba, được cung cấp chỉ nhằm mục đích thông tin (không phải là tuyên bố/bảo đảm) và không được coi là sự chứng thực cho quan điểm của Gate hoặc là lời khuyên về tài chính hoặc chuyên môn. Xem Tuyên bố từ chối trách nhiệm để biết chi tiết.
8 thích
Phần thưởng
8
5
Đăng lại
Chia sẻ
Bình luận
0/400
ValidatorVibes
· 4giờ trước
smh... một cuộc tấn công tràn bộ nhớ khác. giao thức kiểm tra thực sự là quản trị 101 frfr
Poolz bị tấn công tràn số học, thiệt hại 66,5 triệu đô la.
Poolz bị tấn công tràn số học, thiệt hại khoảng 66,5 triệu đô la
Gần đây, nền tảng Poolz đã bị tấn công trên mạng Ethereum, Binance Smart Chain và Polygon, dẫn đến việc hàng triệu token bị đánh cắp, tổng giá trị khoảng 665.000 đô la Mỹ. Cuộc tấn công xảy ra vào lúc 3 giờ 16 phút sáng (theo giờ UTC) ngày 15 tháng 3 năm 2023.
Theo dữ liệu trên chuỗi được theo dõi, cuộc tấn công này liên quan đến nhiều loại token, bao gồm MEE, ESNC, DON, ASW, KMON, POOLZ, v.v. Kẻ tấn công đã đổi một phần token bị đánh cắp thành BNB, nhưng hiện tại số tiền chưa được chuyển đi.
Kẻ tấn công đã lợi dụng một lỗ hổng tràn số học trong hợp đồng Poolz. Cụ thể, vấn đề nằm ở hàm getArraySum trong hàm CreateMassPools. Hàm này khi tính toán số lượng token, do kết quả cộng dồn vượt quá giá trị tối đa của kiểu uint256, dẫn đến tràn, và giá trị trả về cuối cùng trở thành 1.
Quy trình tấn công như sau:
Kẻ tấn công đầu tiên đã đổi một số token MNZ thông qua một DEX.
Sau đó gọi hàm CreateMassPools, tận dụng lỗ hổng của hàm getArraySum. Mảng _StartAmount do kẻ tấn công truyền vào chứa các giá trị siêu lớn, dẫn đến tràn số khi cộng.
Do hàm CreatePool sử dụng _StartAmount để ghi lại thuộc tính của bể, kẻ tấn công thực tế chỉ chuyển vào 1 token, nhưng hệ thống ghi lại là một giá trị khổng lồ.
Cuối cùng, kẻ tấn công gọi hàm withdraw để rút token, hoàn thành cuộc tấn công.
Để ngăn chặn các vấn đề như vậy xảy ra lần nữa, khuyên các nhà phát triển nên sử dụng phiên bản mới hơn của Solidity để biên dịch, vì phiên bản mới sẽ tự động thực hiện kiểm tra tràn. Đối với các dự án sử dụng phiên bản Solidity cũ, có thể xem xét sử dụng thư viện SafeMath của OpenZeppelin để giải quyết vấn đề tràn số nguyên.
Sự kiện này một lần nữa nhắc nhở chúng ta rằng, trong phát triển hợp đồng thông minh, phải đặc biệt cẩn thận khi xử lý các phép toán toán học, đặc biệt là khi liên quan đến tính toán số lớn. Đồng thời, việc thường xuyên tiến hành kiểm toán mã và kiểm tra an ninh cũng là những biện pháp quan trọng để đảm bảo an toàn cho dự án.