Nieuws & context

Rhea Finance margin trading exploit: $18,4 miljoen verloren door slippage-bug

$18,4 miljoen verdween uit de reservepool voordat het protocol kon reageren. De kwetsbaarheid zat niet in een signature check of een reentrancy-pad — maar in hoe margin trading zijn eigen slippage-getallen optelde.

Nieuws & contextApril 2026 · 5 min leestijd

Op 16 april 2026 verloor Rhea Finance (voorheen Burrow Finance op NEAR) ongeveer $18,4 miljoen nadat een aanvaller swaps aan elkaar koppelde via zelf opgezette liquiditeitspools en zo geleende fondsen onttrok aan de margin trading-functie. Het protocol zette de getroffen lending contracts binnen enkele uren op pauze, en ongeveer $9 miljoen — grofweg de helft van het gestolen bedrag — is inmiddels teruggevorderd of bevroren, grotendeels USDT dat door Tether werd onderschept.

Er was geen signature bypass of reentrancy-truc. De contracten deden precies wat er geschreven stond. De exploit zat in de slippage-bescherming zelf.

Hoe de exploit werkte

Margin trading op Rhea routeert een reeks swaps door liquiditeitspools. Om ongunstige prijsbewegingen af te schermen, declareert elke swap-stap een min_amount_out — het minimum aantal tokens dat de trader uit die stap accepteert. De slippage-check van het protocol telde deze minima op over alle stappen en vergeleek het totaal met wat er daadwerkelijk terugkwam.

De fout: als de output-token van stap één meteen de input-token is van stap twee, telt de optelling dezelfde token dubbel. Een gekunstelde rondreis van 1.000 USDC door een pool van de aanvaller — 1.000 USDC → 999 nep-tokens → 1 USDC — produceert een gedeclareerd minimum van 999 + 1 = 1.000 USDC, en de check slaagt. In werkelijkheid zit 999 USDC vast in de pool van de aanvaller, en kwam er maar 1 USDC terug.

Op schaal verandert dit een geleende positie in een extractieroute. De swap-keten oogt compliant voor het protocol; de reservepool verliest waarde bij elke cyclus.

De opzet

De aanvaller besteedde enkele dagen aan het voorbereiden van de infrastructuur. Er werden purpose-built nep-tokencontracten ingezet op implicit NEAR accounts — geen metadata, geen upstream gebruik, synthetische assets die alleen bestonden om geswapt te worden — en meerdere nieuwe liquiditeitspools opgezet op Ref Finance, waarbij die nep-tokens werden gekoppeld aan USDC en USDT tegen prijzen die de aanvaller zelf bepaalde.

Met de eigen router op zijn plek opende de aanvaller tientallen margin-posities op Burrow Protocol en sluisde de geleende debt tokens door zijn eigen pools. De posities stonden direct onder water tegen de marktprijs, wat geforceerde liquidaties triggerde die de reservepool leegtrokken. Tijdens de exploit-window werden tussenliggende NEAR accounts snel verwijderd om tracing te bemoeilijken.

Huidige stand van zaken

Het pauzeren van de lending contracts stopte verdere onttrekkingen. Tether bevroor USDT op met de aanvaller gelinkte adressen, en on-chain data laat zien dat ongeveer $9 miljoen inmiddels is teruggevorderd of vastgezet in protocolcontracten en custodiale bevriezingen. De resterende geldstromen bewegen richting gecentraliseerde exchanges, waar Rhea met de betreffende platforms samenwerkt aan identificatie. De compensatieregeling wordt nog uitgewerkt en hangt af van wat uiteindelijk wordt teruggevonden.

De echte les

De code liep zoals geschreven. De kwetsbaarheid zat in de rekenkundige aanname erachter: dat een optelsom van minima over een swap-keten een betekenisvolle ondergrens is voor de uiteindelijke output. Zodra een tussen-token zowel output als input is binnen dezelfde transactie, klopt die aanname niet meer — en audits die de check regel voor regel lezen pikken dat vaak niet op, omdat elke regel op zichzelf er goed uitziet.

Voor on-chain analyse wordt het forensische beeld hier juist makkelijker, niet lastiger. Zodra je een multi-step swap niet langer behandelt als één geaggregeerde beweging, maar kijkt naar dezelfde tussen-token die twee keer binnen één transactie opduikt, valt de rest van de flow — nep-pools, dummy accounts, liquidaties tegen de reservepool — op zijn plek.