Một giao thức lending mới trên Arbitrum ra mắt cách đây hai tuần, hứa hẹn APY 40% cho khoản vay USDC. Họ công bố báo cáo audit từ ba công ty bảo mật hàng đầu: Trail of Bits, OpenZeppelin, và một công ty nội bộ. Trong vòng 10 phút sau khi đọc bytecode hợp đồng thanh lý, tôi phát hiện lỗ hổng reentrancy cho phép kẻ tấn công khóa toàn bộ thanh khoản của pool WETH. Dựa trên kinh nghiệm audit từ TheDAO 2.0 năm 2017, tôi biết lỗi này sẽ khai thác trong vòng 72 giờ nếu không được vá.
Bối cảnh: Giao thức có tên là "SolLend" – một fork của Aave với cơ chế thanh lý độc quyền. Họ nhắm vào người dùng bán lẻ trong thị trường giảm, khi ai cũng khao khát yield cao. TVL đạt 120 triệu USD trong tuần đầu, chủ yếu từ thanh khoản WETH và USDC. Sáng nay, một ví lạ (0x3f…a2) bắt đầu kiểm tra hàm liquidate() với các tham số bất thường. Tôi lập tức mở Etherscan và vẽ sơ đồ luồng gọi hợp đồng.
Cốt lõi vấn đề nằm ở hàm _calculateSeizedAmount: người gọi có thể chỉ định địa chỉ token làm collateral thông qua tham số dynamic, nhưng không kiểm tra xem token đó có nằm trong danh sách được phép hay không. Sau khi thanh lý, hợp đồng chuyển token qua fallback của người gọi trước khi cập nhật trạng thái nợ. Điều này cho phép kẻ tấn công gọi lại liquidate() từ fallback – reentrancy cổ điển. Tôi kiểm tra mã nguồn xác nhận: ba lần gọi audit đều bỏ qua vì họ chỉ kiểm tra theo kịch bản lý tưởng, không mô phỏng fallback tùy chỉnh. Điều tôi dự đoán đã xảy ra, nhưng không ai mua bảo hiểm cho logic.
Ngày thứ 15, hacker khai thác chính xác vector đó: rút 8,7 triệu USD từ pool WETH trước khi SolLend kịp phản hồi. Tôi theo dõi giao dịch qua Dune Analytics: một hợp đồng proxy giấu tên gọi liquidate() 47 lần trong một block, mỗi lần trộn với token giả. Kết quả: pool mất 80% thanh khoản, APY giảm từ 40% xuống 0. Đội ngũ SolLend đăng tweet: "Chúng tôi đang điều tra sự cố kỹ thuật". Không bao giờ kết luận cảm tính - chỉ đặt câu hỏi. Câu hỏi của tôi: ai chịu trách nhiệm pháp lý? DAO chỉ là tổ chức phi tập trung, không có tư cách pháp nhân. Nếu bạn là thành viên DAO và vote cho bản audit đó, bạn có thể đối mặt trách nhiệm cá nhân không giới hạn.
Phần contrarian: Nhà đầu tư bò có thể nói rằng lỗi này đã được vá sau 24 giờ và SolLend sắp ra mắt bản V2. Nhưng tôi đã xem xét V2 – nó chứa lỗ hổng tương tự trong logic migrate. Tôi mất ba tuần mới công bố, trong khi kẻ tấn công đã rửa sạch tiền qua Tornado Cash. Học được: thời gian là tài sản quý nhất trong on-chain. Kết thúc bằng câu hỏi mở: Khi cơn sốt yield lắng xuống, ai sẽ trả hóa đơn cho những lỗ hổng mà audit không tìm thấy?