
Avast Shell interactivo de JavaScript
NOTA: El 03/11/2020 Avast anunció que había decidido deshabilitar este intérprete a nivel mundial.
El proceso principal de Avast Antivirus se llama AvastSvc.exe, que se ejecuta como SYSTEM.

Ese servicio carga el motor antivirus de bajo nivel y analiza datos no confiables recibidos de fuentes como el minifiltro del sistema de archivos o el tráfico de red interceptado.
A pesar de tener altos privilegios y procesar entradas no confiables por diseño, no está en un sandbox y tiene una cobertura de mitigación deficiente. Cualquier vulnerabilidad en este proceso es crítica y fácilmente accesible para atacantes remotos.
Así que... tal vez no sea genial que incluya un intérprete de JavaScript personalizado....???? 🙃

Este repositorio contiene un shell interactivo que te permite probar el intérprete en Linux para la investigación de vulnerabilidades.
Aquí te mostramos cómo probarlo, primero instala las dependencias.
$ sudo apt install libreadline-dev:i386 libc6-dev-i386 gcc-multilib
$ sudo yum install readline-devel.i686 glibc-devel.i686 libgcc.i686
Ahora puedes clonar este repositorio.
$ git clone https://github.com/taviso/avscript.git
$ cd avscript
$ git submodule update --init --recursive
Si todo se ve bien, constrúyelo y avscript debería estar listo.
$ make
Por razones de rendimiento, Avast no interpreta todos los archivos JavaScript que
encuentra, usan una heurística para determinar si es necesario. He descubierto que
agregar el archivo javascript.txt incluido en este repositorio es suficiente para
siempre activar la heurística.
Por ejemplo, si has encontrado una vulnerabilidad y quieres reproducirla en Windows, primero harías esto:
$ cat yourtestcase.js javascript.txt > ReproForWindows.js
Ahora verifica que aún haga lo que esperas, por ejemplo:
$ ./avscript ReproForWindows.js
main(): File ReproForWindows.js` loaded, about to initialize interpreter...
Segmentation fault (core dumped)
Luego verifica que el fallo se reproduzca en Windows.
El servicio de Avast es un proceso protegido, lo que significa que depurarlo desde el espacio de usuario es complicado. Si tienes kd configurado, puedes simplemente deshacer esto y luego la depuración en el espacio de usuario funciona bien.
Una solución rápida y sencilla que funciona en 32 bits es hacer esto (nota que PatchGuard no permitirá esto en x64, pero puedes hacer algo similar con comandos de punto de interrupción).

También hay una configuración en "Solución de problemas" llamada "Habilitar autodefensa"
que debería estar deshabilitada. Creo que esta configuración deshabilita el hooking de OpenProcess()
en el SSDT, donde normalmente ponen en lista negra su propio proceso.
Puede que necesites deshabilitar temporalmente los "escudos" en la interfaz de Avast mientras te conectas para que las operaciones del sistema de archivos no se bloqueen mientras el servicio está suspendido.
Avast no publica ningún símbolo para su motor, pero la depuración con IDA o gdb aún es posible. Hay algunas notas sobre la depuración de código de Windows desde Linux en la documentación de loadlibrary.
Si quieres usar IDA, recomendaría usar el backend gdbserver.
Simplemente usa algo como esto, puede que necesites instalar el paquete gdbserver primero:
$ gdbserver 0.0.0.0:23946 ./avscript
Esto funciona sorprendentemente bien, incluso los puntos de interrupción de pseudocódigo funcionan.

Si encuentras una vulnerabilidad, es probable que sea crítica y propagable.
🔥 Por favor, repórtalo urgentemente. 🔥