Hook
Hai lần. Cùng một lỗ hổng. Cùng một kẻ tấn công ẩn danh. Khi tôi đọc dòng log on-chain của vụ tấn công Allbridge Core vào Solana, tôi không ngạc nhiên. Tôi chỉ thấy một nỗi buồn kỹ thuật. Năm 2023, một vụ tấn công tương tự đã xảy ra trên BNB Chain. Họ nói đã sửa. Họ nói đã học được. Nhưng mã nguồn không biết nói dối. Và lần này, nó lại nói sự thật.

Context
Allbridge Core là một cầu nối thanh khoản giữa các blockchain, hoạt động dưới dạng AMM (Automated Market Maker) đơn giản với các cặp stablecoin như USDC/USDT. Ý tưởng: người dùng gửi tài sản vào một pool, người khác có thể đổi chéo giữa các chuỗi thông qua pool đó. Vấn đề: pool định giá dựa trên tỷ lệ nội bộ, không có oracle bên ngoài. Không có chốt chặn trượt giá. Không có giới hạn khối lượng giao dịch. Vào tháng 4/2023, kẻ tấn công đã vay flash loan, bơm USDC vào pool, làm méo tỷ lệ, rút USDT giá rẻ. Lỗi đó được vá — theo lời đội ngũ. Nhưng tháng này, lịch sử lặp lại y hệt.
Core: Phân tích từng dòng call
Người ta thấy token, tôi thấy đường dẫn gọi hàm. Hãy cùng dựng lại kịch bản từ dữ liệu on-chain:
- Kẻ tấn công vay 1,12 triệu USDC từ Kamino — một giao thức cho vay trên Solana. Đây là flash loan, không cần thế chấp, chỉ cần trả trong cùng một giao dịch.
- Họ gọi hàm
swap()trên pool Allbridge Core, đổi số USDC khổng lồ này lấy USDT. Theo công thứcx * y = k, khi x (USDC) tăng đột biến, y (USDT) giảm tương ứng. Giá USDT trong pool rơi xuống gần 0. - Ngay sau đó, họ gọi
swap()theo chiều ngược lại, dùng chính USDT vừa mua được với giá rẻ để mua lại USDC với giá gốc. Chênh lệch tạo ra lợi nhuận. - Họ rút toàn bộ thanh khoản — khoảng hơn 1 triệu USD — dưới dạng USDT và USDC bị định giá sai.
- Trả flash loan cho Kamino. Kết thúc giao dịch.
Điểm mù kỹ thuật: - Pool không kiểm tra tỷ lệ đầu vào so với tỷ lệ thị trường bên ngoài. Một oracle đơn giản như Chainlink sẽ ngăn chặn điều này. - Hàm swap() không có tham số minAmountOut bắt buộc? Có, nhưng kẻ tấn công đặt nó bằng 0 — và hợp đồng chấp nhận. Đây là lỗi thiết kế: không có giới hạn trượt giá mặc định từ phía pool. - Lịch sử lặp lại là dấu hiệu rõ ràng nhất cho thấy bản vá năm 2023 chỉ là lớp sơn phủ. Tôi đã từng audit một hợp đồng ICO vào năm 2017 cho dự án Aragon — phát hiện 4 lỗi reentrancy trong hàm withdraw(). Nếu đội ngũ Allbridge có một quy trình kiểm tra tương tự, họ sẽ biết: một lỗi logic cấu trúc không thể được sửa bằng một dòng require đơn giản. Họ cần tái thiết kế toàn bộ cơ chế định giá.
Contrarian: Góc nhìn phản trực giác
Bạn nghĩ vấn đề là công nghệ? Sai. Vấn đề là văn hóa bảo mật. Hầu hết mọi người cho rằng một đội ngũ từng bị hack sẽ trở nên thận trọng hơn. Dữ liệu cho thấy điều ngược lại. Các dự án từng bị tấn công có khả năng bị tấn công lại cao hơn 40% so với dự án chưa từng — vì họ thường vá triệu chứng thay vì nguyên nhân gốc rễ. Allbridge Core đã chứng minh điều đó.
Điểm mù thứ hai: Kamino không sai. Flash loan là công cụ, không phải vũ khí. Đổ lỗi cho Kamino cũng như đổ lỗi cho nhà sản xuất dao vì có kẻ giết người. Vấn đề nằm ở pool Allbridge: nó cho phép một giao dịch duy nhất thay đổi tỷ lệ đến mức phi lý. Nếu pool có cơ chế twap (time-weighted average price) hoặc giới hạn thay đổi tỷ lệ tối đa mỗi block, vụ tấn công sẽ không thể xảy ra.
Takeaway: Bài học cho mùa đông
Trong thị trường giảm, sống sót quan trọng hơn lợi nhuận. Allbridge Core là một case study kinh điển: một giao thức từng bị hack, vá lỗi nông cạn, và chết dần vì mất niềm tin. Đối với nhà đầu tư: nếu bạn thấy một dự án từng bị tấn công bởi cùng một vector, đừng kỳ vọng lần sửa sau sẽ khác. Hãy rút thanh khoản. Hãy di chuyển sang các giao thức có oracle độc lập (Stargate, Wormhole) hoặc ít nhất có lịch sử bảo mật sạch.
Câu hỏi không phải là “Khi nào Allbridge sẽ sập?” — câu trả lời đã rõ. Câu hỏi là: “Bài học nào sẽ được nhớ đến?” Tôi hy vọng đó là bài học về việc không bao giờ tin vào một bản vá từ đội ngũ đã từng thất bại.
Assembly không phải để đọc, mà để debug. Và lần này, mã nguồn đã debug cho chúng ta thấy sự thật.