Webassembly: Reboot von Applets?

Submitted by admin on Fr, 13.04.2018 - 15:51

Webassembly geistert schon länger durch die (Entwickler)Presse, doch was ist das eigentlich?

Webassemblies sind binäre Blobs, die wie JavaScript in den Browser geladen und ausgeführt werden können. Wer da an Java-Applets denkt, liegt nicht falsch, allerdings können Webassembies in beliebigen Sprachen erstellt werden, soweit es einen passenden Byte-Code Compiler dafür gibt. Fast alle relevanten Sprachen werden unterstützt.

Die Vorteile für den Entwickler liegen auf der Hand, insbesondere ist man nicht mehr an JavaScript gebunden, wenn der Client Code ausführen soll. Sicherlich ist es sehr schön, wenn man bewährte C Libraries im Browser nutzen kann, im HowTo ist beschrieben, wie man beispielsweise OpenSSL im Browser nutzen kann.

Kritik

Java-Applets sind mir nur zu gut als Security Albtraum in Erinnerung, Java-Plugins im Browser waren zeitweise Gegenstand von täglichen Updates wegen Sicherheitslücken, wenn mal nicht gerade wieder Flash gepatcht werden musste. Warum sollte Webassembly da nun besser sein als Java-Applets oder Flash? Die Situation ist jetzt allerdings schlimmer, im Gegensatz zu Java kann man Webassembly nicht deinstallieren oder deaktivieren. Im Falle von Firefox bleibt nur noch das Addon Noscript.

Solche C Konstrukte findet man immer wieder:

#include <stdio.h>
#include <unistd.h>

#define BUFSIZER1 512
#define BUFSIZER2 ((BUFSIZER1/2) - 8)

int useAfterFree(int argc, char **argv) {
    char *buf1R1;
    char *buf2R1;
    char *buf2R2;
    char *buf3R2;

    buf1R1 = (char *) malloc(BUFSIZER1);
    buf2R1 = (char *) malloc(BUFSIZER1);

    free(buf2R1);

    buf2R2 = (char *) malloc(BUFSIZER2);
    buf3R2 = (char *) malloc(BUFSIZER2);

    strncpy(buf2R1, argv[1], BUFSIZER1-1);

    free(buf1R1);
    free(buf2R2);
    free(buf3R2);
}

Wie der Browser dann wohl in unterschiedlichen Kontexten reagiert? Vielleicht kann man in buf2R1 abgelegten Shell-Code ausführen?

Ansonsten verbleibt beim Anwender ein ungutes Gefühl, wenn irgendwelche Binaries aus unbekannten Quellen lokal ausgeführt werden. Man hoffte ja schon, dass das mit den Abkündigungen von Java-Applets und Flash endlich Geschichte sei, aber leider weit gefehlt.