Raz po raz, w najlepszym przypadku słyszymy o, w najgorszym doświadczamy, gdy tokeny niespodziewanie znikają komuś z portfela. Nie raz pisałem już o transakcjach approve i modelu allowance ze standardu ERC-20. Dzisiaj opowiem o sposobie na stracenie środków, które wprawdzie nie zadziała dla wszystkich tokenów, ale doskonale może przyczynić się do straty naszych USDC czy DAI.

Zrozumieć approve

Aby zrozumieć to jak działa dzisiejszy bohater i na czym polega ryzyko, musimy najpierw zrozumieć jak działa model allowance i transakcje approve w standardzie ERC-20. W skrócie, aby smart contract wziął sobie środki z Twojego portfela, musisz mu na to pozwolić. Robisz to właśnie przez transakcje Approve. Zmienia ona allowance (pozwolenie na użytkowanie) do tokenu w Twoim portfelu dla danego smart contract. Tutaj skupimy się na tym, że smart contract tokenu ma zapisane informacje któremu smart contractowi pozwoliłeś na korzystanie z tego tokenu i w jakiej ilości.

Dokładnie ten mechanizm i zagrożenia z nim związane opisałem w poniższym artykule. Polecam serdecznie, dla własnego dobra i bezpieczeństwa, przeczytać go zanim będziesz kontynuuował czytanie tego artykułu:

Polecam też przeczytać kolejny artykuł, w którym opisuje to, w jaki sposób portfel Metamask pomaga na zarządzać naszymi pozwoleniami i dbać o bezpieczeństwo naszych tokenów:

Przedstawiamy państwu Permit

No i dochodzimy do głównego bohatera dzisiejszego odcinka. Jest to transakcja Permit.

Nie jest ona częścią standardu ERC-20 więc zdecydowana większośc tokenów jej nie implementuje. Nie są one więc zagrożone niżej opisanym atakiem.

Metoda Permit została wprowadzone przez EIP-2612 i motywacą ku temu było polepszenie doświadczenia użytkownika i ograniczenie ponoszonych przez niego kosztów gasu.

W skrócie polega to na tym, że to nie my musimy wykonać bezpośrednio operację approve, tylko możemy podpisać wiadomość, która na to pozwala. A ta wiadomość może być potem wysłana na blockchain (przy pomocy metody Permit) w innej transakcji (którą niekoniecznie musimy w ogóle wysyłać my).

Na przykładzie giełdy 1Inch rozpoznamy tokeny obsługujące permit poprzez to, że gdy próbujemy jest swapować, to pojawia się guzik Permit and swap:

Po jego kliknięciu portfel wyświetli nam wiadomość do podpisania. Po czym wyskoczy transakcja do podpisania, które wyślę Permit, a następnie dokona transakcji swapa. 

Lista tokenów z tą funkcjonalnością obsługiwaną przez 1inch znajdziesz w ich dokumentacji

I gdzie tu jest zagrożenie? Mianowicie jakaś szemrana dappka może nam wyświetlić message do podpisania, na który my nie zwrócimy uwagi i to podpiszemy. Następnie oni wyślą to potem przez metodę Permit na blockchain, a następnie korzystając z wynikającej z tego zmiany allowance, opróżniają dany token z naszego portfela.

Jak się zabezpieczać

W skrócie: patrzeć co klikasz i podpisujesz. 

Wiadomości do podpisania do transakcji Permit pokazywane są przez Metamask według pewnego schemat. Jest on widoczny na poniższym screenie:

Górna ramka pokazuje nazwę tokenu, którego będzie dotyczyła zmiana allowance. Wprawdzie mamy tutaj tylko ludzką nazwę, ale to wystarczy. Bowiem nawet jeśli byłby to Permit odpalany przez token udający tylko USDC, to zmana allowance też by dotyczyła tego przebierańca, a nie legitnego USDC. Tutaj zastanów się nad tym, czy klikając daną dappkę rzeczywiście chciałeś robić coś z tym tokenem. Jeśli nie (często sign message służy też do logowania czy głosowania, więc bądź uważny, czy Permit nie jest Ci wyświetlany pod jakimś innym pretekstem).
W drugiej, dolnej ramce mamy informacje o parametrach przekazywanych do metody Permit. Są to:

  • Deadline – sygnatura czasu, która mówi o tym, przez jak długi czas nasza podpisana wiadomość zwiększająca allowance jest ważna i powinna przed upływem tego czasu zostać wysłana na blockchain. Nie oznacza to, że po tym czasie nasze allowance zostanie ponownie zmniejszone (cofnięte). Po prostu do tego czasu musi zostać wykonane na blockchainie.
  • Nonce – liczba porządkowa wiadomości zwiększającej allowance. Jest ona po to, aby raz podpisana wiadomość zwiększające uprawnienia nie mogła być potem wielokrotnie wykorzystywana. Wymagane nonce jest zwiększane przy każdej zrealizowanej transakcji Permit, w wyniku czego powtórne przesłanie poprzedniej wiadomości nie jest już poprawne i nie prowadzi do zmiany allowance
  • Spender – Adres smart contractu, któremu udzielamy allowance. Jeśli mamy jakiekolwiek wątpliwości co do tego, co teraz podpisujemy, to warto sprawdzić ten ades w block explorerze. Jeśli nie ma on otwartego kodu źródłowego kontraktu, to powinna być to dla nas czerwona lampka ostrzegawcza. Jeśli kod źródłowy będzie otwarty, nie musi to oznaczać, że jest to dla nas bezpieczne. Wprawdzie zazwyczaj sami nie będziemy mieli dość wiedzy, aby umiejętnie go przeczytać. Warto wtedy sprawdzić ewentualne komentarze użytkowników bądź czy block explorer sam w jakiś sposób nie oznacza, nie ostrzega przed tym kontraktem.
  • Owner – nasz adres
  • Value –  wartość, na jaką zmienimy allowance dla Spendera

Podsumowują: jeśli Metamask prosi Cię o podpisanie wiadomości, która zawiera wyżej listowane pola, to miej świadomość, że jej podpisanie będzie prowadziło do uprawnienia smart contractu do korzystania z Twoich tokenów. Jeżeli taka operacja, w tym momencie korzystania z danego dappsa nie jest Twoim zamiarem (albo nie daj boże dApps wręcz mówi, że podpisanie wiadomości ma służyć czemuś innemu), to warto zastanowić się czy nie wstrzymać tego podpisu. Podejmując tą decyzję zwracajmy uwagę jakiej monety dotyczy ta operacja oraz co sobą rezprezentuje smart contract, któremu udzielimy uprawnień. 

2 comments add yours

  1. Obawiam się że to kolejna z rzeczy która musi być zmieniona na bardziej ludzką, aby zwykły Kowalski rozumiał co robi bo żadne z tych parametrów i ich wartości nie są zrozumiałe nawet dla obcykanego kryptowalutowca.

    • To od tego kryptowalutowca zależy to, czy będzie to rozumiał czy nie.

      Działamy w otwartym ekosystemie, gdzie każdy możne robić wszystko. W tym zrobić nam krzywdę, wykradając nasze środki.

      Jeśli nie chcemy w to wkładać wysiłku, no to musimy oddać się w opiekę jakieś trzeciej strony, która ograniczny dostępne dla nas opcje do tych “bezpiecznych”. Pod warunkiem, że sama się nie wykrzaczy, jak Celcius

Leave a Comment