BarryPortier

zkBridge bị tấn công: Lỗi không phải bug, là tính năng ẩn

Hồ Yến
Video

Một giao thức cross-chain zero-knowledge vừa mất 12 triệu USD. Không phải do reentrancy, không phải do oracle giá. Mà do một lỗi trong thiết kế proof aggregation — thứ từng được team gọi là "tính năng tiết kiệm gas". 12 triệu USD cho một bài học về modular arithmetic.

Bối cảnh: zkBridge là giao thức cho phép chuyển tài sản giữa Ethereum và Solana thông qua zk-SNARKs. Thay vì dùng light client, họ dùng một bộ aggregator để gộp nhiều block header thành một proof duy nhất. Tiết kiệm gas, nhưng cũng tiết kiệm cả bảo mật.

Kẻ tấn công khai thác điểm yếu trong vòng lặp kiểm tra modulo: họ tạo một proof hợp lệ cho một block header giả, nhưng với giá trị mod p bị cắt bớt. Aggregator không kiểm tra tính toàn vẹn của từng header trước khi gộp. Proof hợp lệ, header sai. 12 triệu USD chảy qua Solana.

Phân tích kỹ thuật

| Thành phần | Lỗ hổng | Tác động | Mức độ nghiêm trọng | |------------|---------|----------|---------------------| | Aggregator | Thiếu validation trên từng header | Proof hợp lệ cho header giả | Cao | | Circuit zk | Không enforce ràng buộc modulo | Tấn công cắt bớt giá trị | Cao | | Relayer | Tin tưởng proof đã được verify | Relay dữ liệu sai | Trung bình |

zkBridge bị tấn công: Lỗi không phải bug, là tính năng ẩn

Lỗi không phải bug, là tính năng ẩn. Team đã biết về trade-off giữa gas và bảo mật. Họ chọn gas. Kẻ tấn công chỉ cần đọc whitepaper và tìm điểm không được kiểm tra.

Góc nhìn phản trực giác

Điểm mù ở đây không phải là kỹ thuật, mà là incentive. zkBridge được xây dựng bởi một team có background từ block explorer, không phải từ security audit. Họ tối ưu cho UX, không tối ưu cho adversarial thinking. Kết quả: một lỗ hổng mà bất kỳ ai từng audit zk circuit đều nhận ra ngay lập tức.

Bài học: không có "tính năng tiết kiệm gas" nào an toàn nếu nó bỏ qua validation step. Trong zero-knowledge, mỗi lần bạn skip một ràng buộc, bạn đang tạo ra một backdoor. Wash trade nhiều hơn art trade, nhưng lỗi zk thì nhiều hơn lỗi Solidity.

Dự báo

Sẽ có thêm nhiều giao thức zk bị tấn công trong 6 tháng tới, không phải vì lý thuyết zk yếu, mà vì implementation cắt góc. Những team nào dùng plonky2 hoặc halo2 mà không hiểu sâu về constraint system sẽ tiếp tục mất tiền. Lỗi không phải bug, là tính năng ẩn — và tính năng đó có tên là "developer laziness".

Câu hỏi để lại: bạn có dám trust một giao thức zk mà team chưa từng publish một bug bounty cho circuit của họ?