SSO Module 2 - Kwetsbaarheden in smart contracts: een diepgaande duik in reentrancy-aanvallen
Smart contracts bieden transparantie, maar brengen risico's met zich mee. Dit artikel belicht kwetsbaarheden zoals reentrancy, met het verlies van $150M bij DAO als voorbeeld. Integer overflow leidde tot een tegenslag van $900M bij BeautyChain. DAOMaker verloor $4M door fouten in toegangscontrole. Bij flashloan-aanvallen verloor Harves Finance $38M.
Door Markos Mebellis

Op deze pagina
Smart contracts revolutioneren wereldwijde industrieën met hun efficiëntie, transparantie en onveranderlijke eigenschappen. Toch stelt hun open en geautomatiseerde ontwerp ze ook bloot aan risico's. Om hun potentieel te maximaliseren en dreigingen te minimaliseren, is het essentieel om hun kwetsbaarheden en mogelijke aanvalsroutes te begrijpen. Het opstellen en onderhouden van deze contracten vereist zorgvuldige aandacht en naleving van best practices. Dit artikel gaat dieper in op veelvoorkomende kwetsbaarheden en illustreert deze met praktijkvoorbeelden om het begrip te vergroten. Laten we het volgende artikel bekijken, met dank aan Salus Security.
Belangrijkste kwetsbaarheden:
**Reentrancy:** Hier misbruiken aanvallers een hiaat door functies opnieuw binnen te gaan voordat belangrijke bewerkingen zijn voltooid of waarden zijn bijgewerkt.
Reentrancy binnen één functie: Dit gebeurt wanneer een contract interactie heeft met een kwaadwillig contract, waardoor dit laatste een functie opnieuw kan binnengaan. Kwaadwillige contracten kunnen bijvoorbeeld herhaaldelijk de functie 'withdrawBalance' opnieuw binnengaan en zo meer ether weghalen voordat saldi worden bijgewerkt.
Opmerkelijke aanvallen:
- The DAO (2016): Na $150 miljoen te hebben opgehaald, werd het gehackt vanwege codeerfouten. Dit leidde tot een splitsing in het Ethereum-netwerk.
- PolyDex (2021): Verloor $500k door een reentrancy-aanval op het PLX Locker Smart Contract.
- Bacon Protocol (2022): Leed een verlies van $1M door een reentrancy-bug in de lend()-functie.
- Lendf.Me (2020): Verloor ongeveer $24,7 miljoen verspreid over meerdere cryptocurrencies.
**Cross-Function Reentrancy:** Ontstaat door gedeelde statussen tussen verschillende functies en slechte herintredingsbescherming. Het 'balances'-voorbeeld hierboven geeft aan dat ondanks dat 'withdrawAll' bescherming heeft, aanvallers nog steeds de 'transfer'-functie kunnen misbruiken.
Beruchte incidenten:
- DFX Finance (2022): Verloor meer dan $7 miljoen door een aanval die een functie zonder herintredingsbescherming misbruikte.
- Hundred Finance (2022): Verloor ongeveer $6,5 miljoen nadat een herintredingsaanval de borrowFresh-functie misbruikte.
- Fei Protocol (2022): Verloor ongeveer $80 miljoen door een aanval die misbruik maakte van een reentrancy-leemte.
**Cross-contract reentrancy:** Het resultaat van gedeelde statussen tussen verschillende contracten en verkeerde volgordes van variabelewijzigingen. Zelfs als functies bescherming hebben, kunnen andere functies, zoals 'burnAccount', nog steeds worden misbruikt.
Prominente aanvallen:
- Rari Capital (2021): Verloor in minder dan een uur ongeveer $10 miljoen (~2600 ETH).
- ValueDefi (2021): Verloor 5345.314 WBNB door ongeldige aandeelberekeningen die afhankelijk waren van externe gegevens.
Alleen-lezen reentrancy:
Read-only reentrancy misbruikt een functie die, hoewel deze de status van het contract niet wijzigt, toch foutieve uitvoer kan produceren wanneer de status niet consistent is.
Noemenswaardige aanvallen:
- QuickSwap (2022): Aanvallers misbruikten een flash loan om de spotprijs van het asset te manipuleren en zo 138 ETH en 700 MATIC-tokens te ontfutselen. Dit was mogelijk door een fout in het Curve LP-orakel.
- dForce (2023): Een read-only reentrancy-bug zat in de code die prijsorakels op de Arbitrum- en Optimism-chains met Curve Finance benaderde.
- Sentimente (2023): Een aanval die misbruik maakte van een read-only reentrancy-fout leidde tot een diefstal van $1 miljoen. Gelukkig werd 90% teruggegeven door de dader.
- Sturdy (2023): Verloor ongeveer 442 ETH door een read-only reentrancy-probleem bij Balancer, waarbij de prijs van B-stETH-STABLE werd gemanipuleerd.
Preventie van reentrancy-kwetsbaarheden:
- Houd altijd het check-effect-interaction-patroon aan.
- Gebruik re-entry-bescherming voor alle gevoelige bewerkingen.
- Behandel elke externe aanroep zorgvuldig.
Integer Overflow:
Wanneer berekeningen de limieten overschrijden, treden overflows op, wat vaak leidt tot extreem kleine of extreem grote waarden.
Illustratieve aanvallen:
- BeautyChain (2018): Aanvallers bemachtigden 10^58 BEC's via een integer overflow en dumpten een duizelingwekkende $900 miljoen.
- Poolz (2023): Resulteerde in een verlies van ongeveer $665.000 op Ethereum, Binance en Polygon on-chain.
Tegenmaatregelen tegen integer overflow:
- Gebruik veilige berekeningsmethoden zoals de safeMath-bibliotheek.
- Geef prioriteit aan grenscontroles om te waarborgen dat resultaten binnen het bereik blijven.
- Gebruik solidity-compilerversie 0.8.0 of later voor ingebouwde overflowdetectie.
Toegangsbeheer:
Kwetsbaarheden in toegangsbeheer ontstaan door het ontbreken van strikte toegangsbeperkingen op functies die cruciale bewerkingen uitvoeren.
- Bekende aanvallen:
- DAOMaker (2021): maar liefst ~$4M werd weggesluisd nadat de
init-functie kwetsbaar bleef. - GymNetwork (2022): Exploitanten maakten misbruik van een authenticatiefout in depositFromOtherContract(), waardoor ze illegale balansverhogingen konden doorvoeren zonder enige daadwerkelijke betaling. De schade? Ongeveer 2.475,91 WBNB.
- Tempdao (2023): Een lakse benadering van toegangscontrole voor de functie migrateStake leidde tot een verlies van meer dan $2,34 miljoen.
Toegangscontrole-kwetsbaarheid
- Beschrijving: Kwetsbaarheden die ontstaan door onvoldoende beperkingsmechanismen die de toegang en privileges tot specifieke bewerkingen binnen een systeem regelen.
Preventiemaatregelen:
- Strikte rechtencontrole: Handhaaf altijd strikte machtigingsprotocollen voor functies, vooral voor functies die gevoelige bewerkingen uitvoeren.
- Multi-handtekeningmechanisme: Gebruik voor taken die gezamenlijke besluitvorming vereisen multi-handtekeningprotocollen die meerdere goedkeuringen vereisen voordat gevoelige bewerkingen worden uitgevoerd.
Veelvoorkomende aanvalsvectoren
- Beschrijving: Verschillende methoden of kanalen waarmee aanvallers kwetsbaarheden in een systeem misbruiken, voornamelijk in smart contracts.
Opmerkelijke voorbeelden:
- FlashLoan-aanvallen: Misbruikt de directe leenfunctie van gedecentraliseerde financiële systemen om kwaadwillige activiteiten uit te voeren.
- Front-Running: Aanvallers krijgen kennis van de lopende transactie van een andere gebruiker en handelen ernaar door een hogere gasvergoeding te bieden.
FlashLoan-aanval
- Beschrijving: Hoewel het op zichzelf geen aanval is, is FlashLoan een DeFi-functie waarmee gebruikers direct grote bedragen kunnen lenen zonder onderpand. Het is misbruikt door logische fouten in contractinteracties en -relaties.
Opmerkelijke aanvallen:
- Harves Finance (2020.10.26): Resulteerde in een verlies van $38 miljoen.
- InverseFinance (2022.6.16): Leidde tot een verlies van 53,2445 WBTC en 99.976,29 USDT.
- NewFreeDAO (2022.9.8): 4.481 WBNB weggesluisd, gelijk aan ongeveer $1,25 miljoen.
- Lodestar (2022.12.11): Misbruikt via orakelprijsmanipulatie.
- 0vix (2023.4.28): Resulteerde in een verlies van $2 miljoen op de Polygon-keten.
Aanbevelingen ter preventie:
- Herken Flashloan-kenmerken tijdens de projectontwikkeling.
- Gebruik tijdgewogen gemiddelden of meerdere orakels voor een nauwkeurige prijsbepaling.
Front-running
- Beschrijving: Een aanvaller verkrijgt kennis van de transactie van een andere gebruiker uit de memPool en maakt daar misbruik van door een hogere gasvergoeding te bieden.
Opmerkelijke aanvallen:
- Sushi Badger Digg (2021.1.25): Resulteerde in een verlies van 81,68 ETH.
- Sushiswap Ape-ETH-pool (2022.5.17): De aanvaller verdiende ongeveer 0,3 ETH.
- Uniswap (2023.4.2): Veroorzaakte ongeveer $25 miljoen verlies door een sandwich-aanval.
Aanbevelingen ter preventie:
- Gebruik slippagebescherming bij het handelen.
- Voer transacties uit buiten piekuren, vooral in volatiele markten.
- Gebruik FlashBot rpc van 1inch om transacties rechtstreeks naar miners te sturen en zo de memPool te omzeilen.
Samenvatting
Gefeliciteerd! Je hebt Module 2 voltooid - Kwetsbaarheden in smart contracts: een diepgaande duik in reentrancy-aanvallen en veelvoorkomende exploits
Laten we je leerpunten doornemen:
Reentrancy-kwetsbaarheden - Aanvallers misbruiken hiaten door functies opnieuw binnen te gaan voordat ze volledig zijn afgerond.
- Single-Function Reentrancy: Een kwaadwillig contract gaat opnieuw een functie in een ander contract binnen.
- Cross-Function Reentrancy: Gedeelde statussen tussen verschillende functies worden misbruikt door slechte bescherming tegen opnieuw binnenkomen.
- Cross-Contract Reentrancy: Misbruikt gedeelde statussen tussen verschillende contracten.
- Read-Only Reentrancy: Misbruikt een functie die foutieve uitvoer produceert wanneer de status niet consistent is.
Integer Overflow - Berekeningen die vastgestelde limieten overschrijden, wat leidt tot extreme waarden.
Kwetsbaarheden in toegangsbeheer - Ontstaan door het ontbreken van strikte toegangsbeperkingen op essentiële functies.
Veelvoorkomende aanvalsvectoren - Methoden waarmee aanvallers systeemkwetsbaarheden misbruiken.
**FlashLoan-aanval** - Een DeFi-functie die direct grote leningen zonder onderpand mogelijk maakt, maar wordt misbruikt door logische fouten.
Front-running-aanval- Aanvallers krijgen kennis van lopende transacties en profiteren door hogere gasvergoedingen te bieden.
Dit artikel is u aangeboden door:
