Stačila trocha drzosti, půjčit si na chvíli pět opic z legendární předražené NFT série Bored Ape Yacht Club a přihlásit se o tokeny za 1,1 milionu dolarů v podobě tzv. airdropu.
Mělo to ale ještě jeden háček. Zapůjčení pěti NFT znuděných opic, nárokování airdropu (bezplatná distribuce kryptoměny na specifické adresy, zpravidla majitelům jiného kryptoaktiva) a vrácení NFT s platbou za jejich výpůjčku muselo proběhnout v jedné jediné transakci – stejném bloku. O to ostatní se již postarala magie takzvaných flashloans, tedy bleskových úvěrů. Již několik let pravděpodobně nejbizarnějšího produktu světa decentralizovaných financí.
Začněme vysvětlením, co je to vlastně bleskový úvěr. Jde o nezajištěnou DeFi půjčku, která je platná pouze v jedné transakci a lze ji zvrátit, pokud není některá z podmínek transakce splněna. Model, který zde útočník (dá-li se mu tak vůbec říkat, protože se technicky ničeho špatného nedopustil) využil, není úplně neznámý. Ve skutečnosti má historický precedens, a ne zrovna jediný.
TIP: Britové chtějí zbavit transakce s kryptoměnami anonymity. Blíží se soumrak kryptoměnových mixérů?
Zneužívání bleskových úvěrů má svoji tradici
Vraťme se na chvíli do roku 2020, kdy došlo k asi nejslavnějšímu flashloan útoku, který tehdy rozpoutal velkou diskuzi o tom, jestli a jakou mají vůbec bleskové úvěry budoucnost.
Během útoku si útočník prakticky bez vlastních prostředků půjčil stovky tisíc dolarů v etheru (10 000 ETH) na platformě Dydx, následně vypůjčené prostředky rozdělil na tzv. zabalené „wrapped“ bitcoiny (ERC token krytý 1:1 bitcoinem) v hodnotě 112 WBTC prostřednictvím DeFi protokolu Compound a zbytek ponechal v Ethereu. Pak útočník na decentralizované burze s pákovým obchodováním (bZX) otevřel short pozici za 1300 ETH proti těmto „zabaleným bitcoinům“ a půjčil si 5637 ETH prostřednictvím Uniswapu na on-chain liquidity protokolu Kyber Network za přibližně 51 WBTC.
Tento manévr způsobil na trhu poměrně výrazný „slippage“ (rozdíl v ceně zadání a vykonání tržních příkazů). Útočník následně realizoval zisk zhruba 318 000 dolarů ze 112 půjčených WBTC, které obratem na téže burze prodal. Díky tomu mohl bez potíží okamžitě splatit úrok za půjčených 10 000 etherů a začít si užívat více než 300 tisíc dolarů zisku.
Incident rozpoutal velkou diskuzi o bezpečnosti bleskových úvěrů. Pokud totiž bleskový úvěr použije někdo ne s úplně dobrými úmysly, může podobnou kaskádou poměrně snadno vytvořit situaci, která povede například k rychlému prudkému propadu ceny, a tak donutit některé DeFi aplikace (tzv. obelstěním oracula) k prodeji za nevýhodnou cenu.
Opice za všechny prachy, nebo obráceně?
Jak s tím souvisí znuděné opice a ApeCoin airdrop? Jednoduše. Ve čtvrtek 17. března tvůrce Bored Ape Yacht Club – Yuga Labs – podle předem oznámeného plánu uvolnil airdropem, který byl původně určený jen pro majitele opičích NFT, svůj ApeCoin (APE). Tým alokoval celkem 150 milionů tokenů, tedy asi 15 % z jejich celkové zásoby, pro držitele opičích NFT. Každý držitel opičího NFT získal 10 094 tokenů v hodnotě mezi 80 až 200 tisíci dolary. Někoho ale napadlo, že by mohl prostřednictvím bleskového úvěru získat airdrop, i když žádnou z opic nevlastní. Napomohl k tomu způsob distribuce tokenů.
Celý trik byl založen na tom, že airdop ApeCoinu nebyl rozdělen na základě snapshotu, který ukazuje, kdo dané NFT vlastnil ve specifickém časovém úseku, ale mohl o něj zažádat kdokoli, kdo vlastnil některou z opic jedné ze dvou opičích sérií v době probíhajícího airdropu. Stačilo si na chvíli půjčit opičí NFT s neclaimnutými tokeny a majiteli zbyly jen oči pro pláč.
Útočník tedy nejprve musel najít trezor obsahující příslušný počet (v našem případě pět) NFT znuděných opic, u kterých ještě neproběhlo vyzvednutí nároku na tokeny. Trezor v daném případě představuje DeFi službu, kde je možné dále tokenizovat vlastněná NFT. Když do trezoru vložíte NFT nebo jejich sérii, vytvoří se běžné zaměnitelné tokeny, které mohou být použité pro staking a sběr odměn nebo dále prodávány – kdo získá všechny vydané tokeny, má právo je vyměnit za podkladové NFT.
Takový trezor našel náš útočník na protokolu NFTX a obsahoval pět znuděných opic – Bored Ape #7594, #8214, #9915, #8167 a #4755 v celkové hodnotě asi 500 ETH (necelých 1,5 milionu dolarů). Protože byla NFT zamčená v trezoru, nebyl zde nikdo, kdo by mohl nárokovat airdrop.
Místo toho, aby si koupil tokeny na vyzvednutí všech pěti opic, si útočník na tržišti OpenSea koupil jedno opičí NFT v hodnotě pod 300 tisíc dolarů a to použil jako zástavu do flashloan půjčky. Bleskový úvěr byl následně použit na nákup velkého objemu tokenů trezoru. Zakoupených tokenů bylo právě tolik, aby stačily na vybrání pěti uložených opičích NFT. Ty pak útočník použil k získání airdropu. Následně všechny opice vrátil do trezoru, tokeny znovu prodal a z utrženého zisku zaplatil úrok z provedené půjčky. Vše, jak zní základní technická podmínka bleskové půjčky, která minimalizuje riziko nevrácení prostředků, muselo proběhnout v rámci jednoho vytěženého bloku, tedy v jedné jediné komplexní transakci. Vychytralý programátor si tímto manévrem přišel na 60 564 ApeCoin tokenů.
Dále už je příběh celkem nudný, tokeny byly obratem prodány na decentralizované burze Uniswap, a to za 399 etherů, tedy asi 1,1 milionu dolarů v době prodeje. Stejně tak bylo zpátky prodáno NFT znuděné opice využité jako zástava do půjčky.
Šlo o útok, nebo chytrou arbitráž?
O tom se teď v bezpečnostní a kryptoměnové komunitě vedou vášnivé spory. Já zastávám názor, že to si musí každý rozhodnout sám. Faktem je, že kdyby chtěl vydavatel airdropu takovému chování předejít, nebylo nic jednoduššího. Stačilo by provést zmiňovaný snapshot, což je zavedená praxe, mohl také stanovit podmínku, že ten, kdo airdrop nárokuje, musí token držet určitou minimální dobu.
Yuga Labs ale udělali něco úplně jiného a udělali to nejspíš z dobrého důvodu. To, že tokeny mohl získat kdokoli, kdo v daný okamžik vlastnil některou z opic, mělo podpořit prodeje. A tato sázka také celkem vyšla, prodej opičích NFT skutečně po oznámení airdropu vystřelil vzhůru.