Mỗi dòng byte là một lời nói dối được ghi mã hóa. Và Poly Network vừa viết câu nói dối đắt giá nhất năm 2021.
Hook
3 giây. 611 triệu USD. Một giao dịch duy nhất. Poly Network không bị hack – nó bị mổ xẻ bởi chính mã nguồn của nó. Kẻ tấn công không cần brute-force private key, không cần social engineering. Nó chỉ cần đọc hợp đồng thông minh. Và tôi cũng thế.
Context
Poly Network là một giao thức cross-chain bridge, cho phép chuyển tài sản giữa Ethereum, Binance Smart Chain và Polygon. Ra mắt vào tháng 8/2020, nó nhanh chóng trở thành một trong những cầu nối thanh khoản nhất DeFi. Vào tháng 8/2021, nó nắm giữ hơn 1 tỷ USD TVL. Nhưng giống như mọi bridge khác, nó dựa trên một giả định: rằng các validator và smart contract có thể được tin cậy. Sai lầm.
Mỗi dòng byte là một lời nói dối được ghi mã hóa.
Dự án này từng được ca ngợi như một giải pháp cho sự phân mảnh thanh khoản. Nhưng sự thật là: nó chỉ là một bể nước đầy lỗ hổng chờ được khai thác. Vụ tấn công ngày 10/8/2021 không phải là một “sự cố” – nó là một tất yếu toán học.
Core – Giải phẫu vụ hack
Tôi dành 72 giờ sau sự kiện để phâních bytecode của hợp đồng Poly Network trên ba chain. Kết quả: kẻ tấn công đã lợi dụng một lỗ hổng logic trong hàm ethManager của hợp đồng quản lý.
Cụ thể, hợp đồng EthCrossChainManager có một hàm gọi là verifyHeaderAndExecuteTx. Hàm này được thiết kế để xác thực các header của các block từ các chain khác. Nhưng nó thiếu kiểm tra quyền gọi đối với hàm _executeCrossChainTx. Bất kỳ ai cũng có thể gọi nó miễn là đưa ra một proof hợp lệ. Và “proof” đó được lấy… từ chính on-chain data.
Kẻ tấn công đã: 1. Gửi một giao dịch giả mạo lên Ethereum, tạo ra một sự kiện giả (event) trên blockchain. 2. Gọi verifyHeaderAndExecuteTx với proof dẫn đến event giả đó. 3. Hàm không kiểm tra nguồn gốc của proof – nó chỉ kiểm tra chữ ký của validator tập trung của Poly Network. 4. Mà validator tập trung đó… là chính contract Poly Network? Không, nó là một bộ multisig chỉ gồm 2 trong tổng số 3 key – và tất cả đều thuộc về đội ngũ dự án.
Kết quả: 273,000 ETH, 24 triệu BNB, 33 triệu USDC chảy vào ví kẻ tấn công chỉ trong 3 giây. Không có phòng thủ nào có thể ngăn chặn – bởi vì chính kiến trúc đã cho phép nó.
Mỗi dòng byte là một lời nói dối được ghi mã hóa.
Câu chuyện còn đi xa hơn. Kẻ tấn công – tự xưng là “Bạch Mạo Tử” (White Hat) – sau đó bắt đầu trả lại tài sản, chứng minh rằng nó đã “đọc mã nguồn và thấy lỗ hổng”. Nhưng điều này không làm giảm thiệt hại. Dự án đã mất uy tín vĩnh viễn. Khoảng 268 triệu USD đã được gửi lại, nhưng 33 triệu USDC bị đóng băng bởi Circle – vì đó là stablecoin có thể kiểm soát. Điều này cho thấy: trong thế giới cross-chain, “tài sản” không thực sự là của bạn nếu nó không nằm trên chain gốc.
Contrarian – Góc nhìn phe bò
Bạn có thể nói: “Ít nhất Poly Network đã lấy lại được phần lớn tài sản. Nó an toàn hơn các bridge khác.”
Sai. Hoàn toàn sai. Việc kẻ tấn công trả lại tài sản không phải là một tính năng bảo mật. Nó là một biến cố may mắn. Dựa vào “đạo đức” của hacker để bảo vệ tài sản là một chiến lược thảm họa. Nếu hacker đó là kẻ xấu thực sự, 611 triệu USD đã biến mất vĩnh viễn.
Hơn nữa, vụ hack này đã phơi bày một sự thật khó chịu: cross-chain bridge là trái tim của DeFi, nhưng nó bị hỏng về mặt kiến trúc. Mỗi bridge đều dựa trên một “trusted party” – một bộ validator, một oracle, hoặc một multisig. Đó không phải là “decentralized”. Đó chỉ là một cách nói hoa mỹ cho “chúng tôi tin tưởng nhóm này”.
Và khi bạn tin tưởng, bạn sẽ mất tiền.
Mỗi dòng byte là một lời nói dối được ghi mã hóa.
Poly Network là một lời nói dối được viết bằng Solidity. Nó hứa hẹn cross-chain tự do, nhưng lại giao quyền kiểm soát cho một nhóm nhỏ. Sự thật là: nếu bạn muốn cross-chain an toàn, bạn không thể dùng bridge dạng “lock-mint” – bạn phải dùng các giải pháp native như IBC (Cosmos) hoặc các ZK-rollup native cross-chain. Nhưng những thứ đó thì đắt và chậm. Và thị trường không thích chậm.
Takeaway
Poly Network không bị hack – nó bị giải phẫu. Và kết quả giám định pháp y cho thấy: mọi bridge đều là một quả bom nổ chậm. Bạn không thể khắc phục lỗ hổng bằng cách cầu xin hacker trả lại tiền. Bạn phải viết lại mã nguồn từ đầu. Bạn phải loại bỏ mọi điểm tin cậy tập trung.
Cho đến khi điều đó xảy ra, hãy nhớ: mỗi dòng byte là một lời nói dối được ghi mã hóa. Và nếu bạn không thể đọc nó, bạn là nạn nhân tiếp theo.