CertiK: Giải thích chi tiết về khoản lỗ 52 triệu USD của Vyper

Các lỗ hổng trong các phiên bản Vyper 0.2.15, 0.2.16 và 0.3.0 đã được báo cáo, khiến nhiều nhóm trên Curve có nguy cơ bị tấn công lại. Lỗ hổng này cho phép kẻ tấn công gọi chức năng thêm thanh khoản trong quá trình loại bỏ thanh khoản.

Tổng cộng 69,3 triệu đô la đã bị ảnh hưởng cho đến nay, trong đó 16,7 triệu đô la đã bị hacker mũ trắng thu hồi. Điều này cũng có nghĩa là 52 triệu đô la đã bị đánh cắp từ sự cố này, khiến nó trở thành cuộc tấn công reentrancy lớn nhất cho đến nay vào năm 2023.

exsGmBiwYOSH5Seu3C6zysCmJcCD64sdWTvG5w0M.jpeg

Phân tích sự cố Vyper

Tóm tắt sự kiện

Vào ngày 30 tháng 7 năm 2023, các phiên bản 0.2.15, 0.2.16 và 0.3.0 của trình biên dịch Vyper, ngôn ngữ lập trình hướng hợp đồng được thiết kế cho Máy ảo Ethereum (EVM), đã được thông báo là có lỗ hổng lỗi khóa truy cập lại. Nhiều dự án DeFi đã bị ảnh hưởng bởi lỗi này, với tổng thiệt hại lên tới 52 triệu USD.

CertiK đã xác định được sáu địa chỉ liên quan đến vụ việc. Cái đầu tiên (0x172) không thể khai thác lỗ hổng trong khối 17806056. Kẻ khai thác ban đầu đã rút 0,1 ETH từ Tornado Cash và tiến hành tạo hợp đồng tấn công. Tuy nhiên, một ví hàng đầu (0x6Ec21) đã trả nhiều phí gas hơn và thực hiện giao dịch trước, kiếm được khoảng 6.100 WETH (11,4 triệu USD).

YLsgfOUBbfcQ6Pgy77tT2prtmsSHe2U4s7HpuCV3.png

Lỗ hổng lỗi giao dịch trước bởi robot MEV Nguồn: Etherscan Etherscan

Vi phạm dẫn đến tổn thất thêm: EOA 0xDCe5d đã mua tài sản trị giá khoảng 21 triệu đô la. Các chi tiết của ví liên quan như sau:

BQybD6x7JDeb56tNYa5gp3antJdgtukOJp5C71Gw.png

Tổng cộng có sáu dự án bị ảnh hưởng, với khoảng 69,3 triệu đô la bị đánh cắp, trong đó 16,7 triệu đô la đã được trả lại, với tổng thiệt hại khoảng 52 triệu đô la.

Vyper là gì

Vyper là ngôn ngữ lập trình Pythonic theo định hướng hợp đồng cho Máy ảo Ethereum (EVM). Vyper đã ở giai đoạn thử nghiệm từ năm 2017, nhưng phiên bản không phải beta đầu tiên của nó là phiên bản 0.2.1 vào tháng 7 năm 2020.

Solidity, ngôn ngữ thống trị trong hệ sinh thái Ethereum, đã tồn tại lâu hơn nhiều so với Vyper, vì vậy nhiều thành viên cộng đồng đã tạo ra các công cụ chạy độc quyền với Solidity. Theo dữ liệu từ DeFiLlama, trong tổng giá trị bị khóa (TVL) khoảng 70 tỷ đô la Mỹ trong các giao thức DeFi, hợp đồng thông minh Vyper chiếm 2,17 tỷ đô la Mỹ, trong khi Solidity chiếm phần lớn, cao tới 67,49 tỷ đô la Mỹ.

KjMot1urT10BOZJi8lgltDDN62IMhxVncPFncjoP.png

616cb7f4-e84a-479f-bd50-73e2adaec534 Tổng giá trị bị khóa theo nguồn ngôn ngữ: DeFiLlama

Kể từ ngày 10 tháng 5 năm 2023, tỷ lệ thống trị của Vyper đã giảm từ mức cao 30% vào tháng 8 năm 2020 xuống còn 6,27%. Mặc dù sự thống trị TVL của Vyper thấp hơn đáng kể so với Solidity, nhưng sự kiện này vẫn mang lại doanh thu 62 triệu đô la.

8G03pLGwavL4LcDkdTQS5EVlIywScZBcpTb4Fzeb.png

b89a9653-a2d4-4e89-9042-24e06ed1590a (1) Sự thống trị của các ngôn ngữ lập trình khác nhau trong TVL Nguồn: DeFiLlama

Phiên bản biên dịch

Phiên bản trình biên dịch đề cập đến một phiên bản cụ thể của trình biên dịch ngôn ngữ lập trình chuyển đổi mã nguồn mà con người có thể đọc được thành mã có thể đọc được bằng máy.

Các phiên bản trình biên dịch được cập nhật thường xuyên để giới thiệu các tính năng, sửa lỗi và tăng cường bảo mật. Vyper Language hiện không cung cấp chương trình tiền thưởng lỗi cho hacker.

Phiên bản 0.2.15 - 0.3.0

Như đã đề cập ở trên, các lỗ hổng đã được tìm thấy trong các phiên bản Vyper 0.2.15, 0.2.16 và 0.3.0, dẫn đến nhiều dự án DeFi bị tấn công trở lại.

Phiên bản khai thác Vyper sớm nhất 0.2.15 được phát hành vào ngày 23 tháng 7 năm 2021. Vào thời điểm phiên bản 0.3.1 được phát hành vào tháng 12 cùng năm, lỗ hổng trước đó đã không còn tồn tại.

mốc thời gian

Sự cố lần đầu tiên bắt đầu lúc 9:10 tối theo giờ Bắc Kinh vào ngày 30 tháng 7. Giao dịch của kẻ tấn công đối với nhóm JPEG'd trên Curve không thành công do các giao dịch chạy trước.

Ảnh chụp màn hình 2023-07-31 lúc 9:08,31 chiều

Vào lúc 10:00 tối ngày 30 tháng 7, giờ Bắc Kinh, JPEG đã xác nhận rằng pool pETH-ETH Curve đã bị sử dụng với mục đích xấu.

2g2jUlVcktQTJmqFFZUPSVONMA6O9Jbp7HcbQEKd.png

Vyper sau đó đã thông báo rằng các phiên bản 0.2.15, 0.2.16 và 0.3.0 bao gồm một khóa truy cập lại bị hỏng. Metronome và Alchemix cũng bị ảnh hưởng sau khi Vyper tweet.

mRZI1JtH7Qv7Mvk09k7ex0chKgffsFir98ebzqtD.png

Metronome DAO Thông báo:

FTzOyIh9Z8Opc6soNd4zLzAcKQGuLxWY2QEefPPV.png

F9Dh7bMfVanq8deivVbWwhF24E3gbbIpThEq0t5l.png

8MYwVijoFiaJPL32YVTK6AOQHeHsZvZXyxIfmF9h.png

Vào đầu giờ của ngày thứ hai theo giờ Bắc Kinh, Curve Finance đã thông báo trên Discord rằng nhóm quỹ còn lại không bị ảnh hưởng bởi Vyper Bug và an toàn.

PsdIMHoBSb8vtyuFjjlO4ZsCrmKfIC6IY6I40DkB.png

aLVrLdFyKeWEz7Jd1sqydWD4dTUWmpGw8Oj7PY0W.png

Curve Finance đã thông báo trên Twitter rằng một nhóm trên Arbitrum có khả năng bị xâm phạm, nhưng không có cách khai thác sinh lợi nào để các tác nhân độc hại thực thi, nghĩa là nhóm khó có thể bị xâm phạm. CertiK cũng chưa phát hiện bất kỳ cuộc tấn công nào khác khai thác lỗ hổng Vyper.

iqFUjHgxsKZF0Hw4cIndWFLBVQBC8VyjPCrNnDNk.png

Quá trình tấn công

Dưới đây là ví dụ về giao dịch nhắm mục tiêu JPEG'd:

Kẻ tấn công: 0x6ec21d1868743a44318c3c259a6d4953f9978538

Hợp đồng tấn công: 0x466b85b49ec0c5c1eb402d5ea3c4b88864ea0f04#code

1 Kẻ tấn công đầu tiên vay 80.000 WETH (khoảng $149.371.300) từ Balancer: Vault

2 Sau đó, kẻ tấn công hoán đổi WETH lấy ETH, gọi pETH-ETH-f.add_liquidity() và thêm 40.000 ETH (khoảng $74.685.650) vào nhóm pETH-ETH-f. Đổi lại, kẻ tấn công nhận được 32.431 pETH (pETH-ETH-f).

3 Kẻ tấn công gọi remove_liquidity() để xóa thanh khoản đã thêm ở bước 2. 3.740 pETH và 34.316 ETH đã được chuyển sang hợp đồng tấn công và chức năng fallbak() của hợp đồng tấn công đã được kích hoạt, trao quyền kiểm soát cho kẻ tấn công. Trong hàm dự phòng (), kẻ tấn công đã thêm 40.000 ETH thanh khoản khác vào nhóm pETH-ETH-f và nhận được 82.182 pETH.

4 Kẻ tấn công gọi lại remove_liquidity(), lấy đi 10.272pETH và nhận được 47.506 ETH và 1.184pETH. Sau đó, kẻ tấn công đã đổi 4.924 pETH lấy 4.285 ETH trong nhóm pETH-ETH-f.

Tổng cộng, kẻ tấn công đã lấy được 34.316 ETH từ bước 3, 47.506 và 4.285 ETH từ bước 4, tổng cộng là 86.107 ETH. Sau khi hoàn trả khoản vay flash 80.000 ETH, kẻ tấn công còn lại 6.107 ETH (~11.395.506 USD).

Lỗ hổng

Lỗ hổng này cho phép kẻ tấn công gọi chức năng thêm thanh khoản trong quá trình loại bỏ thanh khoản. Mặc dù các chức năng này được cho là được bảo vệ bởi @nonreentrant('lock'), các thử nghiệm trên các chức năng add_liquidty() và remove_liquidity() đã chứng minh rằng nó không ngăn chặn các cuộc tấn công vào lại.

HIhD33yKE94EHwUa7xkQhAzQRF4nscaJOwAPTOmK.png

Vyper_contract cho Curve.fi Factory Pool Nguồn dữ liệu: Etherscan

Các phiên bản Vyper v0.2.15, v0.2.16 và v0.3.0 có lỗ hổng lỗi bảo vệ vào lại sau khi khai thác JPEG'd, Metronome và Alchemix.

Mr3KDb2SKoLhF770OEWBAtdTuOYZ88tchEodweuv.png

giải pháp

Các dự án sử dụng các phiên bản Vyper dễ bị tấn công nên liên hệ với Vyper để được hỗ trợ giảm thiểu. Các dự án cũng nên cố gắng nâng cấp lên phiên bản Vyper mới nhất không chứa lỗ hổng này.

Tóm tắt

Cuộc tấn công vào Vyper là lỗ hổng tái truy cập lớn nhất được CertiK phát hiện vào năm 2023. Về thiệt hại tài chính, cuộc tấn công này chiếm 78,6% các sự cố như vậy.

Hai lỗ hổng reentrancy lớn nhất trong năm đều khai thác các hợp đồng được viết bằng Vyper, mặc dù các lỗ hổng không giống nhau.

Hiện tại, thiệt hại do các cuộc tấn công quay trở lại trên tất cả các chuỗi vào năm 2023 đã vượt quá 66 triệu USD. Con số này nhiều hơn khoảng 4 triệu đô la so với cả năm 2020 và chỉ ít hơn 1 triệu đô la so với khoản lỗ năm 2021. Đáng chú ý, tổng số năm 2023 cũng thể hiện mức tăng 259,45% tổn thất do các cuộc tấn công nhắm mục tiêu lại vào năm 2022.

Xem bản gốc
Trang này có thể chứa nội dung của bên thứ ba, được cung cấp chỉ nhằm mục đích thông tin (không phải là tuyên bố/bảo đảm) và không được coi là sự chứng thực cho quan điểm của Gate hoặc là lời khuyên về tài chính hoặc chuyên môn. Xem Tuyên bố từ chối trách nhiệm để biết chi tiết.
  • Phần thưởng
  • Bình luận
  • Chia sẻ
Bình luận
0/400
Không có bình luận
  • Ghim
Giao dịch tiền điện tử mọi lúc mọi nơi
qrCode
Quét để tải xuống ứng dụng Gate
Cộng đồng
Tiếng Việt
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)