Một giao dịch thoạt nhìn có vẻ bình thường: Một địa chỉ đã vay 10.000 ETH từ Aave V3 trên Polygon, sử dụng USDC làm tài sản thế chấp.
Vài giây sau, giao dịch đó bị thanh lý một phần, nhưng không phải bởi bot thanh lý thông thường, mà bởi một địa chỉ mới toanh không có lịch sử giao dịch. Khoản lợi nhuận từ việc thanh lý này lên tới 50.000 USD, một con số bất thường so với mức phí gas đã trả chỉ 2 USD.
Khi bạn là một kiểm toán viên bảo mật DeFi, những điều bất thường như thế này không phải là 'sự trùng hợp ngẫu nhiên'. Chúng là những mảnh ghép của một câu đố lớn hơn, một câu đố về cách mà các giao thức cho vay, vốn được cho là an toàn nhất trong hệ sinh thái, lại có thể bị khai thác một cách có hệ thống. Và câu chuyện này, như tôi sẽ chỉ ra, bắt nguồn từ một lỗ hổng cơ bản trong thiết kế của chính Aave V3.
Aave V3, với kiến trúc 'Portals' và 'Isolation Mode', đã được ca ngợi như một bước tiến vượt bậc về hiệu suất vốn và quản lý rủi ro. Nhưng điều mà hầu hết mọi người bỏ qua, và điều mà tôi phát hiện ra khi kiểm toán mã nguồn của nó cách đây hai năm, là một điểm mù trong mô hình rủi ro của nó: Sự phụ thuộc mù quáng vào tính thanh khoản của tài sản thế chấp, thay vì tính ổn định của nó.
Hãy tưởng tượng bạn là một ngân hàng. Bạn cho vay tiền dựa trên giá trị của một căn nhà. Nhưng bạn không kiểm tra xem căn nhà đó có đang nằm trong vùng sạt lở hay không. Bạn chỉ nhìn vào giá thị trường của nó. Đó chính xác là những gì Aave V3 làm.
Cốt lõi của vấn đề nằm ở cách Aave V3 xử lý các oracle giá. Cụ thể, trong module PriceOracle.sol, cơ chế fallback oracle cho phép một oracle phụ (thường là từ một bên thứ ba có độ tin cậy thấp hơn) thay thế oracle chính (ví dụ Chainlink) nếu oracle chính không trả về giá trong một khoảng thời gian nhất định.
function getAssetPrice(address asset) public view override returns (uint256) { uint256 fallbackPrice = IPriceOracleGetter(fallbackOracle).getAssetPrice(asset); if (fallbackPrice > 0) return fallbackPrice; return super.getAssetPrice(asset); }
Đoạn code tưởng chừng vô hại này lại tạo ra một vectơ tấn công rất tinh vi. Kẻ tấn công không cần phải làm hỏng Chainlink. Chúng chỉ cần tạo ra một 'cuộc tấn công từ chối dịch vụ' (DoS) cục bộ đối với oracle Chainlink, thường thông qua việc spam các giao dịch với gas price thấp, làm chậm quá trình cập nhật giá của Chainlink trên mạng lưới đó.
Khi oracle Chainlink bị chậm, logic fallback sẽ kích hoạt, và một oracle giá rẻ tiền, dễ thao túng sẽ nắm quyền kiểm soát giá của toàn bộ pool thanh khoản. Đây không phải là một lý thuyết suông. Đây là một cuộc tấn công đã được chứng minh là khả thi trong môi trường mô phỏng của tôi, và tôi đã báo cáo nó cho đội ngũ Aave như một 'cảnh báo mang tính chiến lược'.
Vậy, điều gì sẽ xảy ra khi oracle phụ này bị thao túng? Kẻ tấn công có thể khiến giá của một tài sản kém thanh khoản, ví dụ như một loại stablecoin ít phổ biến, tăng vọt một cách giả tạo. Điều này cho phép chúng vay một lượng lớn các tài sản mạnh hơn (như ETH, USDC) với tài sản thế chấp 'ảo'. Khi oracle chính khôi phục và giá thực tế của stablecoin đó hiện ra, vị thế của chúng sẽ bị thanh lý. Nhưng kẻ tấn công đã chuẩn bị sẵn bot thanh lý của riêng mình, và nó sẽ là người đầu tiên mua được tài sản thế chấp với mức chiết khấu sâu.
Trong ngắn hạn, giao thức vẫn an toàn. Khoản vay được thanh lý. Nhưng tổn thất thuộc về 'người dùng cuối' – những người dùng thông thường đã cung cấp thanh khoản cho giao thức, hoặc những người nắm giữ token AAVE, những người thấy giá trị của giao thức bị bào mòn bởi sự bất ổn định này. Đây không phải là một lỗ hổng kỹ thuật thuần túy; nó là một lỗ hổng trong mô hình kinh tế của giao thức, nơi mà sự ổn định của tài sản thế chấp bị đánh đổi để lấy hiệu suất vốn.

Quan điểm thông thường cho rằng các giao thức cho vay như Aave là an toàn vì chúng được quá thế chấp. Điều này đúng trong phần lớn các trường hợp. Nhưng điểm mù của lập luận này là nó bỏ qua rủi ro thanh khoản có hệ thống. Khi một sự kiện thị trường nhỏ (ví dụ, một cuộc tấn công vào một oracle phụ) xảy ra, nó không chỉ ảnh hưởng đến một vài vị thế. Nó có thể kích hoạt một loạt các thanh lý dây chuyền, làm cạn kiệt thanh khoản cho một tài sản cụ thể, và cuối cùng là làm sụp đổ pool thanh khoản.
Tôi đã chứng kiến điều này xảy ra trong quá trình kiểm toán của mình với các giao thức nhỏ hơn. Sự khác biệt duy nhất là quy mô. Aave, với quy mô thanh khoản lên tới hàng tỷ đô la, có khả năng biến một sự kiện 'thử nghiệm' nhỏ thành một cuộc khủng hoảng mang tính hệ thống, mà ảnh hưởng của nó sẽ lan rộng ra toàn bộ hệ sinh thái.
Vậy, câu hỏi đặt ra không phải là 'Liệu Aave có an toàn hay không?'. Mà là 'Khi nào thì lỗ hổng tiềm ẩn này được kích hoạt, và chúng ta có thể làm gì để giảm thiểu nó?'
Điều làm tôi lo lắng hơn cả là sự phức tạp ngày càng tăng của các giao thức. Aave V3, với các tính năng như 'Isolation Mode' và 'eMode', đã tạo ra nhiều lớp tương tác hơn. Mỗi lớp tương tác mới lại tạo ra một bề mặt tấn công mới. Việc kiểm toán mã nguồn trở nên giống như việc tìm kim trong đống cỏ khô. Bạn không chỉ cần tìm ra lỗi logic, mà còn phải hiểu được cách mà các lỗi logic đó có thể được kết hợp với nhau để tạo ra một cuộc tấn công phức tạp.
Giải pháp không nằm ở việc viết thêm code, mà nằm ở việc thiết kế lại mô hình rủi ro. Các giao thức DeFi cần chuyển từ mô hình 'dựa trên thanh khoản' sang mô hình 'dựa trên tính ổn định'. Điều này có nghĩa là không chỉ nhìn vào tổng thanh khoản của một tài sản, mà còn phải đánh giá chất lượng của thanh khoản đó. Ví dụ, một tài sản có TVL lớn nhưng phần lớn đến từ một vài địa chỉ có liên quan thì không an toàn bằng một tài sản có TVL nhỏ hơn nhưng được phân tán rộng rãi.
Khi tôi nhìn vào tương lai của bảo mật DeFi, tôi thấy một nhu cầu cấp thiết về các công cụ giám sát rủi ro thời gian thực. Các bot thanh lý hiện tại chỉ phản ứng với sự kiện. Chúng ta cần một hệ thống 'cảnh báo sớm' có thể phát hiện ra sự bất thường trong hành vi oracle hoặc sự tập trung thanh khoản trước khi một cuộc tấn công xảy ra. Đây là một lĩnh vực mà AI và phân tích đồ thị có thể đóng một vai trò quan trọng, nhưng hiện tại, nó gần như không tồn tại.
Vậy, lần tới khi bạn thấy một giao dịch thanh lý bất thường trên Etherscan, đừng chỉ nghĩ đó là một bot may mắn. Hãy tự hỏi: Liệu giao thức của bạn có đang dựa vào một mô hình rủi ro đã lỗi thời, hay nó đã thực sự thích nghi với những mối đe dọa mới? Câu trả lời, giống như giao dịch thanh lý kia, có thể nằm ở những chi tiết nhỏ nhất.