An Analysis of Modern Web Security Vulnerabilities Inside WebAssembly Applications

Dit artikel analyseert hoe binaire kwetsbaarheden in WebAssembly-modules, zoals bufferoverlopen en use-after-free-fouten, kunnen leiden tot webveiligheidsproblemen zoals SQL-injecties en XS-Leaks, en biedt daarvoor best practices en verdedigingsstrategieën.

Lorenzo Corrias, Lorenzo Pisu, Davide Maiorca, Giorgio Giacinto

Gepubliceerd Wed, 11 Ma
📖 5 min leestijd🧠 Diepgaand

Each language version is independently generated for its own context, not a direct translation.

Stel je voor dat het internet een enorme, drukke stad is. Vroeger werden alle gebouwen (websites) gebouwd met JavaScript. Dit is als een flexibele, maar soms wat trage en onhandige bouwstijl. Alles was veilig, maar het kon niet zwaar werk verzetten.

Toen kwam WebAssembly (WASM) op het toneel. Je kunt WASM zien als een superkrachtige, snelle robot die je in de stad plaatst. Deze robot kan zware taken uitvoeren (zoals 3D-grafiek of videobewerking) die de normale bouwstijl niet aankan. Bedrijven als Google en Figma gebruiken deze robots al.

Het probleem?
Deze robots zijn niet gebouwd door de stadswachters (de webontwikkelaars), maar door oude, strenge ingenieurs (programmeurs in C of C++). En die oude ingenieurs hebben een slechte gewoonte: ze bouwen soms geheime, onveilige deurtjes in hun robots.

Dit paper (onderzoek) waarschuwt: "Pas op! Als je die robot een foutje laat maken, kan dat de hele stad in gevaar brengen, zelfs als de robot zelf niet direct met de burgers praat."

Hier is hoe dat werkt, vertaald naar alledaagse situaties:

1. De "Geheime Deurtjes" (Binary Vulnerabilities)

De robots hebben interne fouten, zoals:

  • Buffer Overflow: Stel je een robot voor die een briefje moet lezen. Als je de robot een briefje geeft dat te lang is, stroomt de tekst over naar het volgende vakje. In plaats van alleen je naam te lezen, leest de robot nu ook de instructies die daarachter staan en doet hij iets wat jij wilt.
  • Use After Free: De robot haalt een oude, kapotte stoel weg (vrijgeven van geheugen), maar vergeet de sleutel eruit te halen. Jij plaatst een nieuwe, giftige stoel op die plek. Als de robot later weer naar die plek kijkt, denkt hij dat het nog de oude stoel is, maar hij zit nu op je giftige stoel.

2. Hoe de Robot de Stad (Website) in gevaar brengt

Het onderzoek laat zien dat deze interne robot-fouten leiden tot drie grote problemen voor de website:

A. De "Valse Bestelling" (SQL Injection)

  • De situatie: De robot moet een bestelling naar een database sturen (bijv. "Haal klant 100 op").
  • De aanval: Door de robot-fout (zoals de te lange brief), kan een hacker de tekst van de bestelling veranderen voordat de robot hem verstuurt.
  • Het resultaat: In plaats van "Haal klant 100", stuurt de robot nu: "Haal alle klanten en geef hun wachtwoorden door". De website denkt: "Oh, dit is een normale bestelling van de robot," en geeft alles weg. De beveiliging (voorbereide statements) werkt niet meer omdat de robot de opdracht zelf heeft vervalst.

B. De "Vervuilde Brief" (Server-Side Template Injection)

  • De situatie: De robot maakt een veiligheidscode (een 'nonce') die de website gebruikt om een pagina te bouwen.
  • De aanval: De hacker gebruikt een robot-fout om die veiligheidscode te vervalsen. In plaats van een willekeurig getal, komt er nu een opdracht in: "Trek een streep door de pagina en voer mijn code uit."
  • Het resultaat: De website vertrouwt de robot blindelings. Als de robot een giftige code terugstuurt, bouwt de website die code direct in. Het is alsof je een bezorger vertrouwt die je huisbrieven inlevert, maar die bezorger plotseling je eigen huis in breekt en je meubels verplaatst.

C. De "Luisterende Muur" (XS-Leaks / Timing Attacks)

  • De situatie: De robot zoekt naar een geheim (bijv. een wachtwoord) in zijn geheugen.
  • De aanval: De hacker kan de robot niet direct zien wat hij doet (de robot zit in een gesloten kamer). Maar de hacker kan wel luisteren naar hoe lang het duurt.
  • Het resultaat: Als de robot een moeilijk woord moet raden, duurt het even. Als het woord niet klopt, is het snel. Door duizenden keren te proberen en te kijken of de robot "traag" of "snel" reageert, kan de hacker het wachtwoord letterlijk opbouwen, letter voor letter. Het is alsof je een slot op een deur probeert te kraken door te luisteren naar het geluid van het slot: als het klik lang duurt, weet je dat je op de juiste weg bent.

3. Waarom is dit gevaarlijk?

Vroeger dachten ontwikkelaars: "WASM is veilig, het zit in een zandbak (sandbox) en kan niets doen."
Dit onderzoek zegt: "Nee, dat is niet waar."

Als de robot (WASM) een fout heeft, kan hij de regels van de zandbak omzeilen. Hij kan de website dwingen om fouten te maken die normaal onmogelijk zouden zijn. Het is alsof je een onveilige machine in je keuken zet; als die machine een fout maakt, kan hij je hele huis in brand steken, niet alleen de keuken.

4. Wat moeten we doen? (De Oplossing)

De auteurs geven een paar simpele adviezen om de stad veilig te houden:

  1. Vertrouw niemand: Behandel alles wat de robot naar de website stuurt als verdacht. Controleer het dubbel, ook al komt het van "binnen".
  2. Maak de robot slimmer: Gebruik speciale gereedschappen (compiler-opties) die de robot dwingen om veilig te bouwen. Dit maakt de robot misschien iets trager, maar dan breekt hij niet zomaar.
  3. Beperk de macht: Geef de robot alleen de tools die hij echt nodig heeft. Als hij geen toegang heeft tot de database, kan hij die ook niet stelen.

Kortom: WebAssembly is een krachtige tool, maar als je de onderliggende code (de robot) niet goed bouwt, kan die kracht de hele website platleggen. We moeten stoppen met denken dat "WASM = Veilig" en gaan denken aan "WASM = Krachtig, maar met strikte bewaking".