CVE-2025-54070 in openzeppelin-contracts
Tóm tắt
Bởi VulDB • 28/05/2026
OpenZeppelin Contracts là một thư viện dành cho việc phát triển hợp đồng thông minh an toàn. Bắt đầu từ phiên bản 5.2.0 và trước phiên bản 5.4.0, hàm `lastIndexOf(bytes,byte,uint256)` của thư viện `Bytes.sol` có thể truy cập vào bộ nhớ chưa được khởi tạo khi hai điều kiện sau đồng thời thỏa mãn: 1) độ dài bộ đệm được cung cấp là rỗng (tức là `buffer.length == 0`) và vị trí không phải là `2**256 - 1` (tức là `pos != type(uint256).max`). Đối số `pos` có thể được sử dụng để truy cập vào dữ liệu tùy ý nằm ngoài phạm vi của bộ đệm. Điều này có thể dẫn đến việc thao tác hết gas (gas) hoặc trả về một chỉ số không hợp lệ (nằm ngoài bộ đệm rỗng). Việc xử lý kết quả không hợp lệ này để truy cập vào `buffer` sẽ gây ra lỗi revert (hoàn tác) trong điều kiện bình thường. Khi được kích hoạt, hàm sẽ đọc bộ nhớ tại độ lệch `buffer + 0x20 + pos`. Nếu bộ nhớ tại vị trí đó (nằm ngoài `buffer`) khớp với mẫu tìm kiếm, hàm sẽ trả về một chỉ số vượt quá giới hạn thay vì giá trị `type(uint256).max` dự kiến. Điều này tạo ra hành vi không mong muốn, nơi các caller nhận được một chỉ số trông có vẻ hợp lệ nhưng trỏ ra ngoài phạm vi của bộ đệm. Các thao tác truy cập bộ nhớ tiếp theo không kiểm tra giới hạn và sử dụng chỉ số trả về cần xem xét cẩn thận tác động tiềm ẩn tùy thuộc vào cấu hình của chúng. Mã phụ thuộc vào việc hàm này trả về `type(uint256).max` cho các bộ đệm rỗng hoặc sử dụng chỉ số trả về mà không kiểm tra giới hạn có thể thể hiện hành vi không xác định (undefined behavior). Người dùng nên nâng cấp lên phiên bản 5.4.0 để nhận bản vá.
If you want to get best quality of vulnerability data, you may have to visit VulDB.