Welkom terug bij Sherlock’s Vulnerability Spotlight, waar we een impactvolle kwetsbaarheid belichten die is ontdekt tijdens een Sherlock-audit. Deze week onderzoeken we een denial-of-service die is gevonden in de @GMX_IO-wedstrijd door @0xdeadbeef____ en @IllIllI000. Credits aan @int0x1catedCode voor de uitleg.
Samenvatting van de kwetsbaarheid: De kwetsbaarheid stelt een aanvaller in staat om de uitvoeringsstroom van bestellingen te manipuleren door valse lengtes van terugkeerredenen te geven die niet overeenkomen met de werkelijke gegevens. Dit zorgt ervoor dat de foutafhandeling van het protocol onjuiste geheugengebieden leest, wat mogelijk het uitvoeringsproces verstoort of onverwacht gedrag veroorzaakt bij het verwerken van mislukte bestellingen.
Aanvalstappen: 1. Opzetfase Zet een kwaadaardig contract op dat aangepaste revert-gedragingen implementeert. Het kwaadaardige contract moet aanroepbaar zijn door het doelprotocol (bijv. als callback-handler). 2. Maak Kwaadaardige Revert-gegevens Structuur de revert-gegevens met een vervalst lengteparameter. 3. Voer Order Uit Via Protocol Creëer een order die interactie met het kwaadaardige contract zal triggeren. Wanneer het protocol de order verwerkt en het kwaadaardige contract aanroept, revert het met de gemaakte gegevens. De foutafhandelingsmechanismen van het protocol proberen de revert-reden te decoderen met behulp van de nep lengte. 4. Trigger Geheugenleestoegang Overflow Het protocol leest geheugen op basis van de nep lengteparameter. Dit zorgt ervoor dat het buiten de werkelijke grenzen van de revert-gegevens leest.
Wat is de impact? Denial of Service: Orders kunnen niet goed worden uitgevoerd, waardoor legitieme protocoloperaties zoals liquidatie van slechte posities worden geblokkeerd. Onderbreking van orderuitvoering: Batchorderverwerking kan worden stopgezet, wat meerdere gebruikers beïnvloedt. Gas griefing: Het verwerken van verkeerd gevormde revert-gegevens kan overmatige gas verbruiken.
De Oorzaak: 1. Ongecontroleerde lengteparameters: Het protocol vertrouwt op de lengtewaarde die in de revert-gegevens is opgegeven zonder validatie 2. Ontbrekende grenscontroles: Geen verificatie dat de opgegeven lengte overeenkomt met de werkelijke gegevensgrootte
De mitigatie: 1. Valideer altijd de lengte van de terugkeerdata 2. Implementeer maximale lengtelimieten
We zijn er trots op @GMX_IO te hebben geholpen met deze ontdekking. Wanneer het absoluut veilig moet zijn, is Sherlock de juiste keuze.
2,38K