Nota: ¡El 11/03/2020 Avast anunció que habían decidido deshabilitar a este intérprete a nivel mundial!
El principal proceso de Avast Antivirus se llama avastsvc.exe, que se ejecuta como sistema.

Ese servicio carga el motor antivirus de bajo nivel y analiza datos no confiables recibidos de fuentes como el minifilter del sistema de archivos o el tráfico de red interceptado.
A pesar de ser altamente privilegiado y procesar la entrada no confiable por diseño, no tiene caja y tiene una cobertura de mitigación deficiente. Cualquier vulnerabilidad en este proceso es crítica y fácilmente accesible para los atacantes remotos.
Entonces ... tal vez no sea genial que incluya un intérprete de JavaScript personalizado ... ???? ?

Este repositorio contiene un caparazón interactivo que le permite probar el intérprete en Linux para la investigación de vulnerabilidad.
Aquí le mostramos cómo probarlo, primero instale 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 puede clonar este repositorio.
$ git clone https://github.com/taviso/avscript.git
$ cd avscript
$ git submodule update --init --recursive
Si todo se ve bien, construirlo y avscript debería estar listo.
$ make
Por razones de rendimiento, Avast no interpreta todos los archivos de JavaScript que encuentran, usan una heurística para determinar si es necesario. Descubrí que agregar el archivo javascript.txt incluido en este repositorio es suficiente para activar siempre la heurística.
Por ejemplo, si ha encontrado una vulnerabilidad y desea reproducirla en Windows, primero haría esto:
$ cat yourtestcase.js javascript.txt > ReproForWindows.js
Ahora verifique que todavía haga lo que esperas, por ejemplo,
$ ./avscript ReproForWindows.js
main(): File ReproForWindows.js` loaded, about to initialize interpreter...
Segmentation fault (core dumped)
Luego verifique el bloqueo reproducido en Windows.
El servicio AVAST es un proceso protegido, lo que significa que la depuración del espacio de usuarios es complicado. Si tiene KD configurado, simplemente puede deshacer esto y luego la depuración en el espacio de usuarios funciona bien.
Una solución rápida y fácil que funciona en 32 bits es hacer esto (tenga en cuenta que PatchGuard no lo permitirá en X64, pero puede hacer algo similar con los comandos de punto de interrupción).

También hay una configuración en "Solución de problemas" llamado "Habilitar autodefensa" que debe desactivarse. Creo que esta configuración desactiva el enganche OpenProcess() en el SSDT, donde normalmente incluyen su propio proceso.
Es posible que deba deshabilitar temporalmente los "escudos" en la interfaz de usuario de Avast mientras se adjunta para que las operaciones del sistema de archivos no sean de punto muerto 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 del código de Windows de Linux en la documentación de LoadLibrary.
Si desea usar IDA, recomendaría usar el backend de gdbserver .
Simplemente use algo como esto, es posible que deba instalar el paquete GDBServer primero:
$ gdbserver 0.0.0.0:23946 ./avscript
Esto funciona sorprendentemente bien, incluso los puntos de interrupción de los pseudocodos funcionan.

Si encuentra una vulnerabilidad, es probable que sea crítico y gusano .
Informe con urgencia.