Dự án Poolz gặp sự cố tấn công tràn số học, thiệt hại khoảng 66,5 triệu đô la Mỹ
Gần đây, một sự cố an ninh liên quan đến dự án đa chuỗi Poolz đã thu hút sự chú ý trong ngành. Theo dữ liệu giám sát blockchain, những kẻ tấn công đã lợi dụng lỗ hổng tràn số trong hợp đồng thông minh, thành công đánh cắp một lượng lớn token từ dự án Poolz trên mạng Ethereum, BNB Chain và Polygon, tổng giá trị khoảng 66,5 triệu đô la.
Cuộc tấn công xảy ra vào khoảng 3 giờ 16 phút sáng UTC vào ngày 15 tháng 3 năm 2023. Tài sản bị đánh cắp bao gồm nhiều loại token ERC-20, như MEE, ESNC, DON, ASW, KMON, POOLZ, v.v. Kẻ tấn công sau đó đã đổi một phần token thành BNB, nhưng hiện tại số tiền này vẫn chưa được chuyển đi.
Vấn đề cốt lõi của cuộc tấn công lần này nằm ở hàm CreateMassPools của dự án Poolz. Hàm này ban đầu được sử dụng để tạo hàng loạt các bể thanh khoản và cung cấp thanh khoản ban đầu, nhưng hàm getArraySum bên trong có lỗ hổng tràn số nguyên. Kẻ tấn công đã tạo ra các tham số đầu vào được cấu trúc cẩn thận, khiến kết quả cộng dồn vượt quá phạm vi của uint256, dẫn đến giá trị trả về của hàm là 1.
Tuy nhiên, hàm CreatePool đã sử dụng tham số _StartAmount gốc khi ghi lại thuộc tính của pool, thay vì số lượng token thực tế đã chuyển vào. Điều này đã dẫn đến việc kẻ tấn công chỉ cần chuyển vào 1 token, đã có thể ghi lại một số lượng thanh khoản ban đầu lớn hơn nhiều so với số lượng thực tế. Sau đó, kẻ tấn công đã thực hiện thao tác rút tiền bằng cách gọi hàm withdraw, từ đó đạt được mục đích tấn công.
Để ngăn chặn sự cố như vậy xảy ra một lần nữa, các nhà phát triển được khuyến nghị sử dụng phiên bản mới hơn của Solidity để biên dịch, nhằm tận dụng tính năng kiểm tra tràn số nguyên tích hợp sẵn. Đối với các dự án sử dụng phiên bản Solidity cũ hơn, có thể xem xét việc đưa vào 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 tầm quan trọng của an ninh và kiểm toán mã trong phát triển hợp đồng thông minh không thể bị xem nhẹ. Ngay cả những lỗi toán học có vẻ nhỏ cũng có thể bị kẻ tấn công lợi dụng, gây ra thiệt hại kinh tế lớ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.
9 thích
Phần thưởng
9
5
Đăng lại
Chia sẻ
Bình luận
0/400
TrustMeBro
· 08-10 11:16
Hì hì, chỉ là một ít tiền, cái tiếp theo.
Xem bản gốcTrả lời0
DeFiAlchemist
· 08-10 11:15
*điều chỉnh các biểu đồ huyền bí* một giao thức lại giảm xuống dưới phép toán tối tăm... các con số không bao giờ nói dối
Poolz đã bị tấn công tràn số học, thiệt hại 665.000 đô la Mỹ
Dự án Poolz gặp sự cố tấn công tràn số học, thiệt hại khoảng 66,5 triệu đô la Mỹ
Gần đây, một sự cố an ninh liên quan đến dự án đa chuỗi Poolz đã thu hút sự chú ý trong ngành. Theo dữ liệu giám sát blockchain, những kẻ tấn công đã lợi dụng lỗ hổng tràn số trong hợp đồng thông minh, thành công đánh cắp một lượng lớn token từ dự án Poolz trên mạng Ethereum, BNB Chain và Polygon, tổng giá trị khoảng 66,5 triệu đô la.
Cuộc tấn công xảy ra vào khoảng 3 giờ 16 phút sáng UTC vào ngày 15 tháng 3 năm 2023. Tài sản bị đánh cắp bao gồm nhiều loại token ERC-20, như MEE, ESNC, DON, ASW, KMON, POOLZ, v.v. Kẻ tấn công sau đó đã đổi một phần token thành BNB, nhưng hiện tại số tiền này vẫn chưa được chuyển đi.
Vấn đề cốt lõi của cuộc tấn công lần này nằm ở hàm CreateMassPools của dự án Poolz. Hàm này ban đầu được sử dụng để tạo hàng loạt các bể thanh khoản và cung cấp thanh khoản ban đầu, nhưng hàm getArraySum bên trong có lỗ hổng tràn số nguyên. Kẻ tấn công đã tạo ra các tham số đầu vào được cấu trúc cẩn thận, khiến kết quả cộng dồn vượt quá phạm vi của uint256, dẫn đến giá trị trả về của hàm là 1.
Tuy nhiên, hàm CreatePool đã sử dụng tham số _StartAmount gốc khi ghi lại thuộc tính của pool, thay vì số lượng token thực tế đã chuyển vào. Điều này đã dẫn đến việc kẻ tấn công chỉ cần chuyển vào 1 token, đã có thể ghi lại một số lượng thanh khoản ban đầu lớn hơn nhiều so với số lượng thực tế. Sau đó, kẻ tấn công đã thực hiện thao tác rút tiền bằng cách gọi hàm withdraw, từ đó đạt được mục đích tấn công.
Để ngăn chặn sự cố như vậy xảy ra một lần nữa, các nhà phát triển được khuyến nghị sử dụng phiên bản mới hơn của Solidity để biên dịch, nhằm tận dụng tính năng kiểm tra tràn số nguyên tích hợp sẵn. Đối với các dự án sử dụng phiên bản Solidity cũ hơn, có thể xem xét việc đưa vào 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 tầm quan trọng của an ninh và kiểm toán mã trong phát triển hợp đồng thông minh không thể bị xem nhẹ. Ngay cả những lỗi toán học có vẻ nhỏ cũng có thể bị kẻ tấn công lợi dụng, gây ra thiệt hại kinh tế lớn.