

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ụ .
