DeFi đã nhiều lần gặp phải vụ khai thác lỗ hổng $25 triệu USR của Resolv
Tác giả: Camila Russo, The Defiant
Biên dịch: Deep潮 TechFlow
Vào một sáng Chủ nhật yên tĩnh, có người đã biến 100.000 USD thành 25 triệu USD trong vòng khoảng 17 phút.
Mục tiêu là giao thức stablecoin sinh lợi Resolv. Trước khi Resolv tạm dừng hợp đồng, stablecoin USR của họ đã giảm xuống chỉ còn vài xu. Tại thời điểm viết bài, USR vẫn còn bị lệch giá nghiêm trọng, giá giao dịch khoảng 0,25 USD, giảm hơn 70% trong tuần này.
Cảnh báo không chỉ dừng lại ở Resolv. Fluid/Instadapp đã hấp thụ hơn 10 triệu USD nợ xấu trong một ngày, cùng ngày đó ghi nhận hơn 300 triệu USD rút ròng, lập kỷ lục rút lớn nhất trong lịch sử. 15 kho chứa của Morpho bị ảnh hưởng. Euler, Venus, Lista DAO và Inverse Finance đều đã tạm dừng các thị trường liên quan đến USR.
Cơ chế dẫn đến sự lan rộng của thiệt hại trong vụ lỗ hổng này — định giá stablecoin lệch khỏi 1 USD trong thị trường vay mượn — không phải là điều mới mẻ. Trong vòng 14 tháng qua, ít nhất đã xảy ra bốn lần như vậy.
Việc tạo USR của USR tuân theo một quy trình hai bước ngoài chuỗi: Người dùng gửi USDC qua hàm requestSwap, sau đó một khóa ký số ngoài chuỗi có đặc quyền SERVICE_ROLE sẽ xác nhận số lượng USR phát hành cuối cùng qua completeSwap.
Hợp đồng có giới hạn tối thiểu về số lượng phát hành, nhưng không có giới hạn tối đa. Khóa ký của chủ sở hữu ký gì, hợp đồng sẽ thực thi đúng như vậy.
Kẻ tấn công đã truy cập được vào khóa này thông qua dịch vụ quản lý khóa AWS của Resolv. Họ gửi hai khoản gửi USDC, tổng cộng khoảng 100.000 đến 200.000 USD, rồi sử dụng khóa bị đánh cắp để ký phép tạo ra 80 triệu USR như một phần thưởng. Dữ liệu trên chuỗi cho thấy hai giao dịch này lần lượt tạo ra 50 triệu USR và 30 triệu USR, đều trong vòng vài phút.
“Lỗ hổng USR của Resolv không phải là một lỗi — mà là một chức năng hoạt động theo thiết kế. Đó mới chính là vấn đề,” nhà phân tích trên chuỗi Vadim (@zacodil) nói.
SERVICE_ROLE là một địa chỉ tài khoản bên ngoài bình thường, không phải multi-sig. Khóa quản trị có bảo vệ multi-sig, nhưng khóa tạo USR thì không.
“Resolv đã trải qua 18 lần kiểm toán,” Vadim nói, “Trong đó có một lần phát hiện tên gọi là ‘Thiếu giới hạn trên’.”
Kẻ tấn công đã tiến hành rút lui có hệ thống: đầu tiên chuyển USR đã tạo thành wstUSR (phiên bản đóng gói để staking) để giảm thiểu tác động thị trường, sau đó dùng Curve, Uniswap và KyberSwap để đổi lấy ETH. Ví của họ hiện nắm khoảng 11.400 ETH, trị giá khoảng 24 triệu USD. Các khoản thế chấp bằng ETH và BTC hỗ trợ toàn bộ hệ thống vẫn an toàn trong khi stablecoin sụp đổ.
Lỗ hổng của Resolv thực chất là sự kết hợp của hai sự kiện. Sự kiện đầu tiên là lỗ tạo token, sự kiện thứ hai là sự cố chuỗi thị trường vay mượn liên kết.
Khi USR và wstUSR sụp đổ, mọi thị trường vay mượn chấp nhận chúng làm tài sản thế chấp đều đối mặt với cùng một vấn đề: Các oracle của họ vẫn định giá wstUSR gần bằng 1 USD.
Omer Goldberg, sáng lập viên của Chaos Labs, đã ghi lại cơ chế này. Phát hiện cốt lõi của ông là: “Oracle được mã hóa cứng, nên chưa từng được định giá lại. wstUSR được gắn mác 1,13 USD, trong khi giá giao dịch trên thị trường thứ cấp khoảng 0,63 USD.”
Các nhà giao dịch mua wstUSR với giá thấp trên thị trường mở, rồi dùng Morpho hoặc Fluid để bán với giá oracle 1,13 USD làm tài sản thế chấp, sau đó vay USDC và rời đi.
Tại Fluid, nhóm đã huy động khoản vay ngắn hạn để bù đắp 100% nợ xấu, đồng thời cam kết bồi thường toàn bộ cho người dùng. Trong Morpho, đồng sáng lập Paul Frambot cho biết khoảng 15 kho chứa có nhiều rủi ro, đều theo chiến lược thế chấp dài hạn, rủi ro cao.
Nhà quản lý danh mục nổi tiếng Gauntlet nói: “Một số kho chứa lợi nhuận cao có giới hạn rủi ro.”
Tuy nhiên, D2 Finance đã phản bác trực tiếp, công bố dữ liệu trên chuỗi cho thấy kho USDC Core của Gauntlet đã phân bổ 4,95 triệu USD vào thị trường wstUSR/USDC. Goldberg sau đó nói rằng, kho của Gauntlet chiếm tới 98% thanh khoản cho vay trong thị trường này.
Trong phản hồi bằng văn bản gửi The Defiant, Frambot cho biết: “Chúng tôi luôn nghiên cứu cách trình bày rủi ro một cách toàn diện hơn. Tuy nhiên, chúng tôi không nghĩ rằng vấn đề cốt lõi là thiếu ghi chú.”
Frambot bổ sung: “Morpho không liên quan đến oracle, nghĩa là nó cho phép curator chọn bất kỳ oracle nào mà họ cho là phù hợp nhất cho thị trường đó. Morpho là hạ tầng mở, không cần phép, thiết kế để giao phó quản lý rủi ro cho curator.”
“Rất khó để bắt buộc áp dụng các giới hạn ‘đúng’ khách quan trong mọi tình huống,” Frambot nói, “Việc áp đặt các giới hạn ở cấp giao thức cũng có thể cản trở việc thực thi các chiến lược hợp pháp.”
Mặc dù giao thức cơ bản để lại việc quản lý rủi ro cho curator, nhưng một số người trong ngành cho rằng curator chưa thực hiện đúng trách nhiệm của mình.
“Tôi nghĩ rằng thiết kế ngành curator có thiếu sót, vì thực tế không có quá trình curator thực sự diễn ra,” Marc Zeller nói trên X.
Cho đến thời điểm bài viết này, Resolv, Gauntlet và Fluid đều chưa phản hồi yêu cầu bình luận từ The Defiant.
Đây không phải là cuộc tấn công mới. Tháng 1 năm 2025, Usual Protocol đã bị curator MEV Capital cố định USD0++ trong kho Morpho thành 1 USD.
Sau đó, Usual đột ngột điều chỉnh giá mua lại thấp hơn, xuống còn 0,87 USD mà không có cảnh báo nào, khiến người cho vay bị khóa trong kho MEV Capital, tỷ lệ sử dụng của kho này tăng vọt lên 100%.
Tháng 11 năm 2025, sự sụp đổ của xUSD của Stream Finance xảy ra, trước đó curator đã đưa USDC vào vòng quay đòn dựa trên stablecoin tổng hợp này. Khi oracle từ chối cập nhật, khoảng 285 triệu đến 700 triệu USD tài sản trên Morpho, Euler và Silo gặp rủi ro.
Tháng 10 và 11 năm 2025, Moonwell liên tiếp gặp hai lần lỗi oracle, gây ra hơn 5 triệu USD nợ xấu.
Cấu trúc của Morpho giao toàn bộ quyết định rủi ro cho bên thứ ba gọi là “curator,” họ xây dựng kho chứa, chọn tài sản thế chấp, thiết lập tỷ lệ vay và chọn oracle. Lý thuyết này cho rằng, các tổ chức chuyên nghiệp có kiến thức sâu hơn, cạnh tranh sẽ mang lại quản lý rủi ro tốt hơn, và giao thức chỉ thực thi các quy tắc.
Tuy nhiên, curator dựa vào lợi nhuận sinh ra để kiếm phí, tạo ra động lực chấp nhận các tài sản thế chấp có rủi ro cao hơn, lợi nhuận cao hơn (như stablecoin sinh lợi). Vấn đề là, khi các stablecoin này lệch khỏi giá trị 1 USD, thiệt hại sẽ do người gửi tiền gánh chịu, chứ không phải curator.
Trong vụ việc của Resolv, một số robot tự động của curator vẫn liên tục bơm tiền vào các kho bị ảnh hưởng trong vài giờ sau khi lỗ hổng xảy ra, làm tăng thiệt hại.
Lý do sử dụng oracle cố định cho stablecoin sinh lợi là để tránh các biến động ngắn hạn kích hoạt thanh lý không cần thiết. Tuy nhiên, biện pháp này chỉ hiệu quả khi stablecoin duy trì ổn định.
Cơ quan phân tích on-chain Chainalysis trong quá trình điều tra sau sự cố cho biết, cần có khả năng phát hiện trên chuỗi theo thời gian thực.
“Các hợp đồng thông minh trên chuỗi hoạt động hoàn toàn bình thường. Vấn đề rõ ràng nằm ở thiết kế hệ thống rộng hơn và hạ tầng off-chain,” cơ quan này nhận định.