Đừng bao giờ tin vào lời hứa; hãy kiểm tra chữ ký.
Tôi vừa mới kết thúc phiên audit thứ 47 trong năm. Lần này là một giao thức lending mới, gọi vốn 100 triệu USD từ tier-1 VCs, đội ngũ full-stack toàn từ FAANG. Họ có whitepaper đẹp, UI mượt, roadmap đầy hứa hẹn. Nhưng tôi chỉ cần một dòng code để phát hiện điều tôi biết từ năm 2017: lỗ hổng không tự biến mất; ai đó phải tìm ra nó.

Lỗi nằm ở hàm setMinCollateral trong hợp đồng quản lý vị thế. Họ cho phép admin đặt giá trị thế chấp tối thiểu xuống 0. Không kiểm tra biên. Không guard. Zero. Điều này có nghĩa là admin wallet — một multisig 2/3 với 2 signer public — có thể set mức thế chấp về 0, bất kỳ ai cũng có thể mở vị thế mà không cần tài sản thế chấp, và rút toàn bộ pool lending.
Đây là một câu chuyện cũ, nhưng nó đang lặp lại trong thị trường tăng này với sự tinh vi hơn. Hãy để tôi dissect nó dưới góc nhìn của một kẻ đã thấy tất cả.
Context: Chu Kỳ Thổi Phồng 2024-2025
Thị trường tăng hiện tại đang che giấu mọi thứ. Mỗi tuần tôi thấy một dự án mới: thường là fork của Aave hoặc Compound, với một twist nhỏ về AI Agent cho vay, hoặc cross-chain yield. TVL của các dự án này đang tăng với tốc độ 500% mỗi tháng — nhưng 90% là từ điểm 0. Họ không có lịch sử audit, không có bug bounty, không có formal verification. Code của họ là nguyên bản từ dự án gốc, chỉ thay đổi vài tham số để tạo 'đổi mới'.
Trong 6 tháng qua, tôi đã audit 12 dự án DeFi mới. Kết quả: 9/12 có lỗ hổng nghiêm trọng có thể dẫn đến mất toàn bộ TVL. 6/12 không có bất kỳ cơ chế nào để dừng khẩn cấp. 3/12 có admin key có thể rút tất cả tài sản. Nhưng VC vẫn chảy vào, vì thị trường đang phấn khích.

Core: Tháo Gỡ Có Hệ Thống
Hãy lấy dự án cụ thể tôi vừa audit (tạm gọi là 'Project Zero'). Họ triển khai trên Arbitrum, có pool USDC/ETH, cam kết APY 25% stable. Từ góc nhìn kỹ thuật, đây là một fork của Compound v3, thay đổi cơ chế lãi suất thành 'dynamic APR' dựa trên oracle bên thứ ba — không phải Chainlink, mà là một oracle 'AI-powered' mới, chưa từng có audit.
Tôi bắt đầu với bytecode. Trong 2 giờ, tôi phát hiện vấn đề đầu tiên: hàm getPrice không có kiểm tra timestamp. Nếu oracle trả về giá cũ hơn 1 giờ, pool vẫn chấp nhận. Điều này cho phép kẻ tấn công gửi một giá cũ, mở vị thế với giá thấp, và thanh lý tất cả.
Vấn đề thứ hai: setMinCollateral không có event emission. Không thể theo dõi ai đã thay đổi tham số này. Không có lịch sử trên chain. Đây là mơ ước của insider attack.
Vấn đề thứ ba, và là nghiêm trọng nhất: trong hàm liquidate, họ không kiểm tra xem vị thế có thực sự bị thanh lý hay không. Một kẻ tấn công có thể gọi hàm liquidate với một vị thế không nợ, và trigger một callback đến hợp đồng attacker, cho phép reentrancy vào pool.
Tôi đã chạy fuzzing với 5.000 trường hợp trên môi trường mainnet fork. Kết quả: 3 lỗ hổng có thể dẫn đến mất hoàn toàn pool trong một giao dịch duy nhất. Chi phí gas: 0.2 ETH. Giá trị pool: 100 triệu USD. Đây là 500.000x lợi nhuận rủi ro.
Contrarian: Góc Nhìn Phản Trực Giác
Nhiều người sẽ nói: 'Nhưng dự án này có audit từ công ty audit lớn!' Đúng, họ có audit từ một công ty tên tuổi trong top 5. Tôi đã đọc báo cáo audit đó. Nó chỉ kiểm tra 30% code coverage, bỏ qua các hàm admin và oracle. Họ đã 'pass' với 3 lỗ hổng medium. Đây không phải là lỗi của công ty audit — đây là lỗi của thị trường: người ta tin rằng một audit là đủ.
Điểm mù lớn nhất của thị trường tăng không phải là kỹ thuật, mà là tâm lý: người ta cho rằng nếu một dự án có TVL lớn, thì nó 'an toàn'. Nhưng TVL không phải là tường lửa. TVL là mồi nhử.
Tôi đã thấy điều này với Terra Luna năm 2022. TVL của Anchor Protocol là 10 tỷ USD. Mọi người nghĩ nó quá lớn để sụp đổ. Nhưng tôi đã phát hiện cơ chế arbitrage tự động thực chất là một vòng lặp bơm xì — không có tài sản thực chống lưng. Tôi đã viết báo cáo 20 trang với biểu đồ on-chain, kết luận 'Luna sẽ về 0'. Mọi người cười. 3 tháng sau, Luna về 0.

Takeaway: Lời Kêu Gọi Trách Nhiệm
Hãy để tôi kết thúc bằng một câu hỏi: Bạn đã kiểm tra chữ ký của hợp đồng mà bạn sắp gửi tiền vào chưa? Không phải chữ ký của người nổi tiếng endorsing dự án. Chữ ký của bytecode. Chữ ký của hàm setMinCollateral. Chữ ký của oracle contract.
Nếu bạn không thể làm điều đó, thì bạn đang đánh bạc, không phải đầu tư. Và trong thị trường tăng này, những người đánh bạc thắng nhiều nhất — cho đến khi họ thua tất cả.
Kinh nghiệm của tôi sau 22 năm trong ngành: lỗ hổng không tự biến mất; ai đó phải tìm ra nó. Câu hỏi là: đó là bạn, hay kẻ tấn công?
Tôi đã từng phát hiện lỗ hổng reentrancy trong Uniswap v2 vào năm 2020, nhận bounty 50 ETH. Tôi đã phân tích BAYC vào năm 2021, phơi bày rủi ro tập trung quyền withdraw. Mỗi lần, tôi đều bị chỉ trích. Nhưng tôi không viết để được yêu mến; tôi viết để bảo vệ sự thật.
Hãy nhớ: phi tập trung? Hãy cho tôi xem phân phối token.
Và đừng bao giờ, trong bất kỳ hoàn cảnh nào, bỏ qua một dòng code kiểm tra giá trị tối thiểu.