SandboxEscaper / PoC-LPE: o que há dentro?


Em um habr, já existem notícias sobre essa vulnerabilidade , mas, infelizmente, sem detalhes técnicos. Sugiro que você procure dentro do arquivo publicado (autor - SandboxEscaper ).

Sob o cortador está a tradução do documento de descrição no arquivo.

Descrição da vulnerabilidade


O serviço Agendador de tarefas possui uma interface RPC (acessível por meio do transporte ALPC) que suporta o método SchRpcSetSecurity.

Este é o protótipo deste método:

long _SchRpcSetSecurity( [in][string] wchar_t* arg_1, //Task name [in][string] wchar_t* arg_2, //Security Descriptor string [in]long arg_3); 

As tarefas criadas pelo agendador de tarefas criam o diretório / arquivo correspondente em c: \ windows \ system32 \ tasks. Provavelmente, este método se destina a registrar tarefas DACL'a localizadas lá. Mas a gravação ocorrerá após a representação. No entanto, por algum motivo, a implementação do método também verifica a presença de um arquivo .job em c: \ windows \ tasks e grava uma DACL nele sem representação . Como o usuário (mesmo o usuário do grupo de convidados) pode criar arquivos nesse diretório, podemos simplesmente criar um link físico para qualquer outro arquivo que possamos ler. Usando esse hardlink, podemos forçar o serviço do planejador (executando com privilégios de SYSTEM) a gravar uma DACL arbitrária (consulte o segundo parâmetro SchRpcSetSecurity) em um arquivo de nossa escolha.

Assim: para qualquer arquivo que possa ser lido, você pode alterar a DACL, o que permite substituí-lo completamente.

Exploração de vulnerabilidade


Essa vulnerabilidade nos dá uma primitiva muito forte! O principal problema é que, após a instalação (por padrão), muitos arquivos importantes podem ser modificados apenas pelo usuário TrustedInstaller (mas não pelo usuário SYSTEM).

O arquivo contém um script do PowerShell para listar arquivos que você pode controlar. Apenas execute:
./enumerate.ps1 >output.txt

O sistema tem muitos objetivos. Você pode controlar os arquivos de programa e, se o arquivo de destino for usado por um administrador / outro usuário, os arquivos que você substituiu podem ser iniciados com os privilégios necessários.

O segundo problema é que, embora possamos obter controle sobre muitos arquivos, a gravação neles geralmente é impossível, porque essas DLLs já estão carregadas em algum lugar para execução. Tentar escrever uma DACL para um arquivo carregado para execução causará um erro de acesso compartilhado. Mas a vulnerabilidade pode ser usada para outros tipos de arquivos, que podem ser um destino melhor que uma DLL.

Para operação, o arquivo C: \ Windows \ System32 \ DriverStore \ FileRepository \ prnms003.inf_amd64_4592475aca2acf83 \ Amd64 \ printconfig.dll foi selecionado (o nome do diretório pode variar, isso é considerado no PoC). Parece que esse arquivo pertence à impressora XPS e não está carregado no serviço de impressão por padrão (pode acontecer que o arquivo já esteja carregado ... mas, na maioria das vezes, não está).

E quando iniciamos o trabalho de impressão usando a impressora XPS, o serviço carrega essa DLL, que podemos reescrever com antecedência. Esse vetor de ataque (seqüestro) pode ser facilmente aplicado para algo melhor. Posso tentar encontrar as melhores opções ... deixe-me saber.

Nota : Em um laptop antigo, onde o Windows 10 está em execução há vários anos, existem dois diretórios prnms003.inf_amd64_ *. A nova versão não exclui a antiga, o que significa que não há garantia de que o FindFirstFile (usado no PoC) encontre o diretório atual. Portanto, você pode expandir o código substituindo todos os printconfig.dll encontrados ou verificar o atributo do último registro no arquivo e selecionar um mais recente.

Demo


Você também pode encontrar um vídeo com uma demonstração no arquivo:
Texto oculto

Source: https://habr.com/ru/post/pt421593/


All Articles