Autor: Jiujiu@slowmist zespół ds. bezpieczeństwa

tło

Według danych wywiadowczych zespołu ds. bezpieczeństwa SlowMist, 4 września 2024 r. zaatakowany został zdecentralizowany projekt zapewniający dochód z płynności Penpie, a osoba atakująca zarobiła prawie 30 milionów dolarów. Zespół bezpieczeństwa SlowMist przeanalizował incydent i podzielił się wynikami w następujący sposób:

(https://x.com/Penpiexyz_io/status/1831058385330118831)

wymagana wiedza

Pendle Finance to zdecentralizowany protokół handlu dochodami finansowymi z zablokowaną łączną wartością ponad 4,5 miliarda dolarów. Protokół pomyślnie zintegrował się z Magpie w celu optymalizacji możliwości generowania przychodów i ulepszenia modelu weTokenomiki. Na tej podstawie w projekcie Penpie wprowadzono funkcję eksploracji płynności, aby umożliwić rynkowi Pendle Finance osiągnięcie dochodu pasywnego.

W Pendle Finance zawarte są następujące ważne koncepcje:

  • PT (Token głównego): reprezentuje zleceniodawcę w określonym momencie w przyszłości. Posiadanie PT oznacza, że ​​jesteś właścicielem kapitału i możesz go wykupić po terminie zapadalności. Na przykład, jeśli posiadasz opcję PT-stETH, która wygasa za 1 rok, będziesz mógł wymienić sETH o wartości 1 ETH po 1 roku.

  • YT (Yield Token): reprezentuje przyszłe zarobki. Posiadanie YT oznacza, że ​​jesteś właścicielem wszystkich zwrotów generowanych w czasie rzeczywistym przez aktywa bazowe i możesz w dowolnym momencie ręcznie ubiegać się o skumulowane zwroty w Pendle. Jeśli posiadasz 1 YT-stETH, a średni zysk ze stETH wynosi 5%, to na koniec roku zgromadzisz 0,05 sETH.

  • SY (Simple Yield): Kontrakt używany do pakowania dowolnego oprocentowanego tokena. Zapewnia ustandaryzowany interfejs do interakcji z mechanizmem generowania zysków z dowolnego oprocentowanego tokena.

  • LPT (Token dostawcy płynności): reprezentuje rynek płynności jako certyfikat zapewniający płynność aktywów bazowych.

  • PRT (token nagrody puli): reprezentuje certyfikat depozytowy tokenów LPT zdeponowanych przez użytkowników w puli Penpie.

pierwotna przyczyna

Sednem incydentu było błędne założenie Penpie, że wszystkie rynki utworzone przez Pendle Finance były zgodne z prawem podczas rejestracji nowych rynków Pendle. Jednakże proces tworzenia rynku w Pendle Finance jest otwarty, co pozwala każdemu stworzyć rynek, a kluczowe parametry, takie jak adres umowy SY, mogą być dostosowywane przez użytkowników. Wykorzystując to, osoba atakująca stworzyła kontrakt rynkowy zawierający złośliwy kontrakt SY i wykorzystał mechanizm, którego pula Penpie potrzebuje do wywołania zewnętrznego kontraktu SY w celu uzyskania nagród, a także wykorzystała pożyczki błyskawiczne, aby dodać dużą ilość płynności na rynek i pula, sztucznie wzmacniająca. Zwiększ kwotę nagrody i osiągaj zysk.

Analiza kroków ataku

Przygotowanie do ataku

Hash transakcji: 0x7e7f9548f301d3dd863eac94e6190cb742ab6aa9d7730549ff743bf84cbd21d1

1. Najpierw atakujący tworzy kontrakty dochodowe PT i YT za pomocą funkcji createYieldContract kontraktu PendleYieldContractFactory, ustawia SY jako adres kontraktu ataku i wywołuje funkcję createNewMarket kontraktu PendleMarketFactoryV3 w celu utworzenia odpowiedniego kontraktu rynkowego 0x5b6c_PENDLE-LPT.

2. Następnie osoba atakująca wykorzystuje rejestrPenpiePool kontraktu PendleMarketRegisterHelper do zarejestrowania puli Penpie. W tym procesie tworzony jest kontrakt na token PRT certyfikatu depozytowego i powiązana umowa nagrody, a informacje o puli są rejestrowane w Penpie.

3. Następnie atakujący wywołuje funkcję mintPY kontraktu YT, aby wybić dużą ilość YT i PT, kwota zależy od kursu wymiany zwróconego przez atakujący kontrakt (kontrakt SY).​

4. Zaraz potem atakujący deponuje PT na rynku 0x5b6c_PENDLE-LPT i wybija tokeny LP.

5. Na koniec atakujący umieszcza tokeny LP w puli Penpie w zamian za tokeny PRT będące certyfikatem depozytowym.

formalny atak

Hash transakcji: 0x42b2ec27c732100dd9037c76da415e10329ea41598de453bb0c0c9ea7ce0d8e5

1. Osoba atakująca najpierw pożyczyła dużą ilość tokenów ageTH i rswETH w ramach pożyczek flash.

2. Wywołaj funkcję BatchHarvestMarketRewards puli Penpie, aby zbierać nagrody z określonego rynku partiami. Ta operacja uruchamia funkcję wykupuRewards kontraktu rynkowego 0x5b6c_PENDLE-LPT.

3. W funkcji releaseRewards zewnętrznie wywoływana jest funkcja ClaimRewards kontraktu SY (umowa ataku), podczas której atakujący wykorzystuje środki pożyczki flash w celu zwiększenia płynności dla tokenów nagrody (tokeny nagrody są celowo ustawione na dwa tokeny rynkowe w kontrakt ataku 0x6010_PENDLE-LPT i 0x038c_PENDLE-LPT) i zdeponuj uzyskane tokeny rynkowe w puli Penpie, aby uzyskać odpowiednie tokeny certyfikatu depozytowego.

4. Następnie te nowo zdeponowane tokeny rynkowe w puli Penpie zostaną wykorzystane jako obliczone nagrody, a następnie te tokeny zostaną przeniesione do kontraktu Nagradzającego poprzez funkcję kolejkiNewRewards kontraktu.

Ponieważ atakujący jest jedyną osobą deponującą pieniądze na rynku 0x5b6c_PENDLE-LPT, można natychmiast wywołać funkcję multiclaim kontraktu MasterPenpie w celu wycofania tej części tokenów LPT z kontraktu Rewarder.

5. Na koniec atakujący spala certyfikat depozytowy PRT uzyskany w trzecim kroku poprzez funkcję wycofaniaMarket kontraktu PendleMarketDepositHelper, odkupuje tokeny rynkowe i usuwa płynność tych tokenów rynkowych wraz z nagrodami wydobytymi w poprzednim kroku, a na koniec pozyskuje tokeny aktywów bazowych (ageETH i rswETH) w celu osiągnięcia zysków.

Streszczać

Ten incydent związany z bezpieczeństwem uwidocznił problem niewystarczającej weryfikacji procesu rejestracji rynku Penpie i nadmiernego polegania na logice tworzenia rynku Pendle Finance, co umożliwiło atakującym kontrolowanie mechanizmu dystrybucji nagród za pomocą złośliwych kontraktów i uzyskanie nadmiernych nagród. Zespół ds. bezpieczeństwa SlowMist zaleca, aby strony projektu dodały mechanizm ścisłej weryfikacji białej listy podczas rejestracji na rynku, aby mieć pewność, że akceptowane będą tylko zweryfikowane rynki. Ponadto w przypadku kluczowej logiki biznesowej obejmującej wywoływanie kontraktów zewnętrznych należy wzmocnić audyt i testy bezpieczeństwa, aby uniknąć ponownego wystąpienia podobnych incydentów.