Theo báo cáo từ công ty bảo mật blockchain Verichains, vụ hack cầu nối Ronin trị giá 10 triệu USD vào ngày 6 tháng 8 bắt nguồn từ một lỗi trong script triển khai nâng cấp.
Nâng cấp này đã vô tình giảm ngưỡng biểu quyết của các trình xác thực xuống 0, cho phép bất kỳ ai rút tiền từ cầu nối mà không cần chữ ký, theo Verichains.
May mắn thay, chủ sở hữu của bot đã trả lại phần lớn số tiền cho đội ngũ Ronin.
Phân tích của Verichains nhấn mạnh những rủi ro tiềm ẩn khi người dùng tương tác với các hợp đồng thông minh có thể nâng cấp. Giao thức này có thể đã mất toàn bộ số tiền nếu kẻ tấn công chi thêm phí gas để tránh bị frontrunner chặn trước.
Ronin Network là một mạng lưới blockchain chuyên dụng cho các trò chơi Web3, nổi bật nhất với Axie Infinity, trò chơi nuôi quái vật để kiếm tiền đã từng có hơn 2 triệu người chơi vào năm 2022. Người chơi trên Ronin sử dụng cầu nối này để chuyển tiền giữa Ethereum và Ronin.
Theo báo cáo của Verichains, cầu nối này dựa vào biến số minimumVoteWeight để ngăn chặn người dùng rút các khoản tiền không thuộc về họ. Mỗi giao dịch cần được ủy quyền bởi số lượng trình xác thực tối thiểu được xác định bởi biến số này. Khi tính toán minimumVoteWeight, hệ thống sử dụng biến số totalWeight làm đầu vào.
Trong các phiên bản trước của cầu nối, totalWeight nằm trong một hợp đồng riêng biệt có tên “MainchainBridgeManager.” Khi các nhà phát triển nâng cấp cầu nối, họ muốn chuyển biến số này vào bộ nhớ nội bộ của cầu nối thay vì để lại trong hợp đồng khác, đòi hỏi việc khởi tạo biến này ngay tại thời điểm triển khai, đảm bảo TotalWeight giữ nguyên giá trị từ phiên bản trước.
Tuy nhiên, đây chính là điểm mà bản nâng cấp gặp trục trặc nghiêm trọng. Theo Verichains, các nhà phát triển Ronin đã viết nhiều hàm khởi tạo khác nhau cho quá trình triển khai, trong đó phiên bản thứ ba chứa mã khởi tạo totalWeight quan trọng. Nhưng trong quá trình triển khai, chỉ phiên bản thứ tư được gọi, khiến totalWeight vẫn ở giá trị mặc định là 0.
Sau bản nâng cấp này, người dùng không còn cần phải cung cấp chữ ký cho các trình xác thực để chứng minh quyền rút tiền của mình. Họ có thể rút tiền “mà không cần chữ ký” vì minimumVoteWeight đã được đặt về 0 do biến số chưa được khởi tạo.
Trong một bài đăng ngày 7 tháng 8 trên X, chuyên gia kiểm toán hợp đồng thông minh Damian Rusinek từ Composable Security đã cung cấp thêm chi tiết về cách thức vụ tấn công diễn ra. Theo Rusinek, kẻ tấn công đã sử dụng chữ ký từ một địa chỉ kết thúc bằng B849f, không nằm trong danh sách các nhà vận hành cầu nối. Tuy nhiên, điều này không thành vấn đề vì “số phiếu tối thiểu của các nhà vận hành đã là 0,” nên chỉ cần “MỘT chữ ký hợp lệ.”
Mặc dù không đi vào chi tiết như Verichains hoặc Rusinek, đội ngũ Ronin đã xác nhận trong một bài đăng ngày 6 tháng 8 rằng sự cố này do bản nâng cấp “gây ra vấn đề khiến cầu nối hiểu sai ngưỡng phiếu bầu cần thiết để rút tiền.”
Dữ liệu blockchain cho thấy giao dịch tấn công này đã bị chặn trước bởi một bot MEV có tên “Frontrunner Yoink,” bot này đã rút thành công hơn 10 triệu USD từ cầu nối. Theo Rusinek, chủ sở hữu bot có thể đã “giả lập thay đổi địa chỉ và số tiền, sử dụng chữ ký của riêng họ.” Sau đó, bot đã thực hiện giao dịch sau khi xác nhận rằng vụ khai thác sẽ thành công.
Chủ sở hữu của Frontrunner Yoink đã trả lại phần lớn số tiền trong cùng ngày, và đội ngũ Ronin cho phép họ giữ lại 500.000 USD như một phần thưởng phát hiện lỗi.
Vụ tấn công ngày 6 tháng 8 là một lời cảnh báo gần kề cho người dùng Ronin. May mắn thay, vụ việc đã bị chặn trước bởi một bot MEV của một hacker mũ trắng trung thực. Tuy nhiên, việc vụ tấn công này gần như đã thành công cho thấy rủi ro tiềm ẩn của các cầu nối cross-chain có khả năng nâng cấp.
Một số mạng lưới cho rằng vấn đề này sẽ được loại bỏ khi các Ethereum layer 2 đạt đến “giai đoạn 2,” nơi mọi nâng cấp đều bị trì hoãn ít nhất bảy ngày. Tuy nhiên, các nhà phê bình cho rằng quá trình đạt đến giai đoạn này đang diễn ra quá chậm và có thể sẽ không bao giờ hoàn thành.
Thạch Sanh
Theo Cointelegraph