Lỗ hổng lưu trữ tạm thời gây ra cuộc tấn công 300.000 USD vào dự án on-chain, chuyên gia phân tích đề xuất biện pháp phòng ngừa.

robot
Đang tạo bản tóm tắt

Phân tích sự kiện tấn công 300.000 đô la trên chuỗi do lỗ hổng lưu trữ tạm thời gây ra

Vào ngày 30 tháng 3 năm 2025, một dự án giao dịch đòn bẩy trên chuỗi bị tấn công, gây thiệt hại tài sản lên tới hơn 300.000 đô la. Đội ngũ an ninh đã tiến hành phân tích sâu về sự kiện này, và dưới đây là kết quả được chia sẻ.

Bối cảnh

Cuộc tấn công xảy ra trên mạng Ethereum, mục tiêu là một dự án giao dịch đòn bẩy. Kẻ tấn công đã tận dụng một lỗ hổng liên quan đến lưu trữ tạm thời trong hợp đồng của dự án.

Di sản chết người: Một vụ cướp 300.000 đô la trên chuỗi do lưu trữ tạm thời gây ra

Kiến thức nền

Phiên bản Solidity 0.8.24 đã giới thiệu tính năng lưu trữ tạm thời (transient storage), đây là một vị trí lưu trữ dữ liệu mới. Các đặc điểm chính của nó bao gồm:

  • Chi phí gas thấp: TSTORE và TLOAD tiêu tốn cố định 100 gas
  • Tính bền vững trong giao dịch: Dữ liệu vẫn có hiệu lực trong suốt thời gian giao dịch.
  • Tự động xóa: Tự động đặt lại về không sau khi giao dịch kết thúc

Di chứng chết người: Một vụ cướp 300.000 đô la trên chuỗi do lưu trữ tạm thời gây ra

Nguyên nhân lỗ hổng

Nguyên nhân cơ bản của cuộc tấn công này là giá trị được lưu trữ tạm thời bằng tstore trong hợp đồng không được xóa sau khi kết thúc cuộc gọi hàm. Điều này cho phép kẻ tấn công tận dụng đặc điểm này để tạo ra địa chỉ cụ thể, vượt qua kiểm tra quyền và chuyển ra token.

Di chứng chết người: Một vụ cướp 300.000 đô la trên chuỗi do lưu trữ tạm thời gây ra

Quy trình tấn công

  1. Kẻ tấn công tạo ra hai mã thông báo độc hại A và B, và tạo một bể thanh khoản cho chúng trên một DEX nào đó.
  2. Gọi hàm initialize của hợp đồng mục tiêu, sử dụng token A làm tài sản thế chấp và token B làm token nợ để tạo ra thị trường giao dịch đòn bẩy.
  3. Gọi hàm mint để gửi B token để đúc token đòn bẩy, trong quá trình này đã thực hiện hai thao tác lưu tạm thời.
  4. Tạo một hợp đồng độc hại có địa chỉ giống với giá trị lưu trữ tạm thời lần thứ hai.
  5. Thông qua hợp đồng độc hại gọi hàm callback của hợp đồng mục tiêu, vượt qua kiểm tra quyền để chuyển token.
  6. Cuối cùng, thông qua hợp đồng tấn công (token A) gọi lại hàm callback để chuyển các token khác (như WBTC, WETH) ra ngoài để thu lợi.

Diễn biến chết người: Một vụ cướp 300.000 đô la trên chuỗi do bộ nhớ tạm thời gây ra

Di sản chết người: Một vụ cướp 300.000 đô la trên chuỗi do lưu trữ tạm thời gây ra

Di sản chết người: Một vụ cướp 300.000 đô la trên chuỗi do bộ nhớ tạm gây ra

Di sản chết người: Một vụ cướp 300.000 USD trên chuỗi do bộ nhớ tạm thời gây ra

Di sản chết người: Một vụ cướp 300.000 đô la trên chuỗi do bộ nhớ tạm thời gây ra

Di sản chết người: Một vụ cướp 300.000 đô la trên chuỗi do lưu trữ tạm thời gây ra

Di sản chết người: Một cuộc cướp 300.000 đô la trên chuỗi do bộ nhớ tạm thời gây ra

Di sản chết người: Một vụ cướp 300.000 USD trên chuỗi do lưu trữ tạm thời gây ra

Diễn biến chết người: Một vụ cướp 300.000 đô la trên chuỗi do bộ nhớ tạm thời gây ra

Di sản chết người: Một vụ cướp 300.000 đô la trên chuỗi do bộ nhớ tạm thời gây ra

Di chứng chết người: Một vụ cướp 300.000 đô la trên chuỗi do lưu trữ tạm thời gây ra

Di sản chết người: Một vụ cướp 300.000 USD trên chuỗi do lưu trữ tạm thời gây ra

Phân tích dòng tiền

Kẻ tấn công đã đánh cắp khoảng 300.000 đô la tài sản, bao gồm:

  • 17,814.8626 USDC
  • 1.4085 WBTC
  • 119.871 WETH

Sau đó, kẻ tấn công đã đổi WBTC và USDC thành WETH, cuối cùng chuyển 193.1428 WETH vào một dịch vụ trộn coin nào đó.

Vốn ban đầu của kẻ tấn công (0.3 ETH) cũng đến từ dịch vụ trộn coin này.

Di sản chết người: Một vụ cướp 300.000 đô la trên chuỗi do lưu trữ tạm thời gây ra

Di sản chết người: Một vụ cướp 300.000 đô la trên chuỗi do lưu trữ tạm thời gây ra

Tóm tắt và đề xuất

Cuộc tấn công lần này chủ yếu dựa vào việc lợi dụng đặc tính của bộ nhớ tạm thời giữ giá trị không thay đổi trong suốt thời gian giao dịch, từ đó vượt qua được xác thực quyền hạn của hợp đồng. Để ngăn chặn các cuộc tấn công tương tự, các dự án nên:

  1. Ngay sau khi kết thúc cuộc gọi hàm, hãy sử dụng tstore(key, 0) để xóa giá trị trong bộ nhớ tạm thời.
  2. Tăng cường kiểm tra mã hợp đồng và thử nghiệm an ninh.
  3. Cẩn thận sử dụng các đặc điểm ngôn ngữ mới được giới thiệu, hiểu rõ các rủi ro tiềm ẩn của nó.
WBTC0.77%
Xem bản gốc
Trang này có thể chứa nội dung của bên thứ ba, được cung cấp chỉ nhằm mục đích thông tin (không phải là tuyên bố/bảo đảm) và không được coi là sự chứng thực cho quan điểm của Gate hoặc là lời khuyên về tài chính hoặc chuyên môn. Xem Tuyên bố từ chối trách nhiệm để biết chi tiết.
  • Phần thưởng
  • 6
  • Chia sẻ
Bình luận
0/400
PensionDestroyervip
· 6giờ trước
又有 đồ ngốc寄了
Xem bản gốcTrả lời0
TestnetFreeloadervip
· 6giờ trước
Ôi, làm thế nào mà lại có thể miễn phí như vậy chứ, ngay cả dự án của mình cũng không giữ được.
Xem bản gốcTrả lời0
LootboxPhobiavip
· 7giờ trước
Hỏng rồi hỏng rồi, lại có anh em dẫm phải bẫy rồi.
Xem bản gốcTrả lời0
BearMarketMonkvip
· 7giờ trước
Làm thịt cừu cũng đã lấy đi hợp đồng lỗ hổng.
Xem bản gốcTrả lời0
DeFiAlchemistvip
· 7giờ trước
ah, một con cừu hiến tế khác cho nghệ thuật đen tối của việc khai thác hợp đồng thông minh... *điều chỉnh quả cầu pha lê* những lỗ hổng lưu trữ thoáng qua này giống như các vết nứt trong con dấu hermetic của giao thức giả kim thuật
Xem bản gốcTrả lời0
TestnetNomadvip
· 7giờ trước
Thảm rồi, lại bị hái một đợt nữa.
Xem bản gốcTrả lời0
  • Ghim
Giao dịch tiền điện tử mọi lúc mọi nơi
qrCode
Quét để tải xuống ứng dụng Gate
Cộng đồng
Tiếng Việt
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)