
Технический анализ и обход (proof-of-concept) для CVE-2023-33668 в программном обеспечении прокторинга DigiExam, демонстрирующий слабое обнаружение виртуальных машин и проверки целостности нативных модулей.
DigiExam — это программное обеспечение для слежки за экзаменами и прокторинга. Программа устанавливается на компьютеры школ (или студентов). Когда студент присоединяется к экзамену, DigiExam: проверяет, что он не запущен в виртуальной машине, завершает все приложения, переходит в полноэкранный режим и не позволяет пользователю выйти за пределы окна DigiExam.
Было обнаружено, что механизмы безопасности слабы и их легко обойти, просто заменив файл (принадлежащий пользователю) в файловой системе. Подтверждено, что это работает в DigiExam v14.0.2, и с тех пор не проверялось (я успешно сдал экзамен :)).
Уязвимость: DigiExam (приложение Electron) «перекладывает» обнаружение виртуальных машин (а также большинство функций безопасности) на нативный модуль под названием dx-sec. Отсутствие проверки целостности модуля dx-sec позволяет заменить его изменённой версией. Такая модификация может изменить любые функции, расположенные в dx-sec, включая обнаружение виртуальных машин (и другие, такие как белый список недопустимых процессов и т. д.).
При первом запуске приложение DigiExam загружает нативные модули в %localappdata%\DigiExam\app-14.0.2\resources\app.asar.unpacked\node_modules\%modulename%\build\Release\%modulename.node%. Эти файлы .node (как сообщает file) являются PE32 executable (DLL) (GUI) Intel 80386, for MS Windows.
Открыв файл dx-sec в Ghidra и выполнив поиск строки «Virtual Machine», можно получить множество результатов, которые ведут к FUN_10020370 — переименованной в detect_virtual_machine (что позволяет довольно интересно взглянуть на то, что именно проверяется для обнаружения ВМ).

detect_virtual_machine имеет одну перекрёстную ссылку на FUN_10007ab0 — переименованную в detect_virtual_machine_node_handler — которая, по-видимому, является точкой входа библиотеки для Node (конструктор и деструктор вокруг нашей «главной» функции detect_virtual_machine).

detect_virtual_machine можно пропатчить, чтобы он немедленно возвращал управление. Правая сторона скриншота — пропатченная версия.

Это полностью обходит логику обнаружения ВМ.
Как упоминалось во введении, DigiExam часто устанавливается на общие школьные компьютеры. Вместо патча логики обнаружения ВМ злоумышленник может использовать это для получения выполнения кода в сеансе любого студента, как только тот начнёт экзамен, что позволяет проводить более разрушительные атаки на документы и информацию студентов. Сохраняется до тех пор, пока DigiExam не будет обновлён.