Lỗi lưu trữ tạm thời khiến dự án Ethereum chịu thiệt hại 300.000 đô la
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 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 đã phân tích sự kiện này, và dưới đây là kết quả được chia sẻ:
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 điểm cốt lõi của nó là dữ liệu chỉ có hiệu lực trong thời gian thực hiện giao dịch hiện tại, và sẽ tự động bị xóa sau khi giao dịch kết thúc. Việc truy cập và chỉnh sửa được thực hiện thông qua hai lệnh EVM mới là TSTORE và TLOAD.
Lưu trữ tạm thời có những đặc điểm sau:
Chi phí gas thấp: Chi phí gas của TSTORE và TLOAD 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.
Xóa tự động: tự động đặt lại về không sau khi giao dịch kết thúc
Nguyên nhân lỗ hổng
Nguyên nhân cơ bản của sự kiện lần này là giá trị được lưu trữ tạm thời bằng tstore trong hàm không được làm sạch 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 các địa chỉ độc hại cụ thể, vượt qua kiểm tra quyền và chuyển ra token.
Quá trình tấn công
Kẻ tấn công tạo ra hai token độc hại A và B, và tạo ra một pool cho hai token này trên một DEX để cung cấp thanh khoản, trong đó token 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 token 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, địa chỉ pool DEX và số lượng đúc được lưu trữ tạm thời theo thứ tự.
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ị được lưu trữ tạm thời lần 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 token ra ngoài. Do giá trị trong bộ nhớ tạm thời chưa được xóa, gây ra 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 hợp đồng tấn công (token A), rút các token khác trong hợp đồng Vault (WBTC, WETH) để thu lợi.
Phân tích dòng tiền
Theo phân tích trên chuỗi, 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
Tổng cộng 193.1428 WETH đã được chuyển vào một dịch vụ hoán đổi.
Nguồn vốn ban đầu của kẻ tấn công đến từ 0.3 ETH chuyển vào từ một dịch vụ trộn coin nào đó.
Tóm tắt và đề xuất
Cuộc tấn công lần này tập trung vào việc tận dụng đặc điểm lưu trữ tạm thời để giữ giá trị trong suốt thời gian giao dịch, đã vượt qua xác minh quyền truy cập của hàm gọi lại. Đề nghị bên dự án ngay lập tức sử dụng tstore(key, 0) để xóa giá trị trong bộ nhớ tạm sau khi hàm gọi kết thúc theo logic kinh doanh. Ngoài ra, cần tăng cường kiểm toán mã hợp đồng và kiểm tra an ninh để tránh tình huống tương tự xảy ra.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
15 thích
Phần thưởng
15
3
Chia sẻ
Bình luận
0/400
CommunitySlacker
· 15giờ trước
Một dự án khác trở thành máy rút tiền.
Xem bản gốcTrả lời0
BlockchainDecoder
· 15giờ trước
Từ góc độ kỹ thuật, đây là việc sử dụng bộ nhớ tạm thời không đúng cách.
Xem bản gốcTrả lời0
StealthMoon
· 15giờ trước
Lại là lỗ hổng lưu trữ tạm thời? Hãy cẩn thận hơn nhé.
Dự án Ethereum bị tấn công 300.000 đô la, lỗi lưu trữ tạm thời là nguyên nhân chính
Lỗi lưu trữ tạm thời khiến dự án Ethereum chịu thiệt hại 300.000 đô la
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 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 đã phân tích sự kiện này, và dưới đây là kết quả được chia sẻ:
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 điểm cốt lõi của nó là dữ liệu chỉ có hiệu lực trong thời gian thực hiện giao dịch hiện tại, và sẽ tự động bị xóa sau khi giao dịch kết thúc. Việc truy cập và chỉnh sửa được thực hiện thông qua hai lệnh EVM mới là TSTORE và TLOAD.
Lưu trữ tạm thời có những đặc điểm sau:
Nguyên nhân lỗ hổng
Nguyên nhân cơ bản của sự kiện lần này là giá trị được lưu trữ tạm thời bằng tstore trong hàm không được làm sạch 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 các địa chỉ độc hại cụ thể, vượt qua kiểm tra quyền và chuyển ra token.
Quá trình tấn công
Kẻ tấn công tạo ra hai token độc hại A và B, và tạo ra một pool cho hai token này trên một DEX để cung cấp thanh khoản, trong đó token 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 token 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, địa chỉ pool DEX và số lượng đúc được lưu trữ tạm thời theo thứ tự.
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ị được lưu trữ tạm thời lần 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 token ra ngoài. Do giá trị trong bộ nhớ tạm thời chưa được xóa, gây ra 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 hợp đồng tấn công (token A), rút các token khác trong hợp đồng Vault (WBTC, WETH) để thu lợi.
Phân tích dòng tiền
Theo phân tích trên chuỗi, 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.
Nguồn vốn ban đầu của kẻ tấn công đến từ 0.3 ETH chuyển vào từ một dịch vụ trộn coin nào đó.
Tóm tắt và đề xuất
Cuộc tấn công lần này tập trung vào việc tận dụng đặc điểm lưu trữ tạm thời để giữ giá trị trong suốt thời gian giao dịch, đã vượt qua xác minh quyền truy cập của hàm gọi lại. Đề nghị bên dự án ngay lập tức sử dụng tstore(key, 0) để xóa giá trị trong bộ nhớ tạm sau khi hàm gọi kết thúc theo logic kinh doanh. Ngoài ra, cần tăng cường kiểm toán mã hợp đồng và kiểm tra an ninh để tránh tình huống tương tự xảy ra.