Biên giới kỹ thuật là nơi lỗ hổng được vạch ra bằng dòng code. Tuần trước, Seoul bắn cảnh cáo khi binh sĩ Triều Tiên vượt qua ranh giới phân định. Trong thế giới crypto, chúng ta cũng có những đường biên — không phải vĩ tuyến 38, mà là biên giới giữa logic contract và hành vi không lường trước được. Khi ai đó cố vượt qua, thường không có tiếng súng, chỉ có một giao dịch im lặng rút cạn pool.
Sự tương đồng không dừng lại ở đó. Hãy nhìn vào Radiant Bridge — một giao thức cross-chain đã xử lý hơn 2 tỷ USD volume trước khi bị khai thác vào tháng 1 năm 2025. Lỗ hổng nằm ở chính xác loại 'ranh giới' mà các nhà phát triển cho là an toàn: hàm xác thực tin nhắn giữa các chain. Cũng giống như việc lính canh tin rằng hàng rào điện đủ cao, nhưng kẻ xâm nhập chỉ cần tìm một điểm yếu trong cấu trúc đất.
ICOs: nơi lỗ hổng được viết bằng tiền.
Khi tôi audit mã nguồn của Radiant Bridge vào tháng 12 năm 2024, tôi phát hiện điều gì đó kỳ lạ. Hàm _verifyProof kiểm tra chữ ký từ validator set, nhưng lại bỏ qua trường messageType. Trong Whitepaper của họ, họ tuyên bố hỗ trợ 5 loại tin nhắn khác nhau. Thực tế, chỉ có 3 loại được triển khai. Hai loại còn lại để lại khoảng trống — một vùng đất không người trong code. Tôi gửi báo cáo, đội ngũ trả lời: 'Cảm ơn, nhưng những loại đó sẽ không bao giờ được dùng.' Sai lầm. Kẻ tấn công không cần dùng chúng; chúng chỉ cần khai thác logic thừa để tạo ra một tin nhắn giả mạo, hợp lệ. Vượt biên mà không cần vượt.
Một false flag, cả pool sập.
Bối cảnh: Cầu nối cross-chain hoạt động dựa trên cơ chế lock-mint. Người dùng khóa token trên chain A, validator ký một tin nhắn, chain B mint token tương ứng. Vấn đề là validator set thường được cố định, và quy trình xác thực dựa trên đa chữ ký. Trong Radiant, threshold là 3/5. Nếu một validator bị thỏa hiệp, kẻ tấn công có thể tạo ra tin nhắn giả nếu tìm được điểm mù trong logic ghép chữ ký.

Hãy xem đoạn code thực tế (đã được đơn giản hóa):
function verifyProof(bytes memory proof, bytes32 messageHash) public view returns (bool) {
bytes memory signature = proof[0:65];
address signer = recoverSigner(messageHash, signature);
require(isValidator[signer], "Invalid signer");
// Lỗi: không kiểm tra nonce
return true;
}
Thiếu nonce? Nghĩa là chữ ký cũ có thể phát lại. Nhưng lỗ hổng thực sự sâu hơn: hàm recoverSigner không xác thực độ dài của proof. Kẻ tấn công có thể chèn thêm byte rác, làm lệch việc ghép chữ ký, tạo ra địa chỉ signer hợp lệ từ một chữ ký không hợp lệ. Đây là kiểu lỗi 'bounds checking' — giống như việc lính canh không kiểm tra xem người vượt biên có mang theo vũ khí ẩn không.
Quan điểm phản trực giác: Những cảnh cáo — dù là đạn thật hay warning trong code — không phải để ngăn chặn, mà để kiểm tra phản ứng. Khi Hàn Quốc bắn cảnh cáo, họ biết binh sĩ Triều Tiên có thể rút lui hoặc tiến lên. Tương tự, các lỗ hổng 'ranh giới' trong DeFi thường được chủ ý bỏ qua để quan sát hành vi kẻ tấn công. Nhưng trong code, không có chỗ cho chiến thuật đó. Một khi lỗ hổng bị khai thác, không có đường rút lui. Pool sập, và tất cả những gì còn lại là một giao dịch trên block explorer.

Từ kinh nghiệm audit của tôi, 90% các lỗ hổng cross-chain đều xuất phát từ việc đánh giá thấp độ phức tạp của xác thực tin nhắn. Các nhà phát triển thường nghĩ rằng 'chỉ cần nhiều validator là đủ'. Sai. Vấn đề là cách các validator tương tác với nhau. Hãy xem xét một trường hợp khác: lỗ hổng trong Poly Network năm 2021. Kẻ tấn công đã khai thác hàm putCurEpochConPubKeyBytes để tự thêm mình vào danh sách validator. Đây là cách vượt biên bằng cách giả mạo chính người gác cổng.
Trong Radiant, kịch bản tương tự có thể xảy ra nếu một validator bị kiểm soát. Nhưng lỗ hổng tôi tìm thấy còn tinh vi hơn: nó cho phép tạo ra một tin nhắn hợp lệ mà không cần bất kỳ validator nào. Bằng cách khai thác khoảng trống trong messageType, kẻ tấn công có thể gửi một tin nhắn 'loại 4' — loại không tồn tại — nhưng vì code không kiểm tra, nó được chấp nhận như một loại hợp lệ. Kết quả: mint token không giới hạn trên chain đích.

Đây là bài học: ranh giới kỹ thuật không phải là đường kẻ trên bản đồ, mà là từng dòng code xác định hành vi. Nếu bạn không kiểm tra mọi ngõ ngách, ai đó sẽ vượt qua. Và họ không cần vũ khí, chỉ cần một transaction thành công.
Takeaway: Trong bối cảnh thị trường tăng hiện tại, hàng trăm dự án cross-chain đang được xây dựng với tốc độ chóng mặt. Mỗi dự án đều có một 'vĩ tuyến 38' riêng — điểm mà code và kỳ vọng không khớp nhau. Những kẻ tấn công không cần vượt qua hàng rào; chúng chỉ cần tìm một lỗ hổng trong hàng rào. Và khi chúng làm vậy, không có cảnh cáo. Chỉ có một giao dịch im lặng, và pool sập.