
Avast JavaScript Interactive Shell
NOTE : Le 03/11/2020, Avast a annoncé avoir décidé de désactiver cet interpréteur mondialement !
Le processus principal de l'antivirus Avast s'appelle AvastSvc.exe et s'exécute en tant que SYSTEM.

Ce service charge le moteur antivirus de bas niveau et analyse les données non fiables reçues de sources comme le minifiltre du système de fichiers ou le trafic réseau intercepté.
Bien qu'il soit hautement privilégié et qu'il traite des entrées non fiables par conception, il n'est pas cloisonné et sa couverture de mitigation est faible. Toute vulnérabilité dans ce processus est critique et facilement accessible aux attaquants distants.
Donc... peut-être pas génial qu'il inclue un interpréteur JavaScript personnalisé....???? 🙃

Ce dépôt contient un shell interactif qui vous permet de tester l'interpréteur sous Linux pour la recherche de vulnérabilités.
$ sudo apt install libreadline-dev:i386 libc6-dev-i386 gcc-multilib
$ sudo yum install readline-devel.i686 glibc-devel.i686 libgcc.i686
Maintenant vous pouvez cloner ce dépôt.
$ git clone https://github.com/taviso/avscript.git
$ cd avscript
$ git submodule update --init --recursive
Si tout semble correct, compilez-le et avscript devrait être prêt.
$ make
Pour des raisons de performances, Avast n'interprète pas chaque fichier JavaScript rencontré, ils utilisent une heuristique pour déterminer si c'est nécessaire. J'ai constaté qu'ajouter le fichier javascript.txt inclus dans ce dépôt suffit à toujours déclencher l'heuristique.
Par exemple, si vous avez trouvé une vulnérabilité et souhaitez la reproduire sous Windows, vous feriez d'abord ceci :
$ cat yourtestcase.js javascript.txt > ReproForWindows.js
Vérifiez maintenant qu'il fait toujours ce que vous attendez, par ex.
$ ./avscript ReproForWindows.js
main(): File ReproForWindows.js` loaded, about to initialize interpreter...
Segmentation fault (core dumped)
Vérifiez ensuite que le crash se reproduit sous Windows.
Le service Avast est un processus protégé, ce qui signifie que le déboguer depuis l'espace utilisateur est délicat. Si vous avez configuré kd, vous pouvez simplement annuler cela et le débogage dans l'espace utilisateur fonctionne alors parfaitement.
Une solution rapide et simple qui fonctionne sur 32 bits est de faire ceci (notez que PatchGuard ne le permettra pas sur x64, mais vous pouvez faire quelque chose de similaire avec des commandes de point d'arrêt).

Il existe également un paramètre sous "Dépannage" appelé "Activer l'autodéfense" qui devrait être désactivé. Je crois que ce paramètre désactive le hook de OpenProcess() dans le SSDT, où ils mettent normalement leur propre processus sur liste noire.
Vous devrez peut-être désactiver temporairement les "boucliers" dans l'interface Avast pendant que vous vous attachez, afin que les opérations du système de fichiers ne se bloquent pas tandis que le service est suspendu.
Avast ne publie aucun symbole pour son moteur, mais le débogage avec IDA ou gdb reste possible. Il y a quelques notes sur le débogage de code Windows depuis Linux dans la documentation loadlibrary.
Si vous souhaitez utiliser IDA, je recommande d'utiliser le backend gdbserver.
Utilisez simplement quelque chose comme ceci, vous devrez peut-être d'abord installer le paquet gdbserver :
$ gdbserver 0.0.0.0:23946 ./avscript
Cela fonctionne étonnamment bien, même les points d'arrêt en pseudo-code fonctionnent.

Si vous trouvez une vulnérabilité, elle est probablement critique et propagable.
🔥 Merci de le signaler de toute urgence. 🔥