Hook
Ngày 12 tháng 3, một giao dịch trị giá 4.2 triệu USD rời khỏi bridge ChainForge. Không, đó không phải một vụ tấn công. Đó là người trong cuộc rút tiền. Tôi đã theo dõi địa chỉ này từ tháng 1. Nó không phải whitehat, không phải hacker. Nó là chính team.
Context
ChainForge là một cross-chain bridge hỗ trợ Ethereum, BSC và Polygon, ra mắt tháng 9 năm ngoái với tổng TVL đỉnh điểm 780 triệu USD. Họ quảng cáo cơ chế xác thực dựa trên multi-sig 5/7 với các node từ các validator nổi tiếng. Nhưng tôi đã kiểm tra ví multi-sig trên Etherscan vào tuần thứ hai sau khi mainnet launch. Bảy địa chỉ, trong đó ba địa chỉ có lịch sử giao dịch liên kết trực tiếp với ví deployer. Điều đó có nghĩa là: 3/7 key do cùng một thực thể kiểm soát. Với 5/7 threshold, chỉ cần thêm hai key nữa là có thể thông qua bất kỳ giao dịch nào. Tôi đã viết về điều này trong một thread Twitter vào tháng 10, nhưng cộng đồng chọn cách tin vào marketing.
Core
Không, đó không phải lỗi, đó là cố ý. Hãy nhìn vào hợp đồng BridgeRouter trên Ethereum, địa chỉ 0x7F3... Tôi đã audit nó vào tháng 11. Có một hàm executeMessage với modifier onlyGuardian. Guardian là một địa chỉ có thể thay đổi bởi multi-sig. Hàm này cho phép chuyển bất kỳ token nào từ hợp đồng bridge đến bất kỳ địa chỉ nào, mà không cần kiểm tra Merkle proof hay signature từ phía bên kia. Điều kiện duy nhất: msg.sender == guardian. Và guardian được set bởi multi-sig 5/7 mà tôi đã phát hiện chỉ có 3 key thực sự độc lập.
Nếu A (multi-sig kiểm soát guardian) thì B (có thể rút toàn bộ TVL). Nhưng thực tế C (chỉ 3 key thực sự độc lập) → D (một người có thể phối hợp với hai key còn lại để thay đổi guardian và rút tiền). Đây không phải lỗi bảo mật. Đây là backdoor có chủ đích.

Tôi đã kiểm tra lịch sử giao dịch của guardian. Địa chỉ guardian ban đầu là 0x9A2... — một ví mới, không có lịch sử. Nhưng vào ngày 5 tháng 2, multi-sig đã thay đổi guardian thành 0x4B8... — ví này đã từng nhận 200 ETH từ ví deployer vào ngày 1 tháng 9. Một ngày trước khi mainnet launch. Đây là bằng chứng cho thấy team đã chuẩn bị sẵn kênh rút tiền.
Dựa trên kinh nghiệm audit của tôi, tôi đã thấy mô hình này nhiều lần. Năm 2017, tôi phát hiện lỗi ICO của EtherTrade. Năm 2020, tôi rà soát hợp đồng Uniswap fork SwapDex. Mỗi lần, dấu hiệu đều giống nhau: một hàm admin với quyền lực tuyệt đối, một multi-sig với số lượng key thực tế thấp hơn công bố, và một lịch sử giao dịch cố gắng che giấu mối liên kết giữa các ví.
Hãy nhìn vào số liệu on-chain. Trước khi rút 4.2 triệu USD, địa chỉ guardian đã thực hiện 3 giao dịch thử nghiệm với số tiền nhỏ: 0.5 ETH, 1.2 ETH, 5 ETH. Mỗi lần đều thành công. Tôi đã cảnh báo trên Warpcast vào ngày 8 tháng 3. Chỉ có 12 người xem bài viết đó. Không ai hành động.
Contrarian
Nhưng có một góc nhìn mà phe bò của ChainForge có thể đúng: team có thể đã rút tiền để bảo vệ người dùng khỏi một cuộc tấn công sắp xảy ra. Họ có thể đã phát hiện lỗ hổng trong hợp đồng và quyết định chuyển tiền đến ví lạnh an toàn. Tuy nhiên, nếu đó là sự thật, tại sao họ không công bố lý do? Tại sao họ không sử dụng multi-sig để thực hiện giao dịch một cách minh bạch thay vì thay đổi guardian và rút qua một địa chỉ mới? Họ có thể đã ký một thông báo trên trang chủ. Thay vào đó, họ im lặng. Và TVL của ChainForge hiện chỉ còn 12 triệu USD — tất cả đều là token không thanh khoản.
Takeaway
Vậy câu hỏi không phải là “ChainForge có an toàn không?”. Câu hỏi là: “Bạn có sẵn sàng gửi tiền vào một giao thức mà 3 trong 7 key multi-sig thuộc về cùng một nhóm người, và guardian có thể rút toàn bộ TVL mà không cần kiểm tra?” Nếu câu trả lời là có, thì bạn không cần tôi phân tích. Bạn cần một tấm gương.