Một lỗ hổng ERC-20 mới hiện ra. Không phải trong hợp đồng token, mà trong cách Uniswap v4 định nghĩa “tuân thủ”. Tuần này, Uniswap Labs công bố Permissioned Pools – một hook standard cho phép nhà phát hành tài sản kiểm soát ai được giao dịch. Nghe có vẻ tiến bộ: đưa quy tắc KYC vào DeFi mà không cần front-end gateway. Nhưng tôi đã nhìn vào mã hook mẫu, và thấy một mẫu hình lỗi quen thuộc từ năm 2017.
Bối cảnh: Uniswap v4 cho phép lập trình viên gắn hook vào mỗi pool để tùy chỉnh hành vi. Permissioned Pools là hook đầu tiên được thiết kế cho tài sản có quy định (RWA). Nó dùng một danh sách trắng (allowlist) do nhà phát hành kiểm soát. Chỉ những địa chỉ trong danh sách mới có thể swap. Superstate, Securitize – những tổ chức phát hành trái phiếu kho bạc Mỹ – là đối tác đầu tiên. Họ muốn thanh khoản trên chain nhưng vẫn đáp ứng SEC. Giải pháp: để họ tự làm KYC, rồi thêm địa chỉ vào allowlist. Hook kiểm tra mỗi lần swap: nếu sender không trong danh sách, revert.
Cốt lõi: Tôi fork mã hook mẫu từ blog Uniswap, chạy thử nghiệm. Phát hiện đầu tiên: allowlist được lưu trong một mapping đơn giản, và quyền thêm/xóa được giao cho một owner – thường là EOA của nhà phát hành. Đây là điểm yếu. Một private key bị lộ, toàn bộ pool có thể bị chiếm quyền. Kẻ tấn công thêm địa chỉ giả mạo, rút thanh khoản bằng cách swap với chính mình. Tôi đã thấy pattern này trong audit ICO năm 2017: hợp đồng token ERC-20 có hàm mint không kiểm soát. Ở đây, hook không kiểm soát danh sách trắng cũng là một lỗ hổng. Thứ hai, hook không có cơ chế kiểm tra tính hợp lệ của địa chỉ trong allowlist – nếu nhà phát hành thêm nhầm địa chỉ của hacker, không có biện pháp khắc phục ngoài việc gọi remove sau khi sự cố xảy ra. Một lỗ hổng ERC-20 khác hiện ra: hook này phụ thuộc hoàn toàn vào bảo mật off-chain của nhà phát hành. DeFi từng được thiết kế để loại bỏ trust; Permissioned Pools đưa trust trở lại dưới dạng một allowlist được kiểm soát bởi một private key.
Góc nhìn trái chiều: Phe bò nói: “Đây là bước cần thiết để đưa tổ chức vào DeFi. Rủi ro do nhà phát hành tự quản lý, Uniswap chỉ cung cấp cơ sở hạ tầng.” Họ đúng một phần. Không có Permissioned Pools, Superstate sẽ phải dùng sàn tập trung như Coinbase. Nhưng họ quên rằng thất bại của một pool có thể lây lan. Nếu một nhà phát hành bị hack, thanh khoản từ pool đó bị rút, người dùng hợp pháp mất tiền. Uniswap không chịu trách nhiệm, nhưng danh tiếng toàn giao thức bị ảnh hưởng. Metadata NFT không bao giờ đáng tin cậy; allowlist cũng vậy. Chúng chỉ đáng tin nếu quy trình quản lý private key là bất khả xâm phạm. Thực tế: hầu hết các tổ chức dùng multi-sig, nhưng hook không bắt buộc. Họ có thể dùng EOA đơn giản vì tiện lợi.
Kết luận: Permissioned Pools là một bước tiến về mặt sản phẩm, nhưng kỹ thuật triển khai hiện tại mang rủi ro cố hữu. Nếu bạn là LP trong các pool này, hãy kiểm tra ai kiểm soát allowlist, và liệu có cơ chế khẩn cấp (pause) hay không. Nếu bạn là nhà phát hành, đừng dùng EOA. Nếu không, bạn đang tạo ra một lỗ hổng ERC-20 khác, chỉ là lần này nó ẩn trong hook thay vì token.