Resumo
Vulnerabilidade: Escalonamento Local de Privilégios para SYSTEM via IPC não autenticado no daemon do Barrier pela porta TCP 24801
Fornecedor: debauchee (projeto Barrier)
Produto: Barrier 2.4.0 (lançamento final, 2021-11-01)
CWE: CWE-306: Ausência de Autenticação para Função Crítica
Descrição
O serviço do Barrier para Windows (barrierd.exe), que é instalado e executado como LocalSystem, faz bind de um servidor de controle IPC/TCP em 127.0.0.1:24801 sem autenticação, sem verificação de identidade do cliente e sem controle de acesso. Qualquer processo local, independentemente do nível de privilégio, pode se conectar a essa porta e enviar uma mensagem kIpcCommand ("ICMD") contendo uma linha de comando arbitrária e um flag "elevate" de 1 byte. Isso duplica o token primário de SYSTEM do winlogon.exe e, pronto, você tem código executado como NT AUTHORITY\SYSTEM. Como o POC demonstra, você também pode fazer um novo cmd.exe aparecer, executando como SYSTEM.
Passos para Reproduzir
- Obtenha execução local de código com baixos privilégios em um host Windows com o serviço Barrier (barrierd.exe, LocalSystem) instalado e em execução.
- Abra uma conexão TCP para 127.0.0.1:24801.
- Envie o hello de IPC: b"IHEL" + b"\x00" (identifica como kIpcClientGui).
- Envie a mensagem de comando: b"ICMD" + struct.pack(">I", len(cmd)) + cmd.encode("utf-8") + b"\x01" (elevate=1), em que cmd = " -d x /c " (para um comando único) ou " -d x /k " (para evitar o loop de relançamento do watchdog do daemon caso o próprio payload não mantenha um processo ativo, por exemplo, ao usar
start para abrir uma janela visível). O prefixo "-d x" é OBRIGATÓRIO para evitar que o daemon trave devido ao bug de NULL deref associado.
- A thread watchdog do barrierd.exe enumera a sessão de console ativa, abre o winlogon.exe e duplica o token primário de SYSTEM dele.
- CreateProcessAsUser(systemToken, NULL, cmd, ...) executa o comando do atacante como NT AUTHORITY\SYSTEM -- o parser de opções permissivo do próprio cmd.exe ignora o ruído inicial "-d x" e interpreta corretamente "/c"/"/k" como "executar o restante como comando".
- PERSISTÊNCIA: o comando executado é salvo automaticamente e será reexecutado como SYSTEM a cada reinício do serviço/reinicialização do sistema, sem nenhuma ação adicional do atacante, até ser explicitamente removido com o envio de um comando vazio ou pela edição direta de HKLM\SOFTWARE\Barrier.
Código Afetado
- src/lib/ipc/IpcClientProxy.cpp - Comando + byte de elevação
- src/lib/ipc/IpcServer.cpp -- Sem autenticação no caminho de aceitação do IPC
- src/lib/barrier/win32/DaemonApp.cpp -- Descarta resultados e persiste o comando no registro HKLM\SOFTWARE\Barrier
- src/lib/platform/MSWindowsWatchdog.cpp -- Token de SYSTEM adquirido
Código: https://github.com/debauchee/barrier/releases/tag/v2.4.0
Prova de Conceito (POC) ou nada
Uma Prova de Conceito (POC) foi incluída para provar que isso é real.
POC -- Debauchee_Barrier_Privesc.py

Impacto
Um atacante pode explorar esta vulnerabilidade para obter privilégios de nível SYSTEM. Pior: o comando executado será acionado automaticamente ao reiniciar/iniciar.
O Barrier não é mais mantido e não receberá correção. Para organizações que ainda utilizam o Barrier, migre para uma versão corrigida do Deskflow (o sucessor mantido ativamente) que resolva a mesma vulnerabilidade em CVE-2026-41477 / GHSA-6rx5-g478-775c.
Cronograma de Divulgação
- 20 de abril de 2026 -- Descoberta. O projeto não é mantido e não há para quem reportar.
- 25 de julho de 2026 -- Decidimos que valia a pena entrar em contato com o NoCVE, pois este projeto poderia potencialmente ser forkado.