Wat is Integer Overflow Attack?
Integer Overflow Attack treedt op wanneer een programma een getal naar de maximale waarde duwt en dat getal weer rondloopt, waardoor een aanvaller saldi of limieten kan verdraaien. In crypto kan die terugloop een controle als “heb je genoeg tokens?” veranderen in ja terwijl het eigenlijk nee had moeten zijn. Denk aan een oude kilometerteller die van 999999 naar 000000 springt, maar nu staat er geld op het spel.
“Moderne compilers maken dit onmogelijk.” Niet helemaal. Veel smart contracts gebruiken op bepaalde plekken nog onbeveiligde rekenbewerkingen, aangepaste wiskunde of assembly die overflowfouten terug kan brengen.
Hoe Integer Overflow Attack werkt
Hier een korte rondleiding met een tokencontract als voorbeeld.
- Stap 1: Het contract bewaart saldi met vaste grootte integers en heeft een functie die bedragen optelt, aftrekt of vermenigvuldigt.
- Stap 2: De aanvaller kiest invoer die een getal voorbij de maximumwaarde duwt, waardoor het terugrolt naar een klein of nulachtig waarde.
- Stap 3: Die terugloop draait een controle om. Voorbeeld: na de terugloop lijkt een balans enorm of een transferlimiet erg klein, waardoor een
requireslaagt. - Stap 4: De aanvaller mint onterecht tokens, omzeilt een cap of verplaatst fondsen die hij niet zou mogen verplaatsen.
- Stap 5: Ze wassen de winst via trades of bridges en zijn vertrokken voordat iemand het doorheeft.
Echt voorbeeld: meerdere ERC 20 tokens hadden ooit een batch overflowfout die aanvallers toestond absurde hoeveelheden te minten en die vervolgens op exchanges te dumpen. Ja, dat is echt gebeurd.
Waarom Integer Overflow Attack belangrijk is
Als je tokens hebt, apps bouwt of in DeFi handelt, is dit relevant. Het gaat om getallen, en getallen sturen crypto.
- Voordeel: Weten hoe dit werkt helpt je rode vlaggen vroeg te herkennen en je geld beter te beschermen.
- Perspectief: Rekenkundige fouten blijven bestaan. Nieuwe chains en tools verschijnen, maar wiskundige fouten worden nog steeds door experts uitgebuit.
- Relevantie: Je ziet dit in tokenvoorraadrekeningen, beloningssystemen, NFT-tellers en populaire dApps die gebruikerssaldi beheren.
In Solidity: houd rekenbewerkingen standaard gecontroleerd en houd unchecked blokken klein en geaudit. Voeg fuzz-tests toe die extreme waarden proberen, niet alleen de normale paden.
Belangrijkste kenmerken van Integer Overflow Attack
Wat het onderscheidt van andere fouten:
- Terugloop: Getallen springen van max terug naar nul zoals een rondlopende teller.
- Stil: Geen native foutmelding als rekenwerk niet gecontroleerd is, dus fouten lijken op legitieme resultaten.
- Triggerbaar: Vaak kunnen gebruikersinvoeren het exacte moment forceren waarop het gebeurt.
- Herhaalbaar: Eenmaal gevonden kunnen aanvallers het scripten en tegen veel doelen uitvoeren.
Variaties
Belangrijke varianten die je tegenkomt, dezelfde familie maar andere routes:
- Underflow: Aftrekken gaat onder nul en rolt naar een enorme waarde.
- Optelling: Optellen op een balans of voorraad duwt het over de max en terug naar kleine waarden.
- Vermenigvuldiging: Beloningsmultiplicatoren of schaalfactoren blazen de waarde voorbij limieten.
- Teller: Token ID of voorraadtellers rollen over en laten minten doorgaan voorbij de cap.
Integer Overflow Attack komt niet alleen in Solidity voor. Het kan ook optreden in Vyper, Rust, Move of custom assembly, en veel gepubliceerde exploits waren in essentie unchecked rekenkunde rond saldi of voorraden.
Voorbeeld
Een beloningsfunctie vermenigvuldigt een door de gebruiker opgegeven getal met een grote bonus, de waarde rolt terug, de cap-controle slaagt en de Integer Overflow Attack laat de aanvaller veel meer tokens minten dan bedoeld.
Leuk weetje
Het klassieke arcadeprobleem met de level 256 kill screen? Die beruchte freeze kwam door een integer overflow, wat aantoont dat zelfs retrospellen per ongeluk vergelijkbare fouten kunnen hebben als in crypto.
Samenvatting
Denk aan Integer Overflow Attack als getallen die een volledige ronde maken en dieven die door de opening sprinten; houd rekenwerk gecontroleerd en je slaapt rustiger.
