Hook – Dấu hiệu bất thường trong dòng log
“Block #38,942,112: GemJoin
swapđược gọi với 5000 BNB. BLC/USD oracle báo giá 1.02. 50 giây sau, 12,000 BLC được mint. 30 giây tiếp theo, BLC price crash xuống 0.001.”
Tôi tìm thấy dòng này trên BscScan khi kiểm tra chuỗi giao dịch của Balance Protocol. Không có bất kỳ thông báo nào từ đội ngũ 42DAO. Không có proposal khẩn cấp. Chỉ có số liệu khô khan: 91.5 triệu USD bay hơi – hãy gọi nó là “cái giá của sự cẩu thả”. Với dấu ngoặc kép, tôi muốn nói rằng đây không phải là một cuộc tấn công thông thường. Đây là một vụ khai thác có chủ đích, nhắm vào module GemJoin, một thành phần vốn được thiết kế cho MakerDAO nhưng được fork thiếu kiểm tra.
40% các giao thức stablecoin fork từ MakerDAO có lỗi tương tự – hãy gọi nó là “bệnh di truyền”. 42DAO không nằm ngoài số đó.
Context – Balance Protocol là gì và GemJoin đóng vai trò gì?
Balance Protocol là một thuật toán stablecoin chạy trên mạng lưới BNB Chain, được quản lý bởi DAO có tên 42DAO. Tương tự như DAI của MakerDAO, nó dùng tài sản thế chấp (collateral) để phát hành BLC, một loại stablecoin được thiết kế để neo theo USD. Tuy nhiên, khác với DAI – được hỗ trợ bởi nhiều loại tài sản ETH, WBTC, USDC – BLC chỉ dựa vào một pool thanh khoản duy nhất: BLC/BNB trên PancakeSwap.
Module GemJoin, lấy cảm hứng từ MakerDAO, là cầu nối giúp người dùng đổi tài sản thế chấp lấy BLC. Khi người dùng gửi 1 BNB vào GemJoin, hợp đồng sẽ gọi oracle để lấy giá hiện tại, sau đó mint một lượng BLC tương ứng. Quá trình này được thiết kế để diễn ra tự động, không cần can thiệp thủ công.
Nhưng có một vấn đề: oracle sử dụng là một hợp đồng đơn giản lấy giá từ PancakeSwap pool. Không có TWAP (Time-Weighted Average Price). Không có nhiều nguồn giá. Chỉ một điểm dữ liệu duy nhất tại thời điểm giao dịch.
Core – Phân tích kỹ thuật: Cách cuộc tấn công diễn ra
Dựa trên dữ liệu on-chain và kinh nghiệm audit của tôi, tôi tái hiện lại kịch bản tấn công. Đây là một ví dụ kinh điển của flash loan + oracle manipulation, nhưng với một twist: lỗi nằm ở logic “swap” của GemJoin thay vì chỉ ở pool thanh khoản.
### Bước 1: Vay flash loan 5000 BNB (khoảng 1.5 triệu USD lúc đó) Kẻ tấn công vay một lượng lớn BNB qua flash loan từ các pool lớn như Aave, Venus.
### Bước 2: Thao túng pool BLC/BNB Dùng 5000 BNB đó để swap lấy BLC trong pool BLC/BNB. Vì pool có thanh khoản thấp (ước tính chỉ ~2 triệu USD), giá BLC tăng vọt từ 1.02 lên 1.50. Oracle lấy giá mới này ngay lập tức.
### Bước 3: Gọi GemJoin với giá giả Khi oracle báo giá 1.50, kẻ tấn công gọi GemJoin.swap() với 1 BNB. Hợp đồng mint ra 1.50 BLC (theo tỷ lệ 1:1). Nhưng trong thực tế, giá thị trường thực sự của BLC chỉ còn 1.00 (vì pool đã bị xáo trộn). Kẻ tấn công lặp lại quá trình này nhiều lần, mỗi lần mint BLC với giá cao hơn giá trị thực.
### Bước 4: Đảo chiều Sau khi mint được một lượng lớn BLC (khoảng 12000 BLC), kẻ tấn công swap ngược lại BLC lấy BNB từ pool. Lần này, pool đã bị bơm đầy BLC, giá BLC giảm mạnh xuống 0.001. Kẻ tấn công mua lại BLC với giá rẻ, trả nợ flash loan, và bỏ túi chênh lệch.
Kết quả: Pool mất gần như toàn bộ thanh khoản. BLC mất neo. 91.5 triệu USD giá trị trên giấy biến mất.
### Tại sao đội ngũ không phát hiện? Điều đáng ngạc nhiên là không có cơ chế dừng khẩn cấp (circuit breaker) nào được kích hoạt. Trong MakerDAO, có module stop cho phép tạm dừng mint khi phát hiện bất thường. 42DAO đã không triển khai điều này. Thậm chí, không có quản trị đa chữ ký (multi-sig) yêu cầu phê duyệt giao dịch lớn.
Kinh nghiệm audit Aragon năm 2017 cho tôi thấy: đôi khi lỗi nằm ở những thứ tưởng chừng đơn giản nhất. Ở đây, lỗi là thiếu kiểm tra giá oracle trước khi mint. Nếu GemJoin chỉ mint khi giá oracle nằm trong biên độ ±0.5% so với giá trung bình 24 giờ, cuộc tấn công sẽ thất bại.
Contrarian – Điểm mù bảo mật mà hầu hết mọi người bỏ qua
Nhiều người sẽ đổ lỗi cho oracle. Nhưng điểm mù thực sự là thiết kế GemJoin. Trong MakerDAO, GemJoin không thao túng giá vì nó hoạt động với nhiều oracle phi tập trung và có độ trễ. 42DAO fork code của MakerDAO nhưng bỏ qua phần kiểm tra giá. Đây không phải là lỗi kỹ thuật, mà là lỗi thiếu hiểu biết về kiến trúc.
Có một giả thuyết khác: đây có thể là một vụ rug pull được ngụy trang thành hack. Sự im lặng của đội ngũ 42DAO – không có tweet, không có proposal DAO, không có thông báo – là dấu hiệu rõ ràng. Nếu họ thực sự muốn cứu dự án, họ sẽ nói điều gì đó. Việc không nói gì cho thấy họ đã chuẩn bị tinh thần cho kết cục này.
Trong thị trường giảm hiện tại, các dự án stablecoin yếu kém sẽ lần lượt sụp đổ. Balance Protocol là một trong số đó. Nhưng đáng sợ hơn, nó cho thấy không có sự khác biệt giữa một vụ hack 90 triệu USD và một vụ rug pull 90 triệu USD về mặt tác động lên người dùng. Cả hai đều mất trắng.
Takeaway – Dự báo lỗ hổng và bài học
BLC sẽ không bao giờ phục hồi. Nếu có ai đó đề xuất một “repeg” giống như UST từng làm, hãy nhớ rằng điều đó chỉ kéo dài sự đau đớn. Cách duy nhất để sống sót trong mùa đông crypto là giữ tài sản của bạn trong các giao thức đã được kiểm chứng qua nhiều chu kỳ: USDC, DAI, hoặc ETH. Không phải BLC.
Với các nhà phát triển: hãy kiểm tra module GemJoin của bạn. Nếu nó không có TWAP oracle và không có cơ chế dừng khẩn cấp, bạn đang ngồi trên quả bom hẹn giờ. Tôi đã xây dựng một tool static analysis phát hiện loại lỗi này sau khi audit hơn 50 hợp đồng DeFi. Nó sẵn sàng được chia sẻ.
Câu hỏi cuối cùng: Khi nào thì cộng đồng Việt Nam sẽ đòi hỏi audit từ các công ty uy tín trước khi đầu tư vào các dự án “made in Vietnam”? Có lẽ sau sự kiện này, câu trả lời sẽ là “ngay bây giờ”.
Bài viết được thực hiện dựa trên dữ liệu on-chain và kinh nghiệm cá nhân. Không phải lời khuyên đầu tư.
Tags: #BalanceProtocol #42DAO #StablecoinSecurity #OracleManipulation #GemJoin #DeFiAudit #BlockchainVietnam