Kilka zdecentralizowanych protokołów finansowych zostało w niedzielę zaatakowanych przez napastników, którzy ukradli kryptowaluty o wartości ponad 24 milionów dolarów. Atakujący wykorzystali lukę w pulach płynności na Curve, zautomatyzowanej platformie animatora rynku.
Luka została prześledzona wstecz do Vyper, alternatywnego, zewnętrznego języka programowania dla inteligentnych kontraktów Ethereum, zgodnie z Curve na Twitterze. Curve powiedział, że inne pule płynności, które nie wykorzystują tego języka, są w porządku.
Liczba stabilnych pul (alETH/msETH/pETH) korzystających z Vyper 0.2.15 została wykorzystana w wyniku nieprawidłowego działania blokady reentrancy. Oceniamy sytuację i będziemy informować społeczność w miarę rozwoju sytuacji.
Inne pule są bezpieczne. https://t.co/eWy2d3cDDj
– Curve Finance (@CurveFinance) 30 lipca 2023
Pule płynności to inteligentne kontrakty, które przechowują tokeny i mogą zapewnić płynność rynkom kryptowalut w sposób, który nie opiera się na pośrednikach finansowych. Jak jednak przekonało się w niedzielę kilka projektów, niewielki błąd może przynieść znaczne straty.
Kryptowaluta o wartości 11 milionów dolarów została skradziona z protokołu pożyczkowego NFT JPEG’d, według zdecentralizowanej firmy zajmującej się bezpieczeństwem finansowym Decurity. JPEG’d był jednym z pierwszych, którzy zidentyfikowali problem ze swoją pulą na Curve.
„Nastąpił atak”, powiedział JPEG’d na Twitterze. „Przyjrzeliśmy się tej sprawie w momencie, gdy zostaliśmy o niej poinformowani i […] sprawa wydaje się być związana z pulą Curve”.
JPEG’d umożliwia użytkownikom publikowanie NFT jako zabezpieczenia pożyczek. Jeśli chodzi o aktywa zdeponowane w JPEG’d, protokół ma całkowitą zablokowaną wartość (TVL) około 32 milionów dolarów. JPEG’d powiedział, że kod odpowiedzialny za przechowywanie NFT i funduszy skarbowych pozostał nienaruszony.
Według danych CoinGecko, token zarządzania protokołem JPEG spadł o 23% w chwili pisania tego tekstu. W niedzielę moneta osiągnęła najniższy w historii poziom 0,000347 USD.
W usuniętym już tweecie Curve początkowo opisał lukę jako zwykły atak „re-entrancy” tylko do odczytu, którego można było uniknąć. Atak typu re-entrancy ma miejsce, gdy inteligentny kontrakt wchodzi w interakcję z innym kontraktem, który z kolei oddzwania do pierwszego kontraktu przed jego pełnym wykonaniem.
Luki w reentrancy pozwalają atakującemu na umieszczenie wielu wywołań w jednej funkcji i nakłonienie inteligentnego kontraktu do obliczenia niewłaściwych sald. Jednym z najbardziej znanych przykładów było włamanie do DAO na Ethereum o wartości 55 milionów dolarów w 2016 roku.
Odpowiadając na konto na Twitterze, które później powtórzyło usunięte oświadczenie, Curve stwierdziło jednak, że jego początkowe wrażenie było błędne.
„Tak, nie tylko do odczytu” – powiedział Curve, dodając, że „nie było żadnych wykroczeń po stronie projektów, które zintegrowały, a nawet użytkowników vypera”.
Tak, nie tylko do odczytu. Brak wykroczeń po stronie projektów, które się zintegrowały, a nawet użytkowników vypera tutaj
– Curve Finance (@CurveFinance) July 30, 2023
Meir Dolev, współzałożyciel i CTO firmy Cyvers zajmującej się cyberbezpieczeństwem, powiedział TCN, że ataki typu re-entrancy są zbyt powszechnym wektorem dla atakujących w celu kradzieży protokołów.
„Są one dość powszechne” – powiedział Dolev. „Można ich uniknąć dzięki odpowiedniemu projektowi i rozwojowi”.
Problem nie był specyficzny dla JPEG. Niedługo po wykorzystaniu protokołu pożyczkowego NFT, Alchemix i Metronome DAO straciły odpowiednio 13,6 miliona dolarów i 1,6 miliona dolarów w podobny sposób, powiedział.
Alchemix przyznał na Twitterze, że aktywnie pracuje nad rozwiązaniem problemu z pulą płynności. MetronomeDAO powiedział na Twitterze, że trwa dochodzenie w sprawie tego, co się stało, opisując atak jako „część szerszego zestawu exploitów”.
Dolev powiedział, że w przypadku JPEG’d atakujący był prowadzony przez bota MEV (maximal extractable value). Bot zidentyfikował transakcję potencjalnego atakującego i uiścił opłatę za wykonanie podobnej transakcji przed nim.
Vyper powiedział na Twitterze, że to kompilator języka programowania zawiódł. Kiedy programista kończy pisać kod, jest on następnie kompilowany z formatu czytelnego dla człowieka do postaci, którą mogą wykonać komputery.
Dolev powiedział, że uniemożliwiło to działanie zabezpieczeń przed ponownym wejściem, które były zawarte w kodzie projektów i powinny chronić przed ponownymi atakami.
„Kompilator, w niektórych wersjach, nie skompilował go we właściwy sposób” – powiedział Dolev. „Ma pewne błędy lub awarie.”