48 giờ. Không ngủ. Chỉ có mã nguồn và cà phê đen.
Đầu năm 2025, tôi dẫn nhóm 3 kỹ sư kiểm tra cầu nối permissioned của một ngân hàng Việt Nam – gọi là VietBridge. Họ tự hào về "bảo mật đa chữ ký cấp ngân hàng". Tôi mở hợp đồng lên. 10 phút sau, tôi thấy điều khiến tôi lạnh sống lưng.
Multisig của họ không có timeout.
Không phải lỗi typo. Đó là thiết kế có chủ ý từ đội dev: "để linh hoạt cho các trường hợp khẩn cấp". Nhưng tôi biết luật chơi trong crypto: mọi cửa sổ không giới hạn đều là cửa sổ cho kẻ tấn công. Mô phỏng ngay: nếu multisig bị chiếm quyền trong 48 giờ không giám sát (ví dụ cuối tuần), kẻ tấn công có thể rút toàn bộ tài sản khỏi cầu nối. Con số thiệt hại ước tính? 10 triệu USD.
Context: Tại sao cầu nối lại nguy hiểm như vậy?
Cầu nối cross-chain là kẻ thù số một của bảo mật DeFi: hơn 2 tỷ USD đã bị đánh cắp từ các bridge kể từ 2022. Wormhole (326M), Ronin (600M), Nomad (190M). Lỗ hổng chung? Multisig yếu, thiếu cơ chế fallback. Nhưng ở cầu nối permissioned – nơi các ngân hàng tự hào "kiểm soát được danh tính" – lại sinh ra một điểm mù tâm lý: "Chúng tôi tin tưởng người ký, nên không cần giới hạn thời gian."
Sai lầm. Bảo mật không phải là tin tưởng, mà là giả định thất bại.
Core: Phân tích kỹ thuật – Multisig thiếu timeout là tử huyệt
Tôi mở hợp đồng BridgeValidator.sol. Hàm executeWithSignatures kiểm tra đủ chữ ký (3/5 multisig) nhưng không có biến deadline hay expiration. Theo thiết kế, khi một validator mất quyền kiểm soát private key (bị hack, bị insider đánh cắp), kẻ tấn công có thể gọi execute bất kỳ lúc nào, miễn có đủ 3 chữ ký. Họ có thể chờ đến đêm khuya, cuối tuần, hoặc kỳ nghỉ lễ khi đội ngũ giám sát không trực.
Tôi chạy script mô phỏng kịch bản: nếu kiểm soát 3 trong 5 validator trong 48 giờ, attacker có thể chuyển 7,200 ETH (tương đương 14.4M USD) từ mạng L1 sang L2, sau đó withdraw về địa chỉ của mình. Thời gian thực thi: dưới 2 giờ cho batch 200 giao dịch. Họ có 46 giờ còn lại để ngồi chờ thanh khoản rút hết.
Contrarian: Góc nhìn phản trực giác – Cầu nối quyền riêng tư còn nguy hiểm hơn công khai
Nhiều người nghĩ cầu nối permissioned an toàn hơn vì danh tính người ký được biết. Thực tế ngược lại: vì tin tưởng danh tính, đội dev lười implement các biện pháp bảo vệ kỹ thuật. Trong public bridge như Multisig của Gnosis Safe, đã có sẵn tính năng addOwnerWithThreshold và nonce kiểm tra reentrancy. Nhưng ở cầu nối ngân hàng, họ viết lại từ đầu mà copy-paste sai logic.
Tôi đã kiểm tra 12 bài test khác nhau. 3 trong số đó phát hiện lỗ hổng. Nhưng lỗi thiếu timeout là lỗi dễ khắc phục nhất: thêm một mapping executionDeadline và revert nếu block.timestamp > deadline. Chúng tôi đề xuất 3 bản nâng cấp cấu hình. Ngân hàng sửa trong 2 ngày.
Câu chuyện này cho thấy một vấn đề hệ thống: hầu hết các Layer2 bridge – dù của ngân hàng hay DeFi – đều mắc lỗi tư duy "đủ chữ ký là đủ an toàn". Mà quên rằng điều kiện thời gian là lớp bảo vệ cuối cùng khi chữ ký không còn đáng tin.
Takeaway: Dự đoán lỗ hổng tiếp theo
Trong thị trường giảm này, những kẻ tấn công có nhiều thời gian hơn để tìm điểm mù. Tôi cá rằng 6 tháng tới sẽ có ít nhất một bridge permissioned bị khai thác vì lỗi thiếu timeout hoặc revert không kiểm tra deadline. Đừng đợi đến khi nó xảy ra. Hãy xem lại mã nguồn multisig của bạn ngay bây giờ. Chỉ cần một dòng require(block.timestamp < deadline) – bạn sẽ cứu được cả kho tiền.
Còn tôi? Tôi sẽ đi ngủ. 48 giờ kiểm toán là đủ cho một đời.