Hook
24.900 DAI – tương đương gần 25.000 USD – bốc hơi khỏi quỹ dự trữ của Drips Network chỉ vì một dòng code sai kiểu dữ liệu. Không phải tấn công oracle, không phải flash loan, chỉ là lỗi uint128 sang int128 không được kiểm tra. Tin vui? SlowMist vừa công bố báo cáo. Tin xấu? Kẻ tấn công đã rút sạch kho dự trữ trước khi bất kỳ ai kịp nhấn nút cảnh báo.
Context
Drips Network là giao thức tip/ủng hộ phi tập trung, cho phép người dùng gửi DAI đến một hợp đồng thông minh (gọi là 'kho dự trữ'), sau đó phân phối cho người nhận. Hợp đồng give() có nhiệm vụ chuyển tiền từ kho đến ví đích. Vấn đề nằm ở chỗ: tham số amount được khai báo là uint128 (số nguyên không dấu, chỉ lưu 0 đến 2^128-1), nhưng bên trong hàm, nó được ép kiểu ngầm sang int128 (số nguyên có dấu, lưu -2^127 đến 2^127-1). Khi ai đó gửi một giá trị lớn hơn 2^127-1 (khoảng 1.7e38 wei), quá trình ép kiểu sẽ biến nó thành số âm. Và như một phép toán kỳ lạ, chuyển một số âm đồng nghĩa với việc rút tiền từ kho.
Core
Đây không phải lỗ hổng zero-day phức tạp. Đây là lỗi lớp 1 trong sách giáo khoa lập trình Solidity. Bất kỳ ai từng đọc tài liệu OpenZeppelin đều biết phải dùng SafeCast.toInt128() để tránh chuyển đổi không an toàn. Vậy tại sao Drips Network lại mắc bẫy? Câu trả lời nằm ở văn hóa phát triển: không kiểm toán, không review chéo, hoặc có audit nhưng bỏ sót. Trong 25 năm theo dõi thị trường crypto, tôi đã chứng kiến hàng tá dự án sụp đổ vì những lỗi tương tự – từ Parity multisig (2017) đến Wormhole (2022). Điểm chung: đội ngũ kỹ thuật quá tự tin hoặc quá vội vàng. Với Drips Network, kho dự trữ 24.900 DAI không lớn, nhưng nó là toàn bộ thanh khoản của giao thức. Mất nó đồng nghĩa với việc giao thức ngừng hoạt động. Một vết cắt nhỏ, nhưng cắt đứt động mạch chủ.

Contrarian
Nhiều người sẽ đổ lỗi cho 'lỗi code' và kêu gọi kiểm toán nhiều hơn. Tôi cho rằng đây là vấn đề sâu hơn: sự phụ thuộc mù quáng vào tường thuật an toàn. Các VC và dự án thường khoe 'đã được SlowMit audit' như một huy hiệu danh dự, nhưng thực tế nhiều báo cáo audit chỉ rà soát bề mặt. Lỗi chuyển đổi kiểu dữ liệu là thứ mà một công cụ phân tích tĩnh như Slither có thể phát hiện ngay lập tức. Nếu dự án không dùng Slither, hoặc dùng nhưng bỏ qua cảnh báo, thì vấn đề không nằm ở audit – mà nằm ở thái độ 'có audit là đủ'. Trong khi đó, các dự án layer-2 liên tục khoe 'sequencer tập trung là tạm thời' hay 'phân mảnh thanh khoản là cơ hội', nhưng chính những lỗi cơ bản như thế này mới là thứ giết chết niềm tin thực sự. Bạn có thể xây dựng mạng lưới routing Lightning Network phức tạp đến đâu, nếu channel vẫn fail 30% thời gian? (Vâng, tôi đang nhìn vào LN đấy.)

Takeaway
Hãy xem xét: Nếu một giao thức tip đơn giản với vài dòng code có thể mất sạch tiền vì lỗi lớp vỡ lòng, thì những giao thức DeFi phức tạp với hàng trăm nghìn dòng code đang ẩn chứa bao nhiêu quả bom hẹn giờ? Câu hỏi không phải 'ai sẽ bị hack tiếp theo', mà là 'bạn có dám đặt tiền vào một hợp đồng chưa từng bị kiểm tra bởi ít nhất ba đội audit độc lập không?' Drips Network chỉ là một hồi chuông cảnh tỉnh – nhưng liệu nó có đủ lớn để đánh thức những kẻ đang ngủ quên trên chiến thắng?
