Di sản chết người: Vụ cướp 300.000 đô la trên chuỗi do lưu trữ tạm thời gây ra
Vào ngày 30 tháng 3 năm 2025, một vụ cướp trên chuỗi trị giá hơn 300.000 USD đã diễn ra trên mạng Ethereum. Theo hệ thống giám sát an ninh, dự án giao dịch đòn bẩy SIR.trading đã bị tấn công và chịu thiệt hại nặng nề. Đội ngũ an ninh đã tiến hành phân tích sâu về sự kiện này và công bố kết quả điều tra như sau.
Bối cảnh sự kiện
Phiên bản Solidity 0.8.24 sẽ được giới thiệu vào tháng 1 năm 2024 với 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, nhằm cung cấp cho các nhà phát triển một phương thức 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 triển khai thông qua hai lệnh EVM mới là TSTORE và TLOAD, với các đặc điểm như 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 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 để tạo ra địa chỉ độc hại cụ thể nhằm vượt qua kiểm tra quyền hạn, thành công chuyển token ra ngoài.
Quá trình tấn công
Kẻ tấn công tạo ra hai token độc hại A và B, và trên một DEX nào đó tạo ra các pool cho hai token này để 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 token 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 vào mã nợ B để đúc mã thông báo đòn bẩy APE. Trong quá trình này, địa chỉ hồ bơi DEX và số lượng đúc được lần lượt được lưu vào bộ nhớ tạm.
Kẻ tấn công tạo ra một hợp đồng độc hại có địa chỉ giống với số lượng đúc được lưu trữ tạm thời trước đó.
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 tiền. 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 uniswapV3SwapCallback 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 dữ liệu từ 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. Sau đó, kẻ tấn công đã hoán đổi và chuyển những tài sản này:
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 mạng ẩn danh nào đó
Điều đáng chú ý là nguồn vốn ban đầu của kẻ tấn công đến từ 0.3 ETH được chuyển vào từ một mạng ẩn danh.
Tóm tắt và đề xuất
Cuộc tấn công này đã lợi dụng đặc tính lưu trữ tạm thời không thay đổi trong suốt thời gian giao dịch, thành công vượt qua xác thực quyền truy cập của hàm gọi lại. Để phòng ngừa các sự kiện tương tự, đề nghị phía dự án:
Theo logic kinh doanh, 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.
Tăng cường kiểm toán mã hợp đồng và kiểm tra an ninh, đặc biệt chú ý đến rủi ro sử dụng các tính năng mới.
Thực hiện cơ chế xác thực đa dạng, không chỉ dựa vào một kiểm tra danh tính duy nhất.
Thực hiện đánh giá an ninh định kỳ, kịp thời phát hiện và khắc phục các lỗ hổng tiềm ẩn.
Sự kiện này lại nhắc nhở chúng ta rằng cần phải thận trọng khi áp dụng công nghệ mới, đánh giá toàn diện tác động an toàn của nó. Đồng thời, việc kiểm toán an ninh liên tục và quản lý rủi ro là rất quan trọng để bảo vệ tài sản của người dù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.
18 thích
Phần thưởng
18
6
Chia sẻ
Bình luận
0/400
GhostChainLoyalist
· 07-23 20:02
bỏ lỡ rồi, lại là một dự án bị chơi đùa với mọi người
Xem bản gốcTrả lời0
HypotheticalLiquidator
· 07-23 17:12
300.000? Đây chính là sự thanh lọc thị trường đang diễn ra...
Xem bản gốcTrả lời0
P2ENotWorking
· 07-20 21:17
Bên dự án lại đang ngủ say.
Xem bản gốcTrả lời0
BlockchainRetirementHome
· 07-20 21:16
Lại thấy hợp đồng thông minh được chơi cho Suckers
Xem bản gốcTrả lời0
DYORMaster
· 07-20 20:49
Trông đẹp nhưng không hữu ích, mã cũng không được kiểm tra.
Lỗ hổng lưu trữ tạm thời khiến dự án giao dịch ký quỹ bị tấn công 300.000 đô la trên chuỗi.
Di sản chết người: Vụ cướp 300.000 đô la trên chuỗi do lưu trữ tạm thời gây ra
Vào ngày 30 tháng 3 năm 2025, một vụ cướp trên chuỗi trị giá hơn 300.000 USD đã diễn ra trên mạng Ethereum. Theo hệ thống giám sát an ninh, dự án giao dịch đòn bẩy SIR.trading đã bị tấn công và chịu thiệt hại nặng nề. Đội ngũ an ninh đã tiến hành phân tích sâu về sự kiện này và công bố kết quả điều tra như sau.
Bối cảnh sự kiện
Phiên bản Solidity 0.8.24 sẽ được giới thiệu vào tháng 1 năm 2024 với 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, nhằm cung cấp cho các nhà phát triển một phương thức 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 triển khai thông qua hai lệnh EVM mới là TSTORE và TLOAD, với các đặc điểm như 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 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 để tạo ra địa chỉ độc hại cụ thể nhằm vượt qua kiểm tra quyền hạn, thành công chuyển token ra ngoài.
Quá trình tấn công
Kẻ tấn công tạo ra hai token độc hại A và B, và trên một DEX nào đó tạo ra các pool cho hai token này để 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 token 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 vào mã nợ B để đúc mã thông báo đòn bẩy APE. Trong quá trình này, địa chỉ hồ bơi DEX và số lượng đúc được lần lượt được lưu vào bộ nhớ tạm.
Kẻ tấn công tạo ra một hợp đồng độc hại có địa chỉ giống với số lượng đúc được lưu trữ tạm thời trước đó.
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 tiền. 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 uniswapV3SwapCallback 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 dữ liệu từ 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. Sau đó, kẻ tấn công đã hoán đổi và chuyển những tài sản này:
Điều đáng chú ý là nguồn vốn ban đầu của kẻ tấn công đến từ 0.3 ETH được chuyển vào từ một mạng ẩn danh.
Tóm tắt và đề xuất
Cuộc tấn công này đã lợi dụng đặc tính lưu trữ tạm thời không thay đổi trong suốt thời gian giao dịch, thành công vượt qua xác thực quyền truy cập của hàm gọi lại. Để phòng ngừa các sự kiện tương tự, đề nghị phía dự án:
Sự kiện này lại nhắc nhở chúng ta rằng cần phải thận trọng khi áp dụng công nghệ mới, đánh giá toàn diện tác động an toàn của nó. Đồng thời, việc kiểm toán an ninh liên tục và quản lý rủi ro là rất quan trọng để bảo vệ tài sản của người dùng.