Nhịp khối mà BlockBeats hiểu, được phát hành bởi blog chính thức của Ethereum Foundation News, ngôn ngữ hợp đồng thông minh Solidity và nhóm bảo mật đã đưa ra thông báo cho biết có một lỗ hổng trong mảng lưu trữ Solidity.
Theo thông báo, Các lỗi đã tồn tại trong trình biên dịch từ lâu và đến nay mới được phát hiện, mặc dù các hợp đồng chứa chúng có thể sẽ không thành công khi thử nghiệm.
Daenam Kim đã tìm thấy một vấn đề trong đó dữ liệu không hợp lệ được lưu trữ trong một chuỗi nối với một mảng số nguyên đã ký. Lỗi này đã tồn tại kể từ phiên bản 0.4.7 và nhóm bảo mật coi đây là lỗi nghiêm trọng hơn trong hai lỗi. Các mảng này có thể gây hỏng dữ liệu nếu chúng sử dụng số nguyên âm trong một số trường hợp nhất định, do đó lỗi sẽ dễ dàng được phát hiện.
Thông qua tiền thưởng lỗi Ethereum Gold chương trình, nhóm đã nhận được báo cáo về lỗ hổng trong bộ mã hóa ABI thử nghiệm mới (được gọi là ABIEncodeV2). Bộ mã hóa ABI mới vẫn được đánh dấu là thử nghiệm, nhưng vì nó đã có trên mạng chính nên đây vẫn là một vấn đề cần được giải quyết. Cảm ơn Lin Mingchuanvì đã phát hiện và sửa lỗi này!
Phiên bản 0.5.10 bao gồm các bản sửa lỗi. Tại thời điểm này, chúng tôi không có kế hoạch phát hành bản sửa lỗi cho phiên bản cũ 0.4. Cả hai lỗi đều phải dễ dàng được nhìn thấy trong các thử nghiệm liên quan đến các đường dẫn mã có liên quan.
Nếu bạn đã triển khai Hợp đồng những người sử dụng mảng số nguyên có dấu trong bộ lưu trữ và cấp phát trực tiếp cần lưu ý lỗi này.
Một mảng hằng chứa ít nhất một giá trị âm (x = [-1, -2, -3]) hoặc một mảng hiện có thuộc loại số nguyên có dấu khác, điều này sẽ khiến dữ liệu trong mảng bị hỏng khi lưu trữ .
Làm cách nào để kiểm tra xem hợp đồng có dễ bị tấn công hay không?
Nếu Bằng cách sử dụng mảng số nguyên có dấu trong bộ lưu trữ, sau đó bạn có thể thử chạy thử nghiệm trong đó các giá trị âm được sử dụng. Kết quả phải là giá trị được lưu trữ thực tế là dương chứ không phải âm.
Mảng lưu trữ có thể là từ phân bổ mảng khác nhau của loại. Trong quá trình sao chép và gán, chuyển đổi kiểu được thực hiện trên mỗi phần tử.
Mảng ABIEncodingV2 Lỗi
Nếu bạn đã triển khai các hợp đồng sử dụng bộ mã hóa ABI thử nghiệm V2 thì các hợp đồng này có thể bị ảnh hưởng. Điều này có nghĩa là chỉ những hợp đồng sử dụng lệnh sau trong mã nguồn của họ mới bị ảnh hưởng:
thử nghiệm pragma ABIEncodingV2;
Lỗi này chỉ xảy ra khi đáp ứng tất cả các điều kiện sau Will xuất hiện:
Chứa một mảng Hoặc dữ liệu của cấu trúc được gửi trực tiếp đến lệnh gọi hàm bên ngoài, abi.encode hoặc không có ứng dụng dữ liệu sự kiện (bộ nhớ) cục bộ được phân bổ trước.
Dữ liệu chứa một mảng cấu trúc hoặc một kích thước cố định Mảng (nghĩa là ít nhất là mảng hai chiều).
Hậu quả có thể xảy ra
Tất nhiên, các lỗi sẽ gây ra nhiều hậu quả khác nhau trong luồng kiểm soát chương trình, nhưng chúng tôi dự đoán được điều này dẫn đến thất bại nhiều hơn là sự sẵn có.
Khi lỗi này được kích hoạt, các tham số bị lỗi của lệnh gọi phương thức sẽ được gửi đến các hợp đồng khác trong một số trường hợp.
Chào mừng bạn tham gia cộng đồng chính thức của BlockBeats:
Nhóm Telegram đăng ký: https://t.me/theblockbeats
Nhóm Telegram thảo luận: https://t.me/BlockBeats_App
Tài khoản Twitter chính thức: https://twitter.com/BlockBeatsAsia