

Vào lúc 2:37 sáng ngày 22 tháng 11 theo giờ Bắc Kinh, nhóm nghiên cứu bảo mật CertiK đã phát hiện ra thông qua Skynet rằng dự án Pickle Finance đã bị tấn công và tổng cộng 19,75 triệu DAI trị giá gần 130 triệu RMB đã bị mất.
Kể từ khi Pickle Finance bắt đầu khai thác vào ngày 10 tháng 9, không có cảm giác tồn tại.
Với kinh nghiệm thăng trầm rõ rệt của đội quân lương thực, bản thân các nhà đầu tư luôn duy trì một mức độ cảnh giác nhất định trước sự xuất hiện đột ngột của dự án Pickle.
Tuy nhiên, kể từ khi có được nền tảng cá nhân của V God vào ngày 14 tháng 9, Pickle Gherkin đã đạt được mức tăng gấp 10 lần giá khởi điểm từ nền tảng bằng phẳng với lối chơi DeFi mới và nhiều chứng thực khác nhau trong làn sóng DeFi hỗn loạn.
"Tôi vừa bán chiếc Pickle trị giá 10.000 đô la của mình với giá 5 đô la, và sau khi tôi ngủ, nó trị giá 60 đô la??? Cái này???"
Ngay khi các nhà đầu tư chuẩn bị mua loại mã thông báo thực phẩm mới này hoặc đã tham gia sâu, tin tức được đưa ra vào ngày 23 tháng 11 đã gây sốc cho các nhà đầu tư.
Theo dữ liệu của Messari, kể từ khi Pickle Finance bị hack, token gốc PICKLE của nó đã giảm mạnh 50,12% xuống còn 10,17 đô la, sau đó phục hồi nhẹ. Hiện tại, giá trị thị trường của nó là 11,41 đô la.
tiêu đề phụ
Toàn bộ quá trình tấn công như sau:
Toàn bộ quá trình tấn công như sau:
Bước 1: Kẻ tấn công sử dụng chức năng StrategyCmpdDAIV2.getSuppliedUnleveraged() để lấy số Dai có thể rút trong hợp đồng StrategyCmpdDAIV2 tại địa chỉ 0xcd892a97951d46615484359355e3ed88131f829d, được ghi là Amount_A.
Bước 2: Kẻ tấn công gọi hàm swapExactJarForJar() trong hợp đồng thông minh ControllerV4 có tại địa chỉ 0x6847259b2b3a4c17e7c43c54409810af48ba5210 và chuyển vào lọ bẩn số 1 và số 2, Amount_A và 0, [], [] làm tham số khi gọi.
Trong số đó, jar bẩn số 1 và jar bẩn số 2 do kẻ tấn công tự triển khai và tuân theo hợp đồng thông minh của giao diện IJar, do đó, việc thực hiện logic chức năng token() và các chức năng khác do kẻ tấn công quyết định bản thân anh ấy. Bước này được thiết lập vì chức năng Pickle Finance swapExactJarForJar() không xác minh xem bình đến có phải là địa chỉ hợp đồng thông minh chính thức hay không.
Với việc thực thi hàm swapExactJarForJar(), khi hàm rútForSwap() trong hàm swapExactJarForJar() ở dòng 289 ở trên được thực thi, sau một loạt lệnh gọi hàm, hàm deleverageToMin() và hàm deleverageUntil() tại 0xcd892a97951d46615484359355e3ed88131f829d cuối cùng cũng được thực thi , hãy chuyển mã thông báo (Amount_A) có thể rút trong StrategyCmpdDAIV2 hiện tại sang hợp đồng thông minh PickleJar tại địa chỉ 0x6949bb624e8e8a90f87cd2058139fcd77d2f3f87.
hàm deleverageToMin() và hàm deleverageUntil()
Bước 3: Gọi hàm Earn() trong hợp đồng thông minh PickleJar tại địa chỉ 0x6949bb624e8e8a90f87cd2058139fcd77d2f3f87 (như trong hình trên).
Tổng cộng có ba cuộc gọi được thực hiện để chuyển số pDAI trong PickleJar hiện tại từ địa chỉ 0x6b175474e89094c44da98b954eedeac495271d0f sang hợp đồng thông minh ControllerV4 tại địa chỉ 0x6847259b2b3a4c17e7c43c54409810af48ba5210 Dòng 87 gọi số tiền kiếm được () trong hợp đồng ControllerV4 (như trong hình bên dưới) được hiển thị), chuyển hàm Deposit() vào dòng 152 trong hình bên dưới.
Theo cách này, hàm Deposit() trong hợp đồng StrategyCmpdDAIV2 là 0xcd892a97951d46615484359355e3ed88131f829d được gọi và cDAI với số lượng pDAI trong PickleJar được chuyển thành StrategyCmpdDAIV2.
Bước 4: Gọi lại hàm swapExactJarForJar() trong hợp đồng thông minh ControllerV4 tại địa chỉ 0x6847259b2b3a4c17e7c43c54409810af48ba5210 và chuyển vào các lọ bẩn số 3 và số 4, 0, 0, địa chỉ của hợp đồng thông minh CurveProxyLogic và 0x20 làm tham số .
Ở đây 0x20 là một tham số injection, mục đích là để hợp tác với địa chỉ hợp đồng thông minh CurveProxyLogic để thực thi chức năng add_liquiditya() trong hợp đồng thông minh CurveProxyLogic tại địa chỉ 0x6186e99d9cfb05e1fdf1b442178806e81da21dd8.
Hũ bẩn số 3:
0xa2da08093a083c78c21aeca77d6fc89f3d545aed
Hũ bẩn số 4:
0xa445e12d69e8bd60290f6935d49ff39ba31c6115
Địa chỉ hợp đồng thông minh CurveProxyLogic: 0x6186e99d9cfb05e1fdf1b442178806e81da21dd8
Sau bước này, dung lượng lưu trữ trong StrategyCmpDAIV2 được chuyển từ hợp đồng thông minh StrategyCmpDAIV2 sang hợp đồng thông minh ControllerV4 trong bước thứ ba.
Cho đến nay, tất cả các mã thông báo có thể rút được lưu trữ trong hợp đồng thông minh ControllerV4 dưới dạng cDAI và kẻ tấn công có đủ điều kiện để rút cDAI.
Trong bước thứ năm, kẻ tấn công gọi hàm redeUnderlying() trong hợp đồng thông minh CErc20Delegator tại địa chỉ 0x5d3a536e4d6dbd6114cc1ead35777bab948e3643 và gọi nội bộ CErc20 tại địa chỉ 0xbb8be4772faa655c255309afc3c5207aa7b896fd các chức năng nói dối(), mua lạiUnderlyingInternal() và mua lạiFresh().
Cuối cùng, chuyển đổi tất cả cDAI thu được thành DAI, rút tất cả DAI và hoàn thành cuộc tấn công.
Hàm redeUnderlying() trong CErc20Delegator
Lời khuyên an toàn
Lời khuyên an toàn
Nhiều cuộc tấn công DeFi đã chỉ ra một thực tế: "được kiểm toán" không có nghĩa là nó được đảm bảo về mặt bảo mật.
Thực tế là Pickle Finance đã vượt qua cuộc kiểm toán bảo mật vào tháng 10 hoặc sớm hơn không có nghĩa là tất cả các hợp đồng thông minh mới của họ đã được kiểm tra bảo mật theo thời gian thực.
Lợi nhuận cao đi kèm với rủi ro cao và sự bùng phát của lỗ hổng này cũng là một lời cảnh báo.
Đảm bảo an ninh hoàn chỉnh = kiểm toán bảo mật + phát hiện thời gian thực + bảo vệ tài sản = dịch vụ kiểm toán CertiK +CertiK phát hiện các nhà tiên tri bảo mật trong thời gian thực+Quét nhanh CertiK+Nhóm quỹ bảo vệ tài sản phi tập trung của CertiKShield
Chuỗi dịch vụ và công cụ bảo mật của CertiK đáp ứng nhu cầu bảo mật tài sản của các dự án và người dùng.
Nếu bạn có nhu cầu kiểm toán, vui lòng nhấp vào hộp thoại ở cuối tài khoản chính thức của CertiK và để lại tin nhắn để được tư vấn và báo giá miễn phí!
