Poolz bị tấn công tràn số học, thiệt hại lên đến 665.000 USD
Vào rạng sáng ngày 15 tháng 3, Poolz đã bị tấn công trên mạng Ethereum, Binance Smart Chain và Polygon, dẫn đến việc nhiều loại token bị đánh cắp, tổng giá trị khoảng 665.000 USD. Kẻ tấn công đã lợi dụng lỗ hổng tràn số học trong hợp đồng thông minh, thành công trong việc lấy được một lượng lớn token.
Kẻ tấn công tạo ra các bể thanh khoản hàng loạt bằng cách gọi hàm CreateMassPools. Hàm này có một lỗ hổng nghiêm trọng cho phép kẻ tấn công vượt qua các kiểm tra thanh khoản bình thường thông qua các tham số được cấu trúc cẩn thận. Cụ thể, kẻ tấn công đã lợi dụng vấn đề tràn số nguyên trong hàm getArraySum.
Trong quá trình tấn công, hacker đầu tiên đã đổi một lượng nhỏ token MNZ trên một sàn giao dịch phi tập trung nào đó. Sau đó, họ đã gọi hàm CreateMassPools có lỗ hổng. Hàm này lẽ ra được sử dụng để tạo hàng loạt các pool thanh khoản và cung cấp thanh khoản ban đầu, nhưng do khuyết điểm của hàm getArraySum, kẻ tấn công đã có thể tiêm thanh khoản giả lớn hơn nhiều so với lượng thực tế đã chuyển vào.
Hàm getArraySum trong quá trình cộng dồn mảng _StartAmount truyền vào, do vấn đề tràn, giá trị trả về cuối cùng trở thành 1. Tuy nhiên, hàm CreatePool vẫn sử dụng giá trị _StartAmount gốc để ghi lại. Đ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 lượng thanh khoản giả mạo lớn trong hệ thống.
Sau khi hoàn thành bước này, kẻ tấn công đơn giản gọi hàm withdraw để rút token, hoàn thành toàn bộ quá trình tấn công.
Sự kiện này một lần nữa làm nổi bật tầm quan trọng của việc đảm bảo an toàn cho các phép toán số học trong hợp đồng thông minh. Để ngăn chặn các vấn đề tương tự, các nhà phát triển nên xem xét việc sử dụng phiên bản mới hơn của trình biên dịch Solidity, những phiên bản này có thể tự động thực hiện kiểm tra tràn trong giai đoạn biên dịch. Đối với các dự án sử dụng phiên bản Solidity cũ, nên tích hợp thư viện SafeMath của OpenZeppelin để xử lý vấn đề tràn số nguyên.
Sự kiện tấn công này nhắc nhở chúng ta rằng, trong hệ sinh thái blockchain, ngay cả những lỗ hổng mã nhỏ nhất cũng có thể dẫn đến tổn thất kinh tế nghiêm trọng. Do đó, việc kiểm tra mã một cách kỹ lưỡng và cập nhật bảo mật liên tục là rất quan trọng để bảo vệ tài sản của người dùng.
Xem bản gốc
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
Poolz bị tấn công tràn số học, thiệt hại 66,5 triệu USD
Poolz bị tấn công tràn số học, thiệt hại lên đến 665.000 USD
Vào rạng sáng ngày 15 tháng 3, Poolz đã bị tấn công trên mạng Ethereum, Binance Smart Chain và Polygon, dẫn đến việc nhiều loại token bị đánh cắp, tổng giá trị khoảng 665.000 USD. Kẻ tấn công đã lợi dụng lỗ hổng tràn số học trong hợp đồng thông minh, thành công trong việc lấy được một lượng lớn token.
Kẻ tấn công tạo ra các bể thanh khoản hàng loạt bằng cách gọi hàm CreateMassPools. Hàm này có một lỗ hổng nghiêm trọng cho phép kẻ tấn công vượt qua các kiểm tra thanh khoản bình thường thông qua các tham số được cấu trúc cẩn thận. Cụ thể, kẻ tấn công đã lợi dụng vấn đề tràn số nguyên trong hàm getArraySum.
Trong quá trình tấn công, hacker đầu tiên đã đổi một lượng nhỏ token MNZ trên một sàn giao dịch phi tập trung nào đó. Sau đó, họ đã gọi hàm CreateMassPools có lỗ hổng. Hàm này lẽ ra được sử dụng để tạo hàng loạt các pool thanh khoản và cung cấp thanh khoản ban đầu, nhưng do khuyết điểm của hàm getArraySum, kẻ tấn công đã có thể tiêm thanh khoản giả lớn hơn nhiều so với lượng thực tế đã chuyển vào.
Hàm getArraySum trong quá trình cộng dồn mảng _StartAmount truyền vào, do vấn đề tràn, giá trị trả về cuối cùng trở thành 1. Tuy nhiên, hàm CreatePool vẫn sử dụng giá trị _StartAmount gốc để ghi lại. Đ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 lượng thanh khoản giả mạo lớn trong hệ thống.
Sau khi hoàn thành bước này, kẻ tấn công đơn giản gọi hàm withdraw để rút token, hoàn thành toàn bộ quá trình tấn công.
Sự kiện này một lần nữa làm nổi bật tầm quan trọng của việc đảm bảo an toàn cho các phép toán số học trong hợp đồng thông minh. Để ngăn chặn các vấn đề tương tự, các nhà phát triển nên xem xét việc sử dụng phiên bản mới hơn của trình biên dịch Solidity, những phiên bản này có thể tự động thực hiện kiểm tra tràn trong giai đoạn biên dịch. Đối với các dự án sử dụng phiên bản Solidity cũ, nên tích hợp thư viện SafeMath của OpenZeppelin để xử lý vấn đề tràn số nguyên.
Sự kiện tấn công này nhắc nhở chúng ta rằng, trong hệ sinh thái blockchain, ngay cả những lỗ hổng mã nhỏ nhất cũng có thể dẫn đến tổn thất kinh tế nghiêm trọng. Do đó, việc kiểm tra mã một cách kỹ lưỡng và cập nhật bảo mật liên tục là rất quan trọng để bảo vệ tài sản của người dùng.