Vào ngày 26 tháng 6 năm 2025, hợp đồng được triển khai bởi giao thức stablecoin Resupply trên mạng chính Ethereum đã bị tấn công và khoảng 10 triệu đô la tài sản đã bị mất. Do sự cố trong việc triển khai oracle giá của hợp đồng có liên quan, đối với Thị trường thanh khoản thấp mới được tạo, kẻ tấn công có thể thao túng giá tương đối (tức là tỷ giá hối đoái giữa tài sản cho vay và tài sản thế chấp) của tài sản cho vay (stablecoin reUSD do Resupply phát hành) thành 0 thông qua một cuộc tấn công quyên góp, do đó bỏ qua kiểm tra tình trạng tài sản và cho vay một lượng lớn reUSD để kiếm lời.
BlockSec đã cung cấp một phân tích sơ bộ sau cảnh báo công khai đầu tiên trên toàn bộ mạng[2, 3]. Resupply cũng đã đưa ra thông báo chính thức sau đó[4], nhưng nhiều chi tiết kỹ thuật không được giải thích chi tiết. Bài viết này sẽ cung cấp một phân tích chi tiết hơn. Mặt khác, sau vụ tấn công, cũng có một cuộc tranh chấp cộng đồng dữ dội giữa bên dự án và các bên liên quan[5]. Bài viết này sẽ phân tích sâu sắc và khám phá mối quan hệ sinh thái phức tạp đằng sau giao thức để độc giả tham khảo.
Bối cảnh
1.1 Giới thiệu về Giao thức Resupply
Resupply là một giao thức stablecoin phi tập trung[1], một phần của hệ sinh thái Curve. Stablecoin do Resupply phát hành được gọi là reUSD, đây là một stablecoin phi tập trung được hỗ trợ bởi các vị thế nợ được thế chấp (CDP) và được hỗ trợ bởi các stablecoin khác kiếm được lãi suất trên thị trường cho vay của các nền tảng bên ngoài, bao gồm crvUSD và frxUSD. Người dùng có thể cung cấp crvUSD và frxUSD để vay reUSD và đạt được tái cấp vốn tài sản stablecoin.

Cụ thể, người dùng có thể thực hiện các hoạt động cho vay và vay trong Thị trường cung cấp lại được triển khai trên chuỗi. Việc tạo và hành vi của Thị trường được quản lý bởi DAO. Mỗi Thị trường chỉ định một Vault ERC-4626 làm tài sản thế chấp (collateral) và sử dụng tài sản tương ứng với Vault làm tài sản cơ sở (underlying). Người dùng vay reUSD bằng cách gửi tài sản thế chấp (Vault hoặc tài sản của Vault) vào Thị trường.
Lấy Market 0x6e90 và Vault 0x0114 tham gia vào cuộc tấn công làm ví dụ, các tài sản liên quan (mã thông báo) liên quan như sau:
Market 0x6e90:
Vault 0x0114:
tài sản: crvUSD (thực tế được lưu trữ trong Curve LlamaLend Controller, cũng là một Market, không quan trọng để hiểu cuộc tấn công)
tài sản thế chấp: wstUSR (tức là tài sản thế chấp của Curve LlamaLend Controller)
đã vay: crvUSD (tức là tài sản thế chấp của Curve LlamaLend Controller
chia sẻ: cvcrvUSD (tức là Vault, token ERC-4626), là phần chia sẻ tương ứng với tài sản
Tức là, người dùng có thể thế chấp một số lượng cvcrvUSD nhất định (hoặc crvUSD, nhưng thực tế sẽ được chuyển đổi thành cvcrvUSD thông qua Vault) trên Market để vay reUSD, như thể hiện trong hình:

1.2 Làm thế nào để xác định xem người dùng có đủ điều kiện để cho vay một tài sản nhất định hay không?
Tương tự như các giao thức cho vay chung, Resupply Market cũng sẽ thực hiện kiểm tra tình trạng tài sản đối với các vị thế của người dùng (thông qua trình sửa đổi isSolvent).

isSolvent cuối cùng sẽ gọi hàm _isSolvent, tại đó nó kiểm tra LTV (Tỷ lệ cho vay trên giá trị, tỷ lệ cho vay trên giá trị hoặc lãi suất cho vay), yêu cầu tỷ lệ LTV giữa tài sản cho vay và tài sản thế chấp của người dùng không được vượt quá giá trị tối đa do hệ thống đặt ra (_ltv <= maxLTV).
Có thể thấy rằng phép tính LTV ở trên phụ thuộc vào tỷ giá hối đoái (_exchangeRate trong mã), tức là giá của tài sản cho vay so với tài sản thế chấp (tỷ lệ hối đoái).
Phân tích cuộc tấn công
2.1 Phân tích nguyên nhân gốc rễ
Theo quan điểm của mã hợp đồng, chìa khóa của cuộc tấn công là có vấn đề với việc triển khai oracle giá của Resupply Market. Đối với một Market có tính thanh khoản thấp mới tạo, kẻ tấn công có thể thao túng tỷ giá hối đoái thông qua một cuộc tấn công quyên góp, do đó bỏ qua kiểm tra tình trạng và cho vay một lượng lớn reUSD để kiếm lời.
Cách tính tỷ giá hối đoái trong Resupply Thị trường?

Theo đoạn mã trên, công thức tính tỷ giá hối đoái như sau:

style="">Rõ ràng là nếu giá trả về bởi getPrices lớn hơn 1e36, làm tròn xuống từ phép chia số nguyên sẽ cho kết quả _exchangeRate = 0.
Tôi thao túng giá như thế nào?


Theo đoạn mã trên, phương pháp tính giá như sau:

Trong số đó:

Vì độ chính xác = 1, DEAD_SHARES = 1000, số lượng chia sẻ = 1e18 được đặt trong mã, do đó:

Cuối cùng, sau khi thay thế các biến, công thức tính giá là sau:

Có thể thấy rằng chìa khóa để khuếch đại giá trị của giá là cách mở rộng khoảng cách giữa total_assets và totalSupply, sao cho total_assets cực kỳ lớn và totalSupply cực kỳ nhỏ. Trong quá trình triển khai giao thức thực tế của Resupply, total_assets trong công thức phụ thuộc vào cơ sở (crvUSD) và totalSupply phụ thuộc vào cổ phiếu (cvcrvUSD) tương ứng với thanh khoản chung trên Thị trường. Đây là kịch bản tấn công quyên góp cổ điển. 2.2 Phân tích các giao dịch tấn công Dựa trên các giao dịch tấn công [4], chúng ta có thể phân tích rằng kẻ tấn công đã thực hiện các hoạt động cốt lõi sau: 1. Vay 4.000 USDC thông qua khoản vay nhanh và đổi lấy 3.999 crvUSD. 2. Đã quyên góp 2.000 crvUSD cho Bộ điều khiển 0x8970.
3. Đã gửi ~2 crvUSD vào Vault 0x0114 và nhận được 1 cổ phiếu (cvcrvUSD).
4. Thêm 1 đơn vị (tức là 1 cổ phiếu của Vault 0x0114) thế chấp vào Thị trường 0x6e90.
5. Vay 10.000.000 reUSD từ Thị trường 0x6e90.

Tại sao _exchangeRate lại bằng 0 tại thời điểm này? Bởi vì kẻ tấn công đã thao túng hợp đồng sang trạng thái sau thông qua các bước trước đó:

Xem lại cách tính tỷ giá hối đoái:

Vì giá > 1e36 tại thời điểm này, _exchangeRate = 0.
6. Đổi reUSD đã vay để kiếm lời.
Bài học kinh nghiệm
Cung cấp lại Việc triển khai oracle giá trong Thị trường bị tấn công tương tự như hợp đồng mẫu do Curve[11] cung cấp:

Tuy nhiên, Curve đã đưa ra phạm vi ứng dụng của việc triển khai này:

Thật không may, Resupply giao thức dường như không được triển khai với lưu ý về khả năng áp dụng này.
Mối quan hệ và tranh chấp cộng đồng
4.1 Mạng lưới quan hệ phức tạp của năm dự án lớn trong hệ sinh thái Curve
Để hiểu được tác động sâu sắc của sự cố Resupply, trước tiên chúng ta hãy xem xét mối quan hệ phức tạp giữa năm giao thức cốt lõi trong hệ sinh thái Curve:

Curve Finance là cốt lõi của toàn bộ hệ sinh thái, cung cấp các nhóm thanh khoản, crvUSD và LlamaLend Giao thức Curve hỗ trợ hoạt động của Resupply, Prisma, Convex và Yearn. Convex tối ưu hóa lợi nhuận của Curve thông qua việc đặt cược và quản trị, đồng thời cung cấp các cơ chế phần thưởng bổ sung cho Prisma và Resupply. Prisma dựa vào token LP của Curve và các chức năng tăng cường lợi nhuận của Convex, trong khi Resupply phát hành reUSD trực tiếp dựa trên LlamaLend của Curve và được Convex và Yearn cùng phát triển. Yearn không chỉ tối ưu hóa lợi nhuận của nhóm Curve mà còn thúc đẩy sự phát triển của Resupply thông qua sự hợp tác với Convex.
Curve Finance: Là một nền tảng cốt lõi, các nhóm thanh khoản của Curve (như nhóm crvUSD) và các giao thức LlamaLend được Resupply sử dụng trực tiếp để phát hành reUSD, Prisma được sử dụng để đặt cược token LP, Yearn được sử dụng để tối ưu hóa lợi nhuận và Convex được sử dụng để quản trị bỏ phiếu.
Convex Finance: Convex là giao thức tăng cường lợi nhuận của Curve. Người dùng có thể nhận được phần thưởng CRV cao hơn và mã thông báo CVX của Convex bằng cách đặt cược mã thông báo Curve LP. Convex kiểm soát gần 50% trọng số quản trị của Curve và cung cấp cơ chế tăng cường lợi nhuận cho Prisma và Resupply.
Prisma Finance: Prisma sử dụng mã thông báo LP của Curve để đặt cược và người dùng nhận được phần thưởng tăng cường thông qua Convex (cvxPRISMA). Prisma dựa vào tính thanh khoản của Curve và cơ chế lợi nhuận của Convex.
Yearn Finance: Yearn là một công cụ tổng hợp lợi nhuận cung cấp cho người dùng lợi nhuận cao bằng cách tối ưu hóa lợi nhuận của mã thông báo LP của Nhóm Curve (chẳng hạn như được Convex tăng cường). Yearn đã hợp tác với Convex để phát triển Resupply và sử dụng rộng rãi các nhóm Curve trong chiến lược lợi nhuận của mình.
Resupply: Được Convex và Yearn phát triển chung, cho phép người dùng có được reUSD bằng cách cho vay các đồng tiền ổn định như crvUSD và tự động đặt cược mã thông báo trên Convex để kiếm phần thưởng CRV và CVX, tạo thành một vòng lặp khép kín của quá trình tối ưu hóa lợi nhuận.
4.2 Tranh cãi và tác động
Tuy nhiên, khi Resupply bị tấn công, mối quan hệ phức tạp này ngay lập tức trở thành tâm điểm của tranh cãi. Người sáng lập Curve Michael Egorov nhanh chóng tách mình khỏi Resupply, nhấn mạnh: "Không có một cá nhân nào từ Curve làm việc trên dự án đó... đừng khái quát hóa thành Curve nhé." Tuyên bố tách mình khỏi dự án này trớ trêu thay lại phản ánh sự mong manh của các mối quan hệ hợp tác phức tạp trong hệ sinh thái DeFi khi đối mặt với khủng hoảng. Các dự án có mối quan hệ liên quan được đề cập ở trên cùng nhau tạo thành một hệ sinh thái có sự kết hợp chặt chẽ - trong một hệ thống như vậy, các vấn đề ở bất kỳ liên kết nào cũng có thể gây ra phản ứng dây chuyền. Do đó, không có gì ngạc nhiên khi sự cố tấn công Resupply đã gây ra các cuộc thảo luận rộng rãi trong cộng đồng về tính phù hợp và bảo mật của giao thức[5].
Thêm suy nghĩ
5.1 Dòng thời gian
Vào ngày 17 tháng 5 năm 2025, địa chỉ chính thức của Resupply 0x1f84 đã triển khai một Thị trường LlamaLend mới[6] thông qua Curve OneWay Lending Factory, nơi:
Vào ngày 31 tháng 5 năm 2025, một đề xuất mới wstUSR-long LlamaLend Market[7] đã được đưa ra trên trang quản trị của Resupply. Đề xuất này nhằm mục đích cho phép người dùng đúc reUSD thông qua Thị trường LlamaLend.
Vào ngày 11 tháng 6 năm 2025, đề xuất đã được phát hành trên chuỗi[8].
Vào ngày 26 tháng 6 năm 2025, 00:18:47 (UTC), đề xuất đã được thông qua và địa chỉ chính thức của Resupply 0x0417 đã triển khai [9] một ResupplyPair mới (tức là, Resupply crvUSD/wstUSR Market) 0x6e90 trên chuỗi. Market này:
Vào ngày 26 tháng 6 năm 2025, lúc 01:53:59 (UTC), khoảng 1,5 giờ sau khi Market 0x6e90 được triển khai trên chuỗi, kẻ tấn công đã thực hiện thành công cuộc tấn công[4]; đồng thời, BlockSec phát hiện ra cuộc tấn công và cố gắng liên hệ với bên dự án.
Vào ngày 26 tháng 6 năm 2025, lúc 02:26 (UTC), sau khi bên dự án không thành công và xác nhận rằng không thể gây thêm tổn thất nào nữa, BlockSec đã đưa ra cảnh báo công khai[2].
Vào ngày 26 tháng 6, 2025, lúc 02:53:23 (UTC), bên tham gia dự án đã đình chỉ thỏa thuận[4]. 5.2 Thảm kịch có thể đã tránh được nếu Phalcon có sẵn Bộ phim thảm họa ResupplyFi được dàn dựng vào đêm khuya và hồi chuông báo động đầu tiên cho toàn bộ mạng đã được BlockSec Phalcon [2] gióng lên: Đây không phải là một suy nghĩ chợt đến, mà là hồi chuông cảnh báo vang lên ngay tại thời điểm cuộc tấn công xảy ra.
Bằng cách giám sát các giao dịch ở giai đoạn nhóm bộ nhớ, Phalcon có thể xác định các mẫu bất thường ngay khi các giao dịch tấn công xâm nhập vào nhóm bộ nhớ. Dựa trên công cụ phân tích thông minh do AI điều khiển, hệ thống tích hợp hơn 200 tính năng tấn công điển hình và đã duy trì tỷ lệ báo động giả cực thấp, dưới 0,0001% trong sáu tháng qua, đạt được khả năng phát hiện mối đe dọa thực sự chính xác.
Khi xác định được mối đe dọa, cuộc tấn công tự động của Phalcon cơ chế chặn được kích hoạt ngay lập tức. Hệ thống sử dụng chiến lược đấu thầu Gas được phát triển độc quyền để đảm bảo rằng giao dịch bảo vệ có thể ngăn chặn trước giao dịch tấn công và tự động kích hoạt chức năng tạm dừng khẩn cấp của giao thức. Toàn bộ quy trình phản hồi hỗ trợ nhiều chế độ kiểm soát quyền như EOA và ví đa chữ ký, cung cấp các giải pháp bảo mật linh hoạt cho các loại giao thức khác nhau.
Nếu Resupply đã tích hợp hệ thống Phalcon khi Market được triển khai, cuộc tấn công có thể được tránh hoàn toàn:
Trong vòng 1,5 giờ sau khi Market 0x6e90 được triển khai, hệ thống Phalcon đã tự động phát hiện việc triển khai Market mới, phân tích thông minh các tham số cấu hình của nó và xác định các rủi ro tấn công quyên góp tiềm ẩn. Hệ thống đã ngay lập tức gửi cảnh báo rủi ro cho bên dự án, đề xuất tăng cường bảo vệ thanh khoản ban đầu hoặc điều chỉnh các tham số có liên quan. Quan trọng hơn, khi giao dịch tấn công nhập vào nhóm bộ nhớ lúc 01:53:59 UTC, thuật toán AI của Phalcon đã ngay lập tức xác định chế độ tấn công quyên góp thông thường, tự động kích hoạt lệnh tạm dừng khẩn cấp giao dịch và đảm bảo rằng giao dịch bảo vệ được thực hiện trước thông qua đấu thầu Gas, do đó tránh hoàn toàn khoản lỗ 10 triệu đô la.
Cung cấp lại Vô số cuộc tấn công, bao gồm hàng chục triệu đô la, cho chúng ta biết rằng trong thế giới DeFi, bảo mật không phải là một lựa chọn, mà là điều cần thiết để tồn tại. Đừng đợi đến cuộc tấn công tiếp theo mới hối hận.