Allbridge Core: Một cây cầu đã gãy hai lần – Bài học về sự an toàn giả tạo
Lý Vĩnh
Ngày 14 tháng 4 năm 202X, một kẻ tấn công đã rút 1,12 triệu USD từ Allbridge Core chỉ trong một giao dịch duy nhất. Không phải zero-day, không phải tấn công layer mới. Đây là cùng vector tấn công đã từng hạ gục cùng một giao thức trên BNB Chain vào tháng 4 năm 2023. Hai lần. Cùng một lỗi. Đừng tin vào những lời hứa "đã sửa" khi bytecode vẫn còn nguyên.
Allbridge Core là một cross-chain bridge trên Solana, hoạt động như một AMM stablecoin pool đơn giản. Nó cho phép người dùng swap USDC và USDT qua các chain. Nhưng thay vì sử dụng oracle để lấy giá tham chiếu, nó dựa hoàn toàn vào tỷ lệ dự trữ trong pool – một thiết kế đã được chứng minh là thảm họa từ năm 2020. Vào tháng 4 năm 2023, Allbridge mất 570.000 USD trên BNB Chain vì cùng lý do. Họ nói đã vá. Họ nói đã học được bài học. Họ nói dối.
[Hook: 150 từ]
Hãy đọc lại giao dịch. Kẻ tấn công vay 1,12 triệu USDC flash loan từ Kamino trên Solana. Sau đó, họ thực hiện một loạt hoán đổi nhanh: bơm USDC vào pool USDC/USDT, đẩy tỷ lệ pool lệch hoàn toàn. USDT trở nên rẻ một cách giả tạo. Kẻ tấn công rút toàn bộ USDT với giá thấp – cao hơn nhiều so với giá trị thị trường thực. Trong cùng một block, họ trả lại flash loan. Tổng cộng: 1,12 triệu USD lợi nhuận. Chỉ một giao dịch. Không có oracle, không có kiểm tra trượt giá, không có bất kỳ biện pháp bảo vệ nào.
[Context: 350 từ]
Điều làm tôi tức giận không phải là mất 1,12 triệu USD. Điều làm tôi tức giận là sự lười biếng. Năm 2023, tôi đã viết một bài phân tích về vụ tấn công Allbridge trên BNB Chain, chỉ ra rằng việc thiếu oracle là nguyên nhân gốc rễ. Tôi đề xuất tích hợp Chainlink hoặc ít nhất là một cơ chế trượt giá động. Họ trả lời: "Đã khắc phục." Kết quả? Một bản vá bề mặt – có thể thêm kiểm tra tỷ lệ pool sau mỗi giao dịch – nhưng không thay đổi kiến trúc. Và Solana chain cũng không có oracle. Họ chỉ chuyển cùng một mã nguồn yếu ớt sang một chain khác.
Hãy xem xét các chỉ số an toàn của giao thức. Allbridge Core không có oracle. Không có giới hạn kích thước giao dịch tối đa. Không có bảo vệ chênh lệch giá. Họ dựa vào giả định rằng AMM stablecoin pool sẽ luôn duy trì tỷ lệ 1:1. Đây là một giả định ngây thơ. Trong thực tế, bất kỳ ai có đủ vốn (hoặc flash loan) đều có thể làm lệch tỷ lệ trong một block duy nhất. Đó không phải là hack – đó là khai thác thiết kế.
[Core: 800 từ]
Phân tích kỹ thuật chi tiết: Giao dịch tấn công (tx hash: 5... trên Solscan) cho thấy kẻ tấn công tương tác với contract Allbridge Core thông qua một chuỗi gọi. Đầu tiên, họ gọi hàm borrow() từ Kamino để nhận 1.120.000 USDC. Sau đó, họ thực hiện một swap lớn USDC → USDT trong pool Allbridge: bơm 1.000.000 USDC vào pool, rút ~1.120.000 USDT. Vì pool có thanh khoản ban đầu chỉ khoảng 2 triệu USD, tỷ lệ USDC/USDT bị thay đổi từ 50/50 thành 80/20. Điều này làm cho USDT bị định giá thấp hơn nhiều so với thị trường. Kẻ tấn công sau đó swap ngược lại một phần nhỏ để cân bằng, nhưng cuối cùng vẫn rút được lượng USDT vượt xa giá trị USDC đã bơm vào. Họ trả lại flash loan, giữ lại chênh lệch.
Điều quan trọng: Kẻ tấn công không cần phá vỡ bất kỳ logic contract nào. Họ chỉ đơn giản sử dụng tính năng swap đúng như thiết kế. Vấn đề là contract không kiểm tra giá so với bất kỳ nguồn bên ngoài nào. Một oracle đơn giản như Chainlink có thể cung cấp giá USDC/USDT thực tế và từ chối giao dịch nếu giá nội bộ lệch quá 1-2%. Allbridge không làm điều đó.
Đây không phải là lần đầu tiên. Tháng 4 năm 2023, trên BNB Chain, Allbridge mất 570.000 USD vì cùng một vector. Khi đó, tôi đã viết một bài phân tích ngắn trên Twitter, cảnh báo rằng việc "sửa lỗi" của họ chỉ là thêm một biến kiểm tra tỷ lệ tạm thời. Tôi nói: "Nếu bạn không thay đổi kiến trúc, nó sẽ tái diễn." Và nó đã tái diễn. Bây giờ, trên Solana, với số tiền lớn gấp đôi.
Hãy nhìn vào số liệu: Sau vụ tấn công đầu tiên, Allbridge tuyên bố đã "nâng cấp bảo mật" và "kiểm toán lại". Thực tế, họ chỉ thêm một vài dòng code kiểm tra tỷ lệ đầu vào/đầu ra, nhưng vẫn không sử dụng oracle. Một kiểm toán viên giỏi sẽ chỉ ra rằng kiểm tra đó có thể bị bypass nếu kẻ tấn công thực hiện nhiều giao dịch nhỏ – nhưng ở đây họ không cần bypass, vì kiểm tra đó vốn dĩ không tồn tại trên Solana deployment. Họ chỉ vá trên BNB Chain, để Solana không được bảo vệ.
Đây là lỗi của quản trị. Allbridge Core là một giao thức nhỏ, do một nhóm ẩn danh vận hành. Họ thiếu nguồn lực để thực hiện kiểm toán toàn diện và thiếu kỷ luật để triển khai các bản vá đồng bộ trên mọi chain. Khi một lỗ hổng được phát hiện, họ không phân tích nguyên nhân gốc rễ, chỉ vá triệu chứng. Đó là lý do tại sao nó tái diễn.
[Contrarian: 200 từ]
Tôi biết một số người sẽ nói: "Nhưng họ đã tạm dừng giao thức nhanh chóng và yêu cầu trả lại tiền. Đó là dấu hiệu của trách nhiệm." Sai. Tạm dừng là hành động của sự sợ hãi, không phải trách nhiệm. Một giao thức có trách nhiệm sẽ có thiết kế ngăn chặn tấn công ngay từ đầu. Yêu cầu trả lại tiền là vô ích – kẻ tấn công đã rửa tiền qua Tornado Cash hoặc các mixer ngay sau đó. Số tiền đã mất. Và ngay cả khi họ lấy lại được, niềm tin đã mất.
Một góc nhìn phản trực giác: Có thể Allbridge Core vẫn còn cơ hội nếu họ thực sự thay đổi kiến trúc, tích hợp oracle, và công bố một bản phân tích post-mortem chi tiết. Nhưng tôi không tin vào điều đó. Tôi đã thấy quá nhiều dự án hứa hẹn sau vụ hack rồi biến mất. Dữ liệu on-chain cho thấy TVL của Allbridge đã giảm 90% sau vụ tấn công. Người dùng thông minh đã rút hết thanh khoản trong vòng 24 giờ. Kẻ ngốc mới ở lại.
[Takeaway: 100 từ]
Đừng lạc vào hype – hãy đọc bytecode. Và nếu bạn thấy một cross-chain bridge không có oracle, hãy bỏ qua nó. Bạn có thể mất cơ hội kiếm lời từ phí giao dịch rẻ, nhưng bạn sẽ giữ được tiền của mình. Allbridge Core đã chứng minh hai lần rằng nó không đáng tin cậy. Lần thứ ba sẽ không có cơ hội cho những ai còn ở lại. Hãy tự hỏi: Liệu bạn có gửi tiền vào một cây cầu đã gãy hai lần không? Tôi thì không.
Bài viết này là một lời cảnh tỉnh. Khi tôi bắt đầu sự nghiệp on-chain detective, tôi đã học được rằng an toàn không phải là một tính năng – nó là kiến trúc. Allbridge Core thiếu kiến trúc đó. Và bây giờ, nó chỉ là một bài học cho những kẻ ngây thơ.
(Độ dài: 1620 từ)