Phân tích sự kiện tấn công 300.000 USD trên chuỗi do lỗ hổng lưu trữ tạm thời gây ra
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, dẫn đến thiệt hại tài sản trên 300.000 đô la. Đội ngũ an ninh đã tiến hành phân tích sâu về sự kiện này, hiện chia sẻ kết quả như sau:
Kiến thức nền tảng
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 bao gồm:
Chi phí gas thấp: Chi phí gas của các thao tác TSTORE và TLOAD được cố định là 100.
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: Sau khi giao dịch kết thúc, bộ nhớ tạm thời tự động được thiết lập lại về không.
Nguyên nhân tấn công
Nguyên nhân cơ bản của sự kiện lần này là giá trị được sử dụng trong tstore để lưu trữ tạm thời trong hàm 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, xây dựng địa chỉ độc hại cụ thể để vượt qua kiểm tra quyền truy cập, từ đó chuyển token ra ngoài.
Các bước tấn công
Kẻ tấn công tạo ra hai mã thông báo độc hại A và B, và tạo ra bể thanh khoản cho hai mã thông báo này trên một DEX.
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 tài sản 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 token nợ B để đúc token đòn bẩy. Trong quá trình này, địa chỉ pool DEX được lưu trữ tạm thời lần đầu tiên.
Khi bể DEX thực hiện thao tác hoán đổi, sẽ gọi lại hàm uniswapV3SwapCallback của hợp đồng Vault. Hàm này sử dụng tload để lấy giá trị từ bộ nhớ tạm thời để xác minh danh tính của người gọi, và thực hiện lưu trữ tạm thời số lượng đã đúc.
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 trực tiếp hàm uniswapV3SwapCallback của hợp đồng Vault thông qua hợp đồng độc hại để chuyển token ra ngoài. Do các giá trị trong bộ nhớ tạm thời không được xóa, dẫn đến việc xác thực bị thông qua sai.
Cuối cùng, kẻ tấn công thông qua việc tấn công hợp đồng (token A) gọi hàm uniswapV3SwapCallback của hợp đồng Vault, chuyển đổi các token khác trong hợp đồng Vault (như WBTC, WETH) để thu lợi.
Phân tích dòng tiền
Theo phân tích của công cụ chống rửa tiền và theo dõi trên chuỗi, kẻ tấn công đã đánh cắp tài sản khoảng 300.000 USD, bao gồm:
17,814.8626 USDC
1.4085 WBTC
119.871 WETH
Sau đó, kẻ tấn công đã đổi WBTC và USDC sang WETH, tổng cộng 193.1428 WETH đã được chuyển vào một công cụ trộn. Nguồn vốn ban đầu của kẻ tấn công đến từ 0.3 ETH được chuyển vào từ công cụ trộn đó.
Gợi ý an toàn
Đội ngũ dự án nên sử dụng tstore(key, 0) để xóa giá trị trong bộ nhớ tạm thời ngay lập tức sau khi kết thúc cuộc gọi hàm theo logic kinh doanh.
Tăng cường kiểm toán mã hợp đồng và thử nghiệm an toàn, tránh các lỗ hổng tương tự.
Cẩn thận sử dụng các tính năng mới được giới thiệu, hiểu rõ các rủi ro tiềm ẩn của chúng.
Xây dựng cơ chế xác thực đa yếu tố, không chỉ phụ thuộc vào một phương pháp xác thực duy nhất.
Thực hiện đánh giá an ninh và quét lỗ hổng định kỳ, kịp thời sửa chữa các vấn đề phát hiện.
Sự kiện tấn công lần này lại nhấn mạnh rằng các dự án blockchain cần phải cẩn thận đặc biệt khi sử dụng các đặc tính công nghệ mới, đồng thời cũng làm nổi bật tầm quan trọng của việc kiểm toán an ninh liên tục. Các nhà phát triển nên luôn chú ý đến các thực tiễn tốt nhất về an ninh mới nhất và tuân thủ nghiêm ngặt trong việc triển khai mã.
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.
15 thích
Phần thưởng
15
7
Chia sẻ
Bình luận
0/400
DegenWhisperer
· 07-16 00:47
Được chơi cho Suckers một ngày nữa lại bắt đầu
Xem bản gốcTrả lời0
PensionDestroyer
· 07-16 00:47
30w lại trơn tru
Xem bản gốcTrả lời0
AirDropMissed
· 07-16 00:43
又被 chơi đùa với mọi người một波 đồ ngốc
Xem bản gốcTrả lời0
ruggedNotShrugged
· 07-16 00:37
Cấu trúc đã nhỏ lại. Bây giờ, những cuộc tấn công này không đáng kể.
Xem bản gốcTrả lời0
SillyWhale
· 07-16 00:28
Lại có dự án nhỏ bị chơi đùa với mọi người.
Xem bản gốcTrả lời0
RugPullAlarm
· 07-16 00:21
Một hợp đồng lại bị lộ do không được xử lý sạch sẽ.
Xem bản gốcTrả lời0
SwingingLittleLeek
· 07-16 00:19
Gần đây Ethereum dao động trên 3000+! Tương lai sẽ duy trì trên 3000+.
Lỗ hổng lưu trữ tạm thời dẫn đến việc dự án Ethereum bị tấn công 300.000 USD Nhóm an ninh phân tích các chi tiết quan trọng
Phân tích sự kiện tấn công 300.000 USD trên chuỗi do lỗ hổng lưu trữ tạm thời gây ra
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, dẫn đến thiệt hại tài sản trên 300.000 đô la. Đội ngũ an ninh đã tiến hành phân tích sâu về sự kiện này, hiện chia sẻ kết quả như sau:
Kiến thức nền tảng
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 bao gồm:
Nguyên nhân tấn công
Nguyên nhân cơ bản của sự kiện lần này là giá trị được sử dụng trong tstore để lưu trữ tạm thời trong hàm 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, xây dựng địa chỉ độc hại cụ thể để vượt qua kiểm tra quyền truy cập, từ đó chuyển token ra ngoài.
Các bước tấn công
Kẻ tấn công tạo ra hai mã thông báo độc hại A và B, và tạo ra bể thanh khoản cho hai mã thông báo này trên một DEX.
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 tài sản 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 token nợ B để đúc token đòn bẩy. Trong quá trình này, địa chỉ pool DEX được lưu trữ tạm thời lần đầu tiên.
Khi bể DEX thực hiện thao tác hoán đổi, sẽ gọi lại hàm uniswapV3SwapCallback của hợp đồng Vault. Hàm này sử dụng tload để lấy giá trị từ bộ nhớ tạm thời để xác minh danh tính của người gọi, và thực hiện lưu trữ tạm thời số lượng đã đúc.
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 trực tiếp hàm uniswapV3SwapCallback của hợp đồng Vault thông qua hợp đồng độc hại để chuyển token ra ngoài. Do các giá trị trong bộ nhớ tạm thời không được xóa, dẫn đến việc xác thực bị thông qua sai.
Cuối cùng, kẻ tấn công thông qua việc tấn công hợp đồng (token A) gọi hàm uniswapV3SwapCallback của hợp đồng Vault, chuyển đổi các token khác trong hợp đồng Vault (như WBTC, WETH) để thu lợi.
Phân tích dòng tiền
Theo phân tích của công cụ chống rửa tiền và theo dõi trên chuỗi, kẻ tấn công đã đánh cắp tài sản khoảng 300.000 USD, bao gồm:
Sau đó, kẻ tấn công đã đổi WBTC và USDC sang WETH, tổng cộng 193.1428 WETH đã được chuyển vào một công cụ trộn. Nguồn vốn ban đầu của kẻ tấn công đến từ 0.3 ETH được chuyển vào từ công cụ trộn đó.
Gợi ý an toàn
Đội ngũ dự án nên sử dụng tstore(key, 0) để xóa giá trị trong bộ nhớ tạm thời ngay lập tức sau khi kết thúc cuộc gọi hàm theo logic kinh doanh.
Tăng cường kiểm toán mã hợp đồng và thử nghiệm an toàn, tránh các lỗ hổng tương tự.
Cẩn thận sử dụng các tính năng mới được giới thiệu, hiểu rõ các rủi ro tiềm ẩn của chúng.
Xây dựng cơ chế xác thực đa yếu tố, không chỉ phụ thuộc vào một phương pháp xác thực duy nhất.
Thực hiện đánh giá an ninh và quét lỗ hổng định kỳ, kịp thời sửa chữa các vấn đề phát hiện.
Sự kiện tấn công lần này lại nhấn mạnh rằng các dự án blockchain cần phải cẩn thận đặc biệt khi sử dụng các đặc tính công nghệ mới, đồng thời cũng làm nổi bật tầm quan trọng của việc kiểm toán an ninh liên tục. Các nhà phát triển nên luôn chú ý đến các thực tiễn tốt nhất về an ninh mới nhất và tuân thủ nghiêm ngặt trong việc triển khai mã.