Cum a fost golit Gravity Bridge de 5,4 milioane de dolari fără ca nimeni să spargă codul

Cum a fost golit Gravity Bridge de 5,4 milioane de dolari fără ca nimeni să spargă codul

0 Shares
0
0
0

Cel mai tulburător lucru la jaful care a golit Gravity Bridge de 5,4 milioane de dolari este că nu a presupus nicio spargere. Codul a rămas intact, cheile private nu au fost forțate, niciun contract inteligent nu a cedat sub presiune. Pe 29 mai 2026, atacatorul a făcut ceva mult mai subtil decât atât. A găsit locul în care puntea încetase să mai pună întrebări și a lăsat restul să se întâmple de la sine.

Povestea merită spusă pe îndelete, fiindcă ascunde o lecție pe care industria cripto pare condamnată să o repete la nesfârșit. Aproape fiecare jaf important al ultimilor ani a avut în centru o punte între blockchainuri, iar Gravity Bridge se înscrie în acest șir lung nu prin mărimea pierderii, ci prin felul aproape elegant în care a fost păcălită. Sistemul a făcut exact ce i s-a cerut. Problema a fost că nimeni nu îl învățase să verifice dacă ceea ce i se cerea era adevărat.

Ce este o punte între blockchainuri și de ce conta tocmai aceasta?

Pentru cineva care nu trăiește cu ochii pe grafice și pe exploratoare de tranzacții, ideea de punte cere o explicație simplă. Fiecare blockchain funcționează ca o lume închisă în sine. Ethereum nu vorbește în mod natural cu Cosmos, iar un token aflat pe o rețea nu poate pur și simplu să sară pe alta. Aici intervine puntea, care blochează un activ real pe o parte și creează, pe cealaltă parte, o reprezentare a lui, astfel încât oamenii să își poată muta valoarea dintr-un ecosistem în altul.

Gravity Bridge era exact un astfel de coridor între Ethereum și Cosmos, prezentat ca o alternativă descentralizată la punțile bazate pe semnături multiple controlate de câțiva oameni. Ideea sună bine pe hârtie. În loc ca un grup restrâns de administratori să decidă ce mișcare este legitimă, un set de validatori observă ce se întâmplă pe Ethereum și confirmă împreună evenimentele înainte ca acestea să producă efecte pe partea Cosmos. Încrederea este distribuită, nu concentrată într-o mână de chei.

Tocmai aici se ascundea capcana. Un sistem care se bazează pe ceea ce observă și confirmă validatorii este la fel de sigur ca informația pe care o primesc validatorii. Dacă cineva reușește să le strecoare în câmpul vizual o minciună bine construită, ei o vor confirma cu toată buna credință din lume, iar semnăturile lor vor fi perfect valide. Puntea va executa apoi ordinul ca și cum ar fi venit din partea cea mai onestă a rețelei.

Pasul tăcut dinaintea loviturii

Înainte de a atinge vreun activ real, atacatorul a făcut ceva ce nimeni nu a observat la momentul respectiv. S-a strecurat înăuntru. Folosind un pseudonim banal, julia666, și-a înregistrat un validator pe lanțul Gravity și și-a delegat doar 80 de tokenuri GRAV. Suma este ridicol de mică și nu îi oferea nicio putere reală de vot, nicio influență asupra deciziilor rețelei. Dar nici nu avea nevoie de așa ceva.

Cei 80 de GRAV erau suficienți pentru a trece de o verificare internă care stabilea cine are voie să trimită anumite tipuri de mesaje către punte. Odată înregistrat în setul de validatori, oricât de neînsemnat ar fi fost acolo, orchestratorul atacatorului putea acum să depună aceleași mesaje de confirmare ca validatorii legitimi. Era ca și cum cineva și-ar fi cumpărat un ecuson de angajat fără să aibă vreun rol real în companie, doar ca să poată trece nestingherit de poarta de la intrare.

Detaliul acesta spune mult despre felul în care a fost gândit atacul. Nu a fost o lovitură improvizată, dată în grabă, ci o pregătire metodică, în care fiecare piesă a fost așezată la locul ei cu răbdare, cu mult înainte ca prima monedă să fie atinsă. Analiza tehnică detaliată publicată ulterior de firma de securitate QuillAudits a reconstituit pas cu pas această fază de poziționare și a arătat cât de puțin i-a trebuit atacatorului ca să obțină un punct de sprijin în interiorul sistemului.

Otrăvirea registrului, momentul în care minciuna devine adevăr oficial

Cu piciorul deja înăuntru, atacatorul s-a mutat pe Osmosis, un alt blockchain din universul Cosmos. Osmosis are un modul numit tokenfactory, care permite oricărei adrese să creeze tokenuri noi, gratuit și fără permisiune. Este o funcție perfect legitimă, folosită zilnic de proiecte oneste, însă în mâinile potrivite devine materie primă pentru o fraudă.

Atacatorul a fabricat patru tokenuri lipsite de orice valoare, fiecare gândit să imite un activ real pe care Gravity Bridge îl ținea în custodie pe Ethereum, adică USDC, USDT, WETH și PAXG. Monedele acestea nu reprezentau nimic, nu aveau nici acoperire, nici valoare de piață, ci erau simple etichete goale. Le-a transferat apoi prin protocolul IBC, mecanismul standard de comunicare între lanțurile Cosmos, către lanțul Gravity, unde fiecare a primit un identificator tehnic obișnuit.

Urmează partea genială și, în același timp, dureroasă. Pe partea de Ethereum, contractul Gravity Bridge avea o funcție publică, deschisă oricui, prin care se putea înregistra un token venit din Cosmos. Atacatorul a apelat această funcție de patru ori, iar de fiecare dată, în loc să transmită identificatorul real și banal al tokenului fals, a introdus în acel șir de text adresa contractului real al activului din custodie. Practic, în câmpul de identificare nu a scris numele monedei false, ci adevărata adresă a USDC-ului păstrat de punte.

Funcția a acceptat totul fără să clipească, fiindcă nu exista nicio verificare asupra conținutului acelui șir de text. Oricine putea introduce orice. Contractul a creat un nou înveliș de token și a emis un eveniment care purta în el minciuna, exact așa cum fusese scrisă. Validatorii Gravity, supraveghind cuminte ce se întâmplă pe Ethereum, au văzut evenimentul și au făcut exact ce fuseseră programați să facă, l-au confirmat și l-au semnat. Așa s-a actualizat registrul intern al punții, cel care leagă fiecare token de adresa lui reală, cu o corespondență otrăvită.

Din acel moment, sistemul credea sincer că tokenurile fără valoare ale atacatorului erau de fapt USDC, USDT, WETH și PAXG autentice. Minciuna devenise adevăr oficial, înscris în memoria punții și protejat de semnăturile unor validatori care nu aveau idee ce confirmaseră.

Cele două scăpări din cod care au făcut totul posibil

Ca să înțelegem de ce a funcționat atacul, trebuie privite două defecte care, luate separat, ar fi părut neînsemnate, dar care împreună au deschis ușa larg.

Funcția care credea orice i se spunea

Prima problemă stătea în funcția de înregistrare de pe partea Ethereum. Era publică prin design, ceea ce în sine nu este neapărat o greșeală, fiindcă multe protocoale au funcții deschise. Greșeala era că accepta șirul de identificare a tokenului fără absolut nicio validare a conținutului. Nu controla dacă adresa strecurată acolo aparținea deja unui activ aflat în custodie și nici nu se întreba dacă ceea ce primea avea vreun sens. Lua textul așa cum venea și mergea mai departe.

Aceasta este eroarea clasică pe care orice manual de securitate o repetă până la epuizare. Orice dată care traversează granița dintre două blockchainuri trebuie tratată ca fiind ostilă până la proba contrarie. Principiul nu este nici nou, nici obscur, ci chiar primul lucru pe care ar trebui să îl așeze la temelie orice analiză de securitate cross-chain. Și totuși puntea l-a ignorat exact în punctul în care conta cel mai mult.

Verificarea care exista, dar nu era acolo unde trebuia

A doua scăpare este mai rafinată și aici se ascunde adevărata sofisticare a atacului. Pe lanțul Gravity, funcția care procesa confirmările făcea totuși o verificare. Compara numele, simbolul și numărul de zecimale ale tokenului cu ceea ce era înregistrat pentru identificatorul respectiv. La prima vedere, pare o apărare rezonabilă.

Problema era că aceste metadate nu ofereau nicio garanție reală. Atunci când tokenurile false au fost transferate prin IBC către lanțul Gravity, sistemul le-a generat automat metadatele după o regulă perfect previzibilă. Numele urma un tipar fix, simbolul era pur și simplu denumirea de bază scrisă cu majuscule, iar numărul de zecimale era zero. Atacatorul știa exact ce valori vor fi generate înainte ca transferul să ajungă la destinație, așa că i-a fost de ajuns să potrivească parametrii din apelul său de înregistrare cu aceste valori previzibile, iar verificarea a fost trecută fără efort.

Verificarea metadatelor nu era o apărare, ci chiar lucrul pe care atacatorul îl satisfăcea intenționat. Singura barieră care ar fi oprit întreaga schemă era o verificare de coliziune, un control care ar fi observat că noul token încerca să se înregistreze pe adresa unui activ deja existent în custodie. O astfel de funcție de căutare exista deja în cod, scrisă și funcțională, ba chiar apelată corect într-o altă parte a aceluiași fișier. Doar că nu fusese pusă acolo unde conta și lipsea tocmai din funcția care procesa aceste confirmări.

Aici se află detaliul care transformă povestea dintr-un incident tehnic într-o tragedie aproape literară. Apărarea exista deja, la câteva linii distanță, doar că nu fusese chemată în locul potrivit.

Retragerea perfectă și ieșirea metodică

Cu registrul otrăvit, restul a fost o formalitate. Atacatorul a inițiat retragerile către Ethereum, iar mecanismul intern al punții a căutat în registru, a găsit corespondențele corupte și a returnat adresele tokenurilor reale. Gravity a produs loturile de retrageri, validatorii le-au semnat, iar releele le-au transmis contractului de custodie de pe Ethereum.

Contractul a verificat semnăturile, le-a găsit valide, fiindcă erau cu adevărat valide, și a eliberat activele. Peste 4,3 milioane de dolari în USDC, 434 de mii în USDT, aproximativ 274 de tokenuri WETH și 14,16 unități PAXG au plecat din custodie direct în portofelul atacatorului. Nu s-a declanșat nicio alarmă și niciun semnal de anomalie. Contractul a făcut exact ce i s-a cerut, fiindcă asta face întotdeauna.

Ce a urmat este la fel de revelator ca atacul în sine. Atacatorul a convertit activele furate în ETH și a început să le miște metodic. Fondurile au curs dintr-un portofel principal de stocare către o adresă dedicată spălării, care a trimis sistematic ETH în Tornado Cash, în depozite de câte 10 și 100 de unități, lot după lot, vreme de mai multe zile.

Tornado Cash este un mixer descentralizat care nu cere nicio identificare și nu lasă în urmă vreun custode care să poată fi citat în instanță. Fiecare depozit se topește în bazinul comun, iar urma de pe blockchain se oprește acolo. Traseul a rămas vizibil și tiparul a fost ordonat, însă vizibilitatea nu ajută la nimic atunci când punctul final este o gaură neagră criptografică. Ce intră în Tornado Cash nu mai iese de cealaltă parte într-o formă care să poată fi urmărită.

Cine a observat primul și cine a tăcut

Primul care a tras semnalul de alarmă a fost analistul on-chain cunoscut drept Specter. Pe 29 mai, fără niciun fel de prudență diplomatică, a anunțat public că cheia contractului punții pare să fi fost compromisă, ceea ce ar fi dus la furtul a 5,4 milioane de dolari. A enumerat cele patru active, a publicat două adrese de furt și a marcat contractul vulnerabil. Alerta a fost chirurgicală, dar a sosit după ce paguba fusese deja făcută.

Firma de securitate PeckShield a confirmat la scurt timp suma, iar primele interpretări ale specialiștilor au indicat o compromitere a cheii sau a căii de semnare. Era o concluzie rezonabilă, fiindcă asta arăta înregistrarea de pe partea Ethereum. Nimeni nu se uitase încă pe partea Cosmos, acolo unde fusese pregătit terenul cu mult înainte ca prima retragere să atingă Ethereumul. Publicații de specialitate precum Cointelegraph și The Block au preluat rapid incidentul, în timp ce echipele de cercetare reconstituiau public cronologia evenimentelor.

Răspunsul echipei Gravity Bridge a venit în două postări laconice. Prima, pe 30 mai, la aproape șapte ore după alerta inițială, cerea validatorilor să își oprească nodurile pe durata investigației. A doua, o oră și jumătate mai târziu, anunța că puntea fusese oprită datorită reacției rapide a validatorilor. Cam atât. Nicio cifră, niciun detaliu tehnic, nicio recunoaștere a portofelului inactiv de luni de zile sau a cronologiei pe care cercetătorii o asamblaseră deja la vedere. Firmele de securitate cartografiaseră atacul în câteva ore, iar echipa a publicat două propoziții și a amuțit.

Tăcerea de după și prăbușirea încrederii

Puntea a rămas oprită. Nu a apărut niciun calendar de repornire, niciun plan de compensare și nicio analiză a incidentului. Nimeni nu a explicat public cum a trecut un șir de text fabricat printr-o funcție deschisă fără să fie detectat sau cum a fost coruptă corespondența din registru fără să declanșeze vreo alarmă.

Piața a reacționat previzibil. Tokenul GRAV a scăzut cu aproximativ patru procente la aflarea veștii, apoi și-a revenit parțial spre finalul lunii, o mișcare pe care piețele au citit-o, cu multă bunăvoință, drept stabilizare. Capitalizarea totală ajunsese în acel punct la o sumă care arăta brutal cât de mic era proiectul. Valoarea totală blocată în protocol s-a prăbușit cu 47 la sută într-o singură zi, de la aproape 12 milioane de dolari la puțin peste șase milioane. Nu vorbim despre un protocol cu rezerve adânci, capabil să absoarbă o asemenea lovitură.

Gravity Bridge nu a oferit nicio recompensă de tip white-hat care să tenteze atacatorul să returneze fondurile. Nu a trimis niciun mesaj on-chain, nu a inițiat nicio campanie de marcare a portofelelor și nu a coordonat public cu bursele. A oferit tăcere și un anunț de oprire care, în absența oricărui plan de recuperare, seamănă mai puțin cu o pauză și mai mult cu un sfârșit.

Un an dezastruos pentru punțile cross-chain

Incidentul nu s-a petrecut într-un vid. Anul 2026 a fost catastrofal pentru infrastructura care leagă blockchainurile între ele. Încă de la jumătatea lunii mai, înainte ca Gravity Bridge să fie lovit, PeckShield urmărise deja opt exploatări majore ale unor punți, totalizând peste 328 de milioane de dolari. În aprilie, KelpDAO pierduse aproximativ 290 de milioane într-un atac atribuit grupului Lazarus, structura de hackeri legată de Coreea de Nord.

Pe acest fundal, cele 5,4 milioane furate de la Gravity Bridge par aproape modeste. Ceea ce distinge însă acest caz nu este dimensiunea pierderii, ci felul în care mai multe scăpări mărunte s-au aliniat într-un dezastru. O funcție de înregistrare deschisă oricui accepta date neverificate, în timp ce procesatorul de confirmări scria în registru tot ce primea, fără să compare noua intrare cu activele aflate deja în custodie. Peste această fragilitate de fond se așază un audit semnat în 2022 de Least Authority, finalizat înainte ca acest tip de atac cross-chain să fie recunoscut ca vector real și fără vreun semn că ar fi fost reluat ulterior. Iar când totul a cedat, oamenii ale căror fonduri se aflau în punte nu au primit nimic.

Lecția pe care industria refuză să o învețe

Gravity Bridge nu a căzut pentru că cineva a descoperit un bug strălucit. A căzut fiindcă între o cale de intrare deschisă pe Ethereum și un procesator de confirmări pe Cosmos lipsea o verificare încrucișată esențială. Funcția de pe Ethereum accepta text arbitrar, iar cea de pe Cosmos valida niște metadate previzibile, dar nu compara noua înregistrare cu registrul activelor aflate deja în custodie. Verificarea care ar fi prins totul exista deja, scrisă și funcțională, apelată corect într-o funcție și absentă din cealaltă.

Documentația proprie a proiectului recunoștea deschis natura modelului. Puntea accepta confirmările bazate pe evenimente odată ce setul de validatori semna, în loc să verifice independent evenimentul de pe Ethereum. Validatorii au atestat ceea ce au observat, calea de procesare a scris apoi corespondența în memorie, semnăturile au fost valide, loturile legitime, iar activele reale. Doar adevărul fusese falsificat la sursă.

Întrebarea pe care orice analiză onestă ar trebui să o ridice nu este cum a găsit atacatorul breșa, ci cum au trecut trei ani de funcționare fără ca altcineva să o găsească mai întâi. Când singurul lucru care stătea între un șir de text fabricat și 5,4 milioane de dolari era un apel de funcție lipsă, era doar o chestiune de timp până când cineva avea să dea peste el. Atacatorul nu a avut nevoie să spargă nimic, ci doar să găsească locul unde puntea încetase să mai întrebe dacă ceea ce i se spunea era adevărat. Iar acel loc stătea acolo, în văzul tuturor, încă de la bun început.

Intrebari Frecvente(FAQ)

Ce este Gravity Bridge și ce rol avea?

Gravity Bridge era o punte descentralizată care lega rețeaua Ethereum de ecosistemul Cosmos, permițând mutarea activelor între cele două lumi. Spre deosebire de punțile controlate de câteva semnături, ea distribuia încrederea către un set de validatori care confirmau colectiv evenimentele observate pe Ethereum înainte ca acestea să producă efecte pe Cosmos.

Cum a reușit atacatorul să scoată bani fără să spargă codul?

Atacatorul a exploatat încrederea sistemului în datele primite. A creat tokenuri fără valoare pe Osmosis, le-a transferat pe lanțul Gravity și apoi le-a înregistrat pe Ethereum folosind un șir de identificare fabricat în care a strecurat adresa reală a activelor aflate în custodie. Puntea a acceptat minciuna ca pe un adevăr și a eliberat activele reale când atacatorul a cerut retragerea.

Ce înseamnă otrăvirea registrului de tokenuri?

Puntea ține un registru care leagă fiecare token de adresa lui reală pe Ethereum. Atacatorul a introdus în acest registru o corespondență falsă, prin care tokenurile lui lipsite de valoare erau tratate drept USDC, USDT, WETH și PAXG autentice. Odată coruptă această corespondență, retragerile au returnat automat activele reale.

De ce nu au observat validatorii nimic?

Validatorii confirmă ceea ce observă pe Ethereum. Ei au văzut niște evenimente legitime de înregistrare și le-au semnat în mod corect. Nu aveau cum să știe că șirul de identificare conținea o capcană, fiindcă funcția nu valida conținutul, iar verificarea care ar fi prins coliziunea lipsea din calea de procesare.

Cât a pierdut Gravity Bridge și ce s-a întâmplat cu fondurile?

Au fost sustrase aproximativ 5,4 milioane de dolari în patru active. Atacatorul a convertit totul în ETH și a început să direcționeze fondurile prin Tornado Cash în tranșe de 10 și 100 de unități, vreme de mai multe zile, ceea ce a făcut urmărirea practic imposibilă dincolo de punctul de intrare în mixer.

A existat un audit de securitate al proiectului?

Da, un audit fusese realizat în 2022 de Least Authority, însă acesta a fost finalizat înainte ca acest tip de atac cross-chain să fie înțeles ca un vector real, iar nu există dovezi publice că ar fi fost reînnoit ulterior pentru a acoperi această clasă de vulnerabilitate.

Ce a făcut echipa Gravity Bridge după incident?

Echipa a publicat două mesaje scurte pe 30 mai și a oprit puntea. Nu a oferit o analiză post-mortem, un calendar de repornire, un plan de compensare a utilizatorilor sau o recompensă care să încurajeze returnarea fondurilor.

0 Shares
You May Also Like