
Avast JavaScript Interactive Shell
HINWEIS: Am 03.11.2020 gab Avast bekannt, dass sie beschlossen hatten, diesen Interpreter global zu deaktivieren!
Der Hauptprozess des Avast-Antivirenprogramms heißt AvastSvc.exe und wird als SYSTEM ausgeführt.

Dieser Dienst lädt die Low-Level-Antiviren-Engine und analysiert unvertrauenswürdige Daten, die von Quellen wie dem Dateisystem-Minifilter oder abgefangenem Netzwerkverkehr empfangen werden.
Obwohl er hochprivilegiert ist und von Natur aus unvertrauenswürdige Eingaben verarbeitet, ist er nicht sandboxed und hat eine schlechte Absicherung. Alle Schwachstellen in diesem Prozess sind kritisch und für entfernte Angreifer leicht zugänglich.
Also... vielleicht nicht so toll, dass es einen eigenen JavaScript-Interpreter enthält....???? 🙃

Dieses Repository enthält eine interaktive Shell, mit der Sie den Interpreter auf Linux für die Schwachstellenforschung testen können.
So können Sie es ausprobieren: Installieren Sie zuerst die Abhängigkeiten.
$ sudo apt install libreadline-dev:i386 libc6-dev-i386 gcc-multilib
$ sudo yum install readline-devel.i686 glibc-devel.i686 libgcc.i686
Jetzt können Sie dieses Repository klonen.
$ git clone https://github.com/taviso/avscript.git
$ cd avscript
$ git submodule update --init --recursive
Wenn alles gut aussieht, kompilieren Sie es und avscript sollte bereit sein.
$ make
Aus Leistungsgründen interpretiert Avast nicht jede JavaScript-Datei, auf die es stößt, sondern verwendet eine Heuristik, um zu bestimmen, ob es notwendig ist. Ich habe festgestellt, dass das Anhängen der in diesem Repository enthaltenen Datei javascript.txt ausreicht, um die Heuristik immer auszulösen.
Wenn Sie zum Beispiel eine Schwachstelle gefunden haben und sie unter Windows reproduzieren möchten, würden Sie zuerst Folgendes tun:
$ cat yourtestcase.js javascript.txt > ReproForWindows.js
Überprüfen Sie nun, ob es immer noch das tut, was Sie erwarten, z.B.:
$ ./avscript ReproForWindows.js
main(): File ReproForWindows.js` loaded, about to initialize interpreter...
Segmentation fault (core dumped)
Überprüfen Sie dann, ob der Absturz unter Windows reproduziert wurde.
Der Avast-Dienst ist ein geschützter Prozess, was das Debuggen aus dem Benutzermodus schwierig macht. Wenn Sie kd konfiguriert haben, können Sie dies einfach rückgängig machen, und dann funktioniert das Debuggen im Benutzermodus einwandfrei.
Eine schnelle und einfache Lösung, die auf 32-Bit funktioniert, ist Folgendes (beachten Sie, dass PatchGuard dies auf x64 nicht erlaubt, aber Sie können etwas Ähnliches mit Breakpoint-Befehlen tun).

Es gibt auch eine Einstellung unter "Fehlerbehebung" namens "Selbstverteidigung aktivieren", die deaktiviert werden sollte. Ich glaube, diese Einstellung deaktiviert das Hooking von OpenProcess() in der SSDT, wo sie normalerweise ihren eigenen Prozess auf eine schwarze Liste setzen.
Möglicherweise müssen Sie vorübergehend die "Schilde" in der Avast-Benutzeroberfläche deaktivieren, während Sie sich anmelden, damit Dateisystemoperationen nicht blockieren, während der Dienst angehalten ist.
Avast veröffentlicht keine Symbole für seine Engine, aber das Debuggen mit IDA oder gdb ist trotzdem möglich. Es gibt einige Hinweise zum Debuggen von Windows-Code unter Linux in der loadlibrary-Dokumentation.
Wenn Sie IDA verwenden möchten, empfehle ich das gdbserver-Backend.
Verwenden Sie einfach etwas wie dieses; möglicherweise müssen Sie zuerst das gdbserver-Paket installieren:
$ gdbserver 0.0.0.0:23946 ./avscript
Das funktioniert überraschend gut, sogar Pseudocode-Breakpoints funktionieren.

Wenn Sie eine Schwachstelle finden, ist sie wahrscheinlich kritisch und wurmfähig.
🔥 Bitte melden Sie sie dringend. 🔥