Di chứng chết người: Một cuộc tấn công 30 triệu đô la trên chuỗi bắt nguồn từ bộ nhớ tạm thời
Vào ngày 30 tháng 3 năm 2025, một hệ thống giám sát an ninh đã phát hiện một dự án giao dịch đòn bẩy trên Ethereum bị tấn công, gây thiệt hại tài sản hơn 300.000 đô la. Nhóm an ninh đã tiến hành phân tích sâu về sự kiện này, và hiện chia sẻ kết quả như sau:
Bối cảnh
Phiên bản Solidity 0.8.24 (ra mắt tháng 1 năm 2024) đã 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 cách lưu trữ tạm thời hiệu quả về chi phí và có hiệu lực trong suốt quá trình giao dịch.
Các đặc điểm chính của lưu trữ tạm thời 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 sẽ tự động được đặt lại về không.
Nguồn gốc tấn công
Nguyên nhân cơ bản của sự kiện này là giá trị được lưu trữ tạm thời trong hàm bằng cách sử dụng tstore 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 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 ra token.
Quy trình tấn công
Kẻ tấn công tạo ra hai đồng tiền độc hại A và B, tạo ra các bể cho hai đồng tiền này trên một DEX và tiêm thanh khoản vào đó, trong đó đồng tiền A là hợp đồng tấn công.
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 APE-21.
Kẻ tấn công gọi hàm mint của hợp đồng Vault, gửi token nợ B để đúc token đòn bẩy APE. Trong quá trình này, có hai thao tác lưu trữ tạm thời: đầu tiên lưu trữ địa chỉ của một pool DEX, sau đó lưu trữ số lượng token đã đúc.
Kẻ tấn công tạo ra một hợp đồng độc hại bằng cách sử dụng phương pháp đặc biệt, có địa chỉ giống với giá trị của lần lưu trữ tạm thời thứ hai.
Kẻ tấn công gọi trực tiếp hàm callback của hợp đồng Vault thông qua hợp đồng độc hại để chuyển ra token. Do giá trị trong bộ nhớ tạm thời chưa được xóa, dẫn đến việc kiểm tra danh tính của người gọi bị sai sót.
Cuối cùng, kẻ tấn công gọi hàm callback của hợp đồng Vault thông qua hợp đồng tấn công (token A), chuyển các token khác trong hợp đồng Vault (như WBTC, WETH) ra ngoài để thu lợi.
Phân tích dòng tiền
Theo phân tích của công cụ phân tích on-chain, 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. Các tài sản này sau đó đã được tích hợp và chuyển đổi thành WETH, cuối cùng được chuyển vào một giao thức giao dịch ẩn danh.
Nguồn vốn ban đầu của kẻ tấn công đến từ 0.3 ETH được chuyển vào giao thức giao dịch riêng tư đó.
Tóm tắt và đề xuất
Tâm điểm của cuộc tấn công lần này là kẻ tấn công đã tận 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 xác thực quyền truy cập của hàm callback để thu lợi. Để ngăn chặn tình huống tương tự xảy ra, đề xuất cho các dự án:
Theo logic kinh doanh, ngay sau khi gọi hàm, hãy sử dụng tstore(key, 0) để xóa giá trị trong bộ nhớ tạm thời.
Tăng cường kiểm toán mã hợp đồng và kiểm tra an ninh.
Thận trọng khi 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.
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.
Sự cố tấn công trên chuỗi trị giá 300.000 đô la: Lỗ hổng lưu trữ tạm thời khiến các dự án giao dịch ký quỹ gặp khó khăn.
Di chứng chết người: Một cuộc tấn công 30 triệu đô la trên chuỗi bắt nguồn từ bộ nhớ tạm thời
Vào ngày 30 tháng 3 năm 2025, một hệ thống giám sát an ninh đã phát hiện một dự án giao dịch đòn bẩy trên Ethereum bị tấn công, gây thiệt hại tài sản hơn 300.000 đô la. Nhóm an ninh đã tiến hành phân tích sâu về sự kiện này, và hiện chia sẻ kết quả như sau:
Bối cảnh
Phiên bản Solidity 0.8.24 (ra mắt tháng 1 năm 2024) đã 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 cách lưu trữ tạm thời hiệu quả về chi phí và có hiệu lực trong suốt quá trình giao dịch.
Các đặc điểm chính của lưu trữ tạm thời bao gồm:
Nguồn gốc tấn công
Nguyên nhân cơ bản của sự kiện này là giá trị được lưu trữ tạm thời trong hàm bằng cách sử dụng tstore 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 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 ra token.
Quy trình tấn công
Kẻ tấn công tạo ra hai đồng tiền độc hại A và B, tạo ra các bể cho hai đồng tiền này trên một DEX và tiêm thanh khoản vào đó, trong đó đồng tiền A là hợp đồng tấn công.
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 APE-21.
Kẻ tấn công gọi hàm mint của hợp đồng Vault, gửi token nợ B để đúc token đòn bẩy APE. Trong quá trình này, có hai thao tác lưu trữ tạm thời: đầu tiên lưu trữ địa chỉ của một pool DEX, sau đó lưu trữ số lượng token đã đúc.
Kẻ tấn công tạo ra một hợp đồng độc hại bằng cách sử dụng phương pháp đặc biệt, có địa chỉ giống với giá trị của lần lưu trữ tạm thời thứ hai.
Kẻ tấn công gọi trực tiếp hàm callback của hợp đồng Vault thông qua hợp đồng độc hại để chuyển ra token. Do giá trị trong bộ nhớ tạm thời chưa được xóa, dẫn đến việc kiểm tra danh tính của người gọi bị sai sót.
Cuối cùng, kẻ tấn công gọi hàm callback của hợp đồng Vault thông qua hợp đồng tấn công (token A), chuyển các token khác trong hợp đồng Vault (như WBTC, WETH) ra ngoài để thu lợi.
Phân tích dòng tiền
Theo phân tích của công cụ phân tích on-chain, 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. Các tài sản này sau đó đã được tích hợp và chuyển đổi thành WETH, cuối cùng được chuyển vào một giao thức giao dịch ẩn danh.
Nguồn vốn ban đầu của kẻ tấn công đến từ 0.3 ETH được chuyển vào giao thức giao dịch riêng tư đó.
Tóm tắt và đề xuất
Tâm điểm của cuộc tấn công lần này là kẻ tấn công đã tận 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 xác thực quyền truy cập của hàm callback để thu lợi. Để ngăn chặn tình huống tương tự xảy ra, đề xuất cho các dự án: