
Интерактивная оболочка Avast JavaScript
ПРИМЕЧАНИЕ: 11 марта 2020 года Avast объявил о решении отключить этот интерпретатор глобально!
Основной процесс антивируса Avast называется AvastSvc.exe, который работает от имени SYSTEM.

Эта служба загружает низкоуровневый движок антивируса и анализирует недоверенные данные, полученные из таких источников, как минифильтр файловой системы или перехваченный сетевой трафик.
Несмотря на высокие привилегии и обработку недоверенных входных данных по своей сути, он не изолирован в песочнице и имеет слабое покрытие средствами защиты. Любые уязвимости в этом процессе являются критическими и легко доступны для удаленных атакующих.
Так что... может быть, не очень хорошо, что он включает собственный интерпретатор JavaScript....???? 🙃

Этот репозиторий содержит интерактивную оболочку, которая позволяет тестировать интерпретатор в Linux для исследования уязвимостей.
Вот как это попробовать, сначала установите зависимости.
$ sudo apt install libreadline-dev:i386 libc6-dev-i386 gcc-multilib
$ sudo yum install readline-devel.i686 glibc-devel.i686 libgcc.i686
Теперь вы можете клонировать этот репозиторий.
$ git clone https://github.com/taviso/avscript.git
$ cd avscript
$ git submodule update --init --recursive
Если все выглядит хорошо, соберите его, и avscript будет готов.
$ make
По соображениям производительности Avast не интерпретирует каждый встреченный JavaScript-файл; они используют эвристику, чтобы определить, необходимо ли это. Я обнаружил, что добавление файла javascript.txt, включенного в этот репозиторий, достаточно для постоянного срабатывания эвристики.
Например, если вы нашли уязвимость и хотите воспроизвести ее в Windows, сначала сделайте следующее:
$ cat yourtestcase.js javascript.txt > ReproForWindows.js
Теперь убедитесь, что она все еще делает то, что вы ожидаете, например:
$ ./avscript ReproForWindows.js
main(): File ReproForWindows.js` loaded, about to initialize interpreter...
Segmentation fault (core dumped)
Затем убедитесь, что сбой воспроизводится в Windows.
Служба Avast является защищенным процессом, что означает, что отладка из пользовательского пространства затруднительна. Если у вас настроен kd, вы можете просто отменить это, и тогда отладка в пользовательском пространстве будет работать нормально.
Быстрое и простое решение, работающее на 32-битных системах, заключается в следующем (обратите внимание, что PatchGuard не позволит этого на x64, но вы можете сделать что-то подобное с помощью команд точек останова).

Также есть настройка в разделе «Устранение неполадок» под названием «Включить самозащиту», которую следует отключить. Полагаю, эта настройка отключает перехват OpenProcess() в SSDT, где они обычно блокируют свой собственный процесс.
Возможно, вам потребуется временно отключить «щиты» в интерфейсе Avast во время подключения, чтобы операции с файловой системой не приводили к взаимоблокировке, пока служба приостановлена.
Avast не публикует символы для своего движка, но отладка с помощью IDA или gdb все еще возможна. Некоторые заметки по отладке кода Windows из Linux есть в документации loadlibrary.
Если вы хотите использовать IDA, я рекомендую использовать серверную часть gdbserver.
Просто используйте что-то вроде этого, возможно, сначала потребуется установить пакет gdbserver:
$ gdbserver 0.0.0.0:23946 ./avscript
Это работает на удивление хорошо, даже псевдокодовые точки останова работают.

Если вы найдете уязвимость, она, скорее всего, критическая и способная к распространению (wormable).
🔥 Пожалуйста, сообщите о ней срочно. 🔥