Nhà phát triển Ethereum xác định một lỗi trong ứng dụng Besu Ethereum có thể dẫn đến “sự thất bại đồng thuận trong các mạng có nhiều triển khai EVM”.
Gary Schulte đã báo cáo vấn đề với kho lưu trữ Hyperledger GitHub và được tìm thấy bởi Martin Holst Swende. Điều này được hiểu rằng “không có mạng lưới sản xuất nào có các giao dịch có thể gây ra thất bại này”.
Lỗi được xác định trong quá trình xem xét mã Hợp nhất
Swende ghi lại rằng anh ấy đã tìm thấy lỗi trong khi “làm một số #ethereum vui mừng để chuẩn bị cho #TheMerge. ” Trả lời một nhà báo CryptoSlate, Swende nói rằng người dùng đang chạy một nút Besu sẽ bị mắc kẹt và “không thể theo dõi chuỗi canon.” Hơn nữa, bất kỳ “mạng do riêng ai thống trị đều có thể bị chặn lại trong đường đi của nó”.
Họ sẽ bị mắc kẹt, không thể tuân theo chuỗi quy tắc. Và / hoặc, bất kỳ mạng nào bị chi phối bởi người dùng (non-eth-mainnet) có thể đã bị dừng lại trong đường đi của nó.
– MH (((Swende))) (@mhswende) 27 tháng 9 năm 2022
Các Besu client là client phổ biến thứ hai trên mạng Ethereum sau Geth. Theo dữ liệu có sẵn trên ethernodes.org, ứng dụng khách Besu được sử dụng bởi 7,81% khách hàng của mạng chính Ethereum.
Các phiên bản máy khách Besu dễ bị tổn thương
Phiên bản 22.7.1 của ứng dụng Besu có một bản sửa lỗi để đảm bảo “vượt quá gas sẽ không được phân bổ cho các cuộc gọi giao dịch nội bộ và điều chỉnh phần vượt quá gas lỗi. ”
Các phiên bản trước 22.1.3 cũng sẽ “ngăn chặn việc thực thi không chính xác”, tuy nhiên, mạng chính Ethereum yêu cầu các tính năng khác chỉ có sẵn trong các phiên bản mới hơn. Khách hàng phiên bản 22.4.0 đến 22.7.0 hiện được coi là dễ bị ảnh hưởng bởi gas sâu bọ.
Do đó, người dùng máy khách Besu trên mạng chính phải nâng cấp lên phiên bản vá.
Tác động và giải quyết
Danno Ferrin đã tạo ra một bài viết đầy đủ về vấn đề này trong một bài báo trên Hackmd được xuất bản vào ngày 21 tháng 9. Phân tích của Ferrin nói rằng
“Một lỗ hổng trong việc xử lý dữ liệu chưa được ký như dữ liệu đã ký, một hợp đồng thông minh được mã hóa đúng cách có thể tạo ra một lệnh gọi hàm sẽ trả về nhiều hơn gas hơn đã được thông qua. “
Thông tin kỹ thuật khác về lỗi có thể được tìm thấy trong Bài của Ferrin. Tuy nhiên, điểm rút ra chính là lỗi đã được giải quyết mà không có bất kỳ sự cố nào trên mạng chính Ethereum. Để một kẻ xấu khai thác lỗi một cách ác ý, họ sẽ phải hành động một cách chính xác.
“Để nâng điều này lên thành lỗi ngắt chuỗi, cần có một cuộc gọi có chủ ý, liên quan đến một số tương tác với EIP-150 Quy tắc “tất cả trừ một thứ 64” và dành một phần gas cho hợp đồng gọi điện. “
Nếu lỗi không được tìm thấy, bất kỳ chuỗi nào có sự tham gia cao từ khách hàng Besu đều có thể trải qua một hợp đồng thông minh “vòng lặp vô hạn”, theo đó hợp đồng sẽ “thực sự thực thi mãi mãi”.
Ferrin tuyên bố rằng fuzzing cho phép các nhà phát triển xác định và vá lỗi mà không có vấn đề gì. Fuzzing là một phương pháp được các nhà phát triển phần mềm sử dụng “liên quan đến việc cung cấp dữ liệu không hợp lệ, không mong đợi hoặc ngẫu nhiên làm đầu vào cho một chương trình máy tính.”
“Bài học lớn nhất được chứng minh bằng cách khai thác này là việc so sánh dữ liệu theo dõi trong một quá trình thực thi hấp dẫn bắt được nhiều lỗi hơn là chỉ so sánh kết quả cuối cùng.”
Sự dư thừa gas lỗi đã trở thành một sự kiện không phải do sự siêng năng của các nhà phát triển Ethereum cống hiến hết mình để bảo vệ mạng. Tuy nhiên, tác hại tiềm ẩn mà nó có thể gây ra cho thấy sự phức tạp đằng sau việc thực hiện hợp nhất mà không có vấn đề gì.
Lỗi đã được vá trong phiên bản 22.7.1 bằng cách sử dụng “một phương pháp chuyển đổi khác nhau điều đó sẽ “kẹp” các giá trị tràn thành giá trị dự kiến tối đa để tránh các vấn đề về bản dịch đã ký. ” Ferrin nhận xét rằng người dùng đang chạy các nút trong phạm vi dễ bị tấn công nên cập nhật lên phiên bản mới nhất.
Theo Cryptoslate