Lỗ hổng lưu trữ tạm thời dẫn đến việc đánh cắp tài sản trị giá 300.000 đô la
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 Ethereum đã bị tấn công, gây thiệt hại hơn 300.000 đô la tài sản. Đội ngũ an ninh đã thực hiện phân tích sâu về sự kiện này, và hiện tại chia sẻ kết quả như sau:
Bối cảnh
Phiên bản Solidity 0.8.24 đã giới thiệu tính năng lưu trữ tạm thời dựa trên EIP-1153. Đây là một vị trí lưu trữ dữ liệu mới, nhằm cung cấp cho các nhà phát triển một phương pháp lưu trữ tạm thời hiệu quả về chi phí và có hiệu lực trong suốt giao dịch. Lưu trữ tạm thời được thực hiện thông qua hai lệnh mới TSTORE và TLOAD trong EVM, với đặc điểm chi phí gas thấp, tính bền vững trong giao dịch và tự động xóa.
Nguyên nhân tấn công
Nguyên nhân cơ bản của sự kiện này là giá trị được sử dụng trong hàm tstore để lưu trữ tạm thời không được xóa sau khi kết thúc cuộc gọi hàm. Kẻ tấn công đã lợi dụng đặc điểm này để tạo ra các địa chỉ độc hại cụ thể, vượt qua kiểm tra quyền và chuyển tiền.
Các bước tấn công
Kẻ tấn công tạo ra hai token độc hại A và B, và tạo pool cho hai token này trên một DEX và tiêm thanh khoản.
Kẻ tấn công gọi hàm initialize của hợp đồng Vault, 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.
Kẻ tấn công gọi hàm mint của hợp đồng Vault, gửi vào mã nợ B để đúc mã đòn bẩy. Trong quá trình này, địa chỉ pool DEX và số lượng đúc được lưu trữ tạm thời.
Kẻ tấn công tạo ra 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.
Kẻ tấn công gọi hàm callback của hợp đồng Vault thông qua hợp đồng độc hại để chuyển token. Do giá trị trong bộ nhớ tạm thời không được xóa, dẫn đến việc kiểm tra danh tính bị vượt qua sai.
Cuối cùng, kẻ tấn công gọi hàm callback của hợp đồng Vault thông qua việc tấn công hợp đồng (token A), rút các token khác (như WBTC, WETH) để thu lợi.
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 và 119,871 WETH. WBTC đã được đổi thành 63,5596 WETH, USDC đã được đổi thành 9,7122 WETH. Sau đó, tổng cộng 193,1428 WETH đã được chuyển vào một nền tảng ẩn danh nào đó. Nguồn vốn ban đầu của kẻ tấn công đến từ 0,3 ETH được chuyển vào từ nền tảng đó.
Tóm tắt
Cuộc tấn công lần này tập trung vào việc kẻ tấn công lợi dụng đặc tính của bộ nhớ tạm thời giữ nguyên trong suốt quá trình giao dịch, đã vượt qua xác thực quyền truy cập của hàm gọi lại. Đề nghị các bên dự án ngay lập tức sử dụng tstore(key, 0) để xóa giá trị trong bộ nhớ tạm thời ngay sau khi hàm gọi kết thúc dựa trên logic kinh doanh. Đồng thời, cần tăng cường kiểm toán mã hợp đồng và thử nghiệm an ninh để ngăn chặn các tình huống tương tự xảy ra.
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.
6 thích
Phần thưởng
6
7
Chia sẻ
Bình luận
0/400
VitaliksTwin
· 5giờ trước
Đợt này tổng hợp vẫn tốn gas.
Xem bản gốcTrả lời0
CountdownToBroke
· 5giờ trước
30w lại có một anh gửi
Xem bản gốcTrả lời0
0xLuckbox
· 5giờ trước
Lại bị đánh cắp ba trăm ngàn~hợp đồng thông minh bảo an toàn nhé
Xem bản gốcTrả lời0
OnchainGossiper
· 5giờ trước
Lại bị khai thác lỗ hổng, ngốc quá đi.
Xem bản gốcTrả lời0
GateUser-0717ab66
· 5giờ trước
30w cũng dám đề cập
Xem bản gốcTrả lời0
VibesOverCharts
· 5giờ trước
30w? Chỉ là phí giao dịch một ngày.
Xem bản gốcTrả lời0
DefiPlaybook
· 5giờ trước
Dựa trên mẫu dữ liệu, lỗ hổng lưu trữ này dẫn đến tỷ lệ tổn thất lên đến 86,3%, hãy cảnh giác!
Lỗ hổng lưu trữ tạm thời gây thiệt hại 300.000 USD cho dự án giao dịch ký quỹ Ethereum
Lỗ hổng lưu trữ tạm thời dẫn đến việc đánh cắp tài sản trị giá 300.000 đô la
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 Ethereum đã bị tấn công, gây thiệt hại hơn 300.000 đô la tài sản. Đội ngũ an ninh đã thực hiện phân tích sâu về sự kiện này, và hiện tại chia sẻ kết quả như sau:
Bối cảnh
Phiên bản Solidity 0.8.24 đã giới thiệu tính năng lưu trữ tạm thời dựa trên EIP-1153. Đây là một vị trí lưu trữ dữ liệu mới, nhằm cung cấp cho các nhà phát triển một phương pháp lưu trữ tạm thời hiệu quả về chi phí và có hiệu lực trong suốt giao dịch. Lưu trữ tạm thời được thực hiện thông qua hai lệnh mới TSTORE và TLOAD trong EVM, với đặc điểm chi phí gas thấp, tính bền vững trong giao dịch và tự động xóa.
Nguyên nhân tấn công
Nguyên nhân cơ bản của sự kiện này là giá trị được sử dụng trong hàm tstore để lưu trữ tạm thời không được xóa sau khi kết thúc cuộc gọi hàm. Kẻ tấn công đã lợi dụng đặc điểm này để tạo ra các địa chỉ độc hại cụ thể, vượt qua kiểm tra quyền và chuyển tiền.
Các bước tấn công
Kẻ tấn công tạo ra hai token độc hại A và B, và tạo pool cho hai token này trên một DEX và tiêm thanh khoản.
Kẻ tấn công gọi hàm initialize của hợp đồng Vault, 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.
Kẻ tấn công gọi hàm mint của hợp đồng Vault, gửi vào mã nợ B để đúc mã đòn bẩy. Trong quá trình này, địa chỉ pool DEX và số lượng đúc được lưu trữ tạm thời.
Kẻ tấn công tạo ra 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.
Kẻ tấn công gọi hàm callback của hợp đồng Vault thông qua hợp đồng độc hại để chuyển token. Do giá trị trong bộ nhớ tạm thời không được xóa, dẫn đến việc kiểm tra danh tính bị vượt qua sai.
Cuối cùng, kẻ tấn công gọi hàm callback của hợp đồng Vault thông qua việc tấn công hợp đồng (token A), rút các token khác (như WBTC, WETH) để thu lợi.
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 và 119,871 WETH. WBTC đã được đổi thành 63,5596 WETH, USDC đã được đổi thành 9,7122 WETH. Sau đó, tổng cộng 193,1428 WETH đã được chuyển vào một nền tảng ẩn danh nào đó. Nguồn vốn ban đầu của kẻ tấn công đến từ 0,3 ETH được chuyển vào từ nền tảng đó.
Tóm tắt
Cuộc tấn công lần này tập trung vào việc kẻ tấn công lợi dụng đặc tính của bộ nhớ tạm thời giữ nguyên trong suốt quá trình giao dịch, đã vượt qua xác thực quyền truy cập của hàm gọi lại. Đề nghị các bên dự án ngay lập tức sử dụng tstore(key, 0) để xóa giá trị trong bộ nhớ tạm thời ngay sau khi hàm gọi kết thúc dựa trên logic kinh doanh. Đồng thời, cần tăng cường kiểm toán mã hợp đồng và thử nghiệm an ninh để ngăn chặn các tình huống tương tự xảy ra.