Vào ngày 30 tháng 3 năm 2025, giao thức DeFi SIR.trading đã bị hack, gây ra thiệt hại 355.000 đô la tại thời điểm viết bài. Cuộc tấn công này là do lỗi khi thực hiện tối ưu hóa gas bằng cách sử dụng mã lệnh lưu trữ tạm thời Đề xuất cải tiến Ethereum (EIP)-1153 mới .
Tổng quan
Kẻ tấn công: https://etherscan.io/address/0x27defcfa6498f957918f407ed8a58eba2884768c
Hợp đồng dễ bị tấn công: https://etherscan.io/address/0xb91ae2c8365fd45030aba84a4666c4db074e53e7#code
Tấn công giao dịch: https://etherscan.io/tx/0xa05f047ddfdad9126624c4496b5d4a59f961ee7c091e7b4e38cee86f1335736f
Đề xuất cải tiến Ethereum (EIP)-1153 - Mã lệnh lưu trữ tạm thời thêm 2 mã lệnh để thao tác trạng thái có hoạt động gần giống hệt với lưu trữ nhưng bị loại bỏ sau mỗi giao dịch:
TLOAD
lấy một từ 32 byte từ đầu ngăn xếp, coi giá trị này là địa chỉ, lấy từ 32 byte từ bộ nhớ tạm thời tại địa chỉ đó và đẩy giá trị đó lên đầu ngăn xếp.TSTORE
lấy hai word 32 byte từ đầu ngăn xếp. Word ở trên cùng là địa chỉ, và word tiếp theo là giá trị.TSTORE
lưu giá trị tại địa chỉ đã cho trong bộ nhớ tạm thời.
Địa chỉ giống như SLOAD
và SSTORE
. Nghĩa là mỗi địa chỉ 32 byte trỏ đến một từ 32 byte duy nhất.
Chi phí gas cho TSTORE
giống như SSTORE
ấm của khe bẩn (tức là giá trị ban đầu không phải là giá trị mới và không phải là giá trị hiện tại, hiện tại là 100 gas) và chi phí gas của TLOAD
giống như SLOAD
nóng (giá trị đã được đọc trước đó, hiện tại là 100 gas). Chi phí gas không thể ngang bằng với quyền truy cập bộ nhớ do tương tác của bộ lưu trữ tạm thời với việc hoàn nguyên.
Tất cả các giá trị trong bộ lưu trữ tạm thời đều bị loại bỏ khi kết thúc giao dịch, về cơ bản chúng ta có thể sử dụng chúng như một bộ lưu trữ rẻ hơn chỉ tồn tại trong một giao dịch. Một trường hợp sử dụng là Khóa Reentrancy.
Phân tích khai thác
Phần kết luận
Đề xuất cải tiến Ethereum (EIP)-1153 - Mã lệnh lưu trữ tạm thời giới thiệu một cách tuyệt vời để tiết kiệm chi phí gas nhưng với sức mạnh lớn đi kèm với trách nhiệm lớn. Các nhà phát triển hợp đồng thông minh nên hiểu thời gian tồn tại của các biến lưu trữ tạm thời trước khi sử dụng.
Vì bộ nhớ tạm thời được tự động xóa khi kết thúc giao dịch, nên các nhà phát triển hợp đồng thông minh có thể muốn tránh xóa các khe cắm như một phần của lệnh gọi để tiết kiệm gas . Tuy nhiên, điều này có thể ngăn chặn các tương tác tiếp theo với hợp đồng trong cùng một giao dịch (ví dụ trong trường hợp khóa nhập lại) hoặc gây ra các lỗi khác, do đó, các nhà phát triển hợp đồng thông minh nên cẩn thận chỉ để lại các khe cắm lưu trữ tạm thời có giá trị khác không khi các khe cắm đó được dự định sử dụng bởi các lệnh gọi trong tương lai trong cùng một giao dịch . Nếu không, các mã lệnh này hoạt động giống hệt như SSTORE
và SLOAD
, do đó, tất cả các cân nhắc bảo mật thông thường đều được áp dụng, đặc biệt là liên quan đến rủi ro nhập lại .
Trong trường hợp SIR.trading, họ đã không xóa khe 0x1 sau khi sử dụng nó để lưu trữ uniswapPool và amount , đồng thời họ cũng sử dụng lại 0x1 cho amount , dẫn đến việc khai thác.
Các nhà phát triển hợp đồng thông minh cần hiểu rõ các tính năng mới, đặc biệt là các thay đổi đột phá, trước khi sử dụng chúng. Luôn nhớ xem xét kỹ lưỡng các EIP , bao gồm tất cả các cân nhắc về bảo mật, khi triển khai chúng.
Ngoài ra, chúng tôi khuyến nghị mạnh mẽ nên tiến hành Kiểm định bảo mật , không chỉ đối với phiên bản phát hành đầu tiên mà còn đối với bất kỳ tính năng mới nào được thêm vào trong tương lai. Vì quá trình nâng cấp có thể gây ra nhiều vấn đề khác nhau nên cũng cần được kiểm tra kỹ lưỡng.