Gặp hai cuộc tấn công trong hai ngày, giao thức DeFi FEG thực sự chịu không nổi
创宇区块链安全实验室
2022-05-18 08:44
本文约2083字,阅读全文需要约8分钟
Giao thức DeFi đa chuỗi FEG đã hứng chịu hai cuộc tấn công trong vòng hai ngày, với tổng thiệt hại hơn 3 triệu đô la Mỹ.

lời tựa

lời tựaBiết Phòng thí nghiệm bảo mật chuỗi khối ChuangyuVào ngày 16 tháng 5 năm 2022, giờ Bắc Kinh,

Vào ngày 17 tháng 5, giao thức DeFi đa chuỗi FEG lại bị tấn công, kẻ tấn công đã đánh cắp 291 ETH và 4343 BNB, đồng thời mất khoảng 1,9 triệu đô la, trong đó BSC là 1,3 triệu đô la và chuỗi Ethereum là 600.000 đô la.

phân tích

Giao thức đã bị tấn công trên cả BSC và Ether và các số liệu bên dưới là giá trị băm giao dịch của các sự kiện tấn công trên hai chuỗi. Lý do chính của cuộc tấn công này là địa chỉ đường dẫn trong hàm swapToSwap() có thể bị kiểm soát bởi kẻ tấn công.

thông tin cơ bản

tiêu đề phụ

thông tin cơ bản

Hợp đồng tấn công: 0x9a843bb125a3c03f496cb44653741f2cef82f445

BSC: 0x818e2013dd7d9bf4547aaabf6b617c1262578bc7

Ether: 0xf2bda964ec2d2fcb1610c886ed4831bf58f64948

Địa chỉ hợp đồng dễ bị tổn thương:

BSC:0x77cf448ceaf8f66e06d1537ef83218725670d3a509583ea0d161533fda56c063

Ether:0x1e769a59a5a9dabec0cb7f21a3e346f55ae1972bb18ae5eeacdaa0bc3424abd2

quá trình tấn công

Tấn công tx:

quá trình tấn công

1. Kẻ tấn công 0x73b3 gọi hợp đồng tấn công được tạo sẵn 0x9a84 để mượn 915,842 WBNB từ DVM, sau đó chuyển đổi 116,81 WBNB thành 115,65 fBNB.

2. Kẻ tấn công 0x73b3 đã tạo 10 hợp đồng bằng cách tấn công hợp đồng 0x9a84 để khai thác lỗ hổng sau này.

3. Kẻ tấn công 0x73b3 thế chấp fBNB đã trao đổi trong bước đầu tiên cho hợp đồng FEGexPRO 0x818e thông qua chức năng DepositInternal().

4. Kẻ tấn công 0x73b3 gọi các hàm DepositInternal() và swapToSwap() để tạo hợp đồng FEGexPRO 0x818e ủy quyền fBNB cho hợp đồng được tạo ở bước thứ hai và liên tục gọi fBNB được ủy quyền cho 10 hợp đồng đã tạo.

5. Vì 10 hợp đồng do kẻ tấn công tạo ra 0x73b3 đã được ủy quyền ở bước trước, nên kẻ tấn công sử dụng các hợp đồng được ủy quyền này để gọi hàm transferFrom() để chuyển 113.452 fBNB mỗi lần từ hợp đồng FEGexPRO 0x818e.

6. Kẻ tấn công 0x73b3 mượn 31217683882286.007 FEG và 423 WBNB từ cặp giao dịch LP 0x2aa7 của PancakePair và lặp lại các bước 3, 4 và 5 ở trên để lấy được.

7. Cuối cùng, trả lại khoản vay flash và chuyển tất cả WBNB thu được từ cuộc tấn công trên sang hợp đồng tấn công 0x9a84.

chi tiết

Bằng cách gọi hàm swapToSwap() để chuyển tham số địa chỉ đường dẫn độc hại, số dư mã thông báo hợp đồng hiện tại sẽ không bị ảnh hưởng, IERC20(address(Main)).approve(address(path), amt); Ủy quyền hợp đồng hiện tại fBNB .

Theo sát

Bằng cách gọi liên tục DepositInternal() và swapToSwap(), kẻ tấn công có thể khiến hợp đồng FEGexPRO ủy quyền liên tục fBNB cho địa chỉ đường dẫn hợp đồng độc hại mà kẻ tấn công đã chuyển vào. Số lượng mã thông báo được chuyển từ các địa chỉ khác là số lượng mã thông báo mà kẻ tấn công đã cam kết lần đầu tiên trừ đi số phí xử lý. Bằng cách kiểm tra thông tin trong Trình gỡ lỗi, chúng tôi có thể thấy rằng các tham số địa chỉ đường dẫn được truyền vào là tất cả các địa chỉ hợp đồng được tạo trong quá trình tấn công.

Theo sát

Sau cuộc tấn công vào ngày 16, những kẻ tấn công đã thực hiện một cuộc tấn công khác vào ngày hôm sau, nhưng đã thay đổi địa chỉ tấn công.

Hợp đồng tấn công: 0xf02b075f514c34df0c3d5cb7ebadf50d74a6fb17

Địa chỉ kẻ tấn công: 0xf99e5f80486426e7d3e3921269ffee9c2da258e2

BSC:0xe956da324e16cb84acec1a43445fc2adbcdeb0e5635af6e40234179857858f82

Ether:0c0031514e222bf2f9f1a57a4af652494f08ec6e401b6ae5b4761d3b41e266a59

Tấn công tx:

tóm tắt

Do hợp đồng lỗ hổng R0X 0xa3d5 không phải là mã nguồn mở nên chúng tôi đã thử phân tích nó từ Trình gỡ lỗi và nhận thấy rằng nó tương tự như quy trình tấn công đầu tiên, nhưng cũng sử dụng chức năng MUA() để gửi tiền phụ và chức năng BÁN() để trích xuất phụ .

创宇区块链安全实验室
作者文库