
Análise técnica e bypass de prova de conceito para CVE-2023-33668 no software de supervisão DigiExam, demonstrando detecção fraca de VM e verificações de integridade de módulos nativos.
DigiExam é um software de exames e proctoring de vigilância. O software é instalado nos computadores das escolas (ou dos alunos). Quando o aluno ingressa em um exame, o DigiExam irá: garantir que não está sendo executado em uma Máquina Virtual, encerrar todos os aplicativos, colocar em tela cheia e impedir o usuário de ir para qualquer outro lugar que não seja a janela do DigiExam.
Foi descoberto que as detecções de segurança são fracas e podem ser facilmente contornadas simplesmente substituindo um arquivo (de propriedade do usuário) no sistema de arquivos. Isso foi confirmado como funcionando no DigiExam v14.0.2 e não foi testado novamente desde então (passei no exame :)).
Vulnerabilidade: DigiExam (um aplicativo Electron) "terceiriza" a detecção de máquina virtual (junto com a maioria dos recursos de segurança) para um módulo nativo chamado dx-sec. A falta de verificação de integridade no módulo dx-sec permite substituir o módulo por uma versão corrigida. A correção pode essencialmente modificar quaisquer recursos localizados dentro do dx-sec, incluindo detecção de máquina virtual (e outros, como a lista de permissões de processos ilegais, etc).
Em seu primeiro lançamento, o aplicativo DigiExam fará o download de módulos nativos em %localappdata%\DigiExam\app-14.0.2\resources\app.asar.unpacked\node_modules\%modulename%\build\Release\%modulename.node%. Esses arquivos .node são (conforme instruído por file) PE32 executable (DLL) (GUI) Intel 80386, for MS Windows.
Abrir o arquivo dx-sec no Ghidra e pesquisar pela string "Virtual Machine" fornece muitos resultados e leva a FUN_10020370 - renomeado detect_virtual_machine (o que dá percepções bastante interessantes sobre o que está sendo examinado para detecção de VM).

detect_virtual_machine tem uma referência cruzada para FUN_10007ab0 - renomeado detect_virtual_machine_node_handler - que parece ser o ponto de entrada de uma biblioteca para coisas do Node (construtor e destruidor em torno da nossa função 'principal' detect_virtual_machine).

detect_virtual_machine pode ser corrigido para retornar imediatamente. O lado direito da captura de tela é a versão corrigida.

Conforme mencionado na introdução, o DigiExam é frequentemente instalado em computadores compartilhados das escolas. Em vez de corrigir a lógica de detecção de VM, um invasor poderia aproveitar isso para obter execução de código em qualquer sessão de aluno assim que eles fizerem um exame, permitindo ataques mais destrutivos aos documentos e informações dos alunos. A persistência dura até que o DigiExam seja atualizado.