O ciclo de como encontro vulnerabilidades de escalação de privilégios nos aplicativos Windows continua. Na série anterior: Steam ( CVE-2019-14743 , CVE-2019-15316 , CVE-2019-17180 ) e Origem ( CVE-2019-19247, CVE-2019-19248 ). Hoje, porém, não estamos falando de um iniciador de jogos, mas do pacote de aplicativos ABBYY FinerReader.
Resumo - Vou lhe dizer como, graças ao componente que verifica a licença, em 10 minutos você pode aumentar seus direitos do nível de usuário para NT AUTHORITY \ SYSTEM. A vulnerabilidade foi atribuída ao identificador CVE-2019-20383, um link para o site da ABBYY .Serviço de inteligência
Fiz o download da versão de avaliação do FineReader no site da ABBYY e a verifiquei rapidamente para ver se faz algum sentido escolher o produto para aumentar os privilégios. Sim, o produto inclui um serviço que, a julgar pelo nome "servidor de licenças de rede ABBYY", está associado às licenças e é iniciado por padrão no usuário NT AUTHORITY \ SYSTEM. Comecei o ProcMon começou a observar o comportamento do serviço.Chamei minha atenção o arquivo localizado no caminho "C: \ ProgramData \ ABBYY \ FineReader \ 15 \ Licenses \ Licensing.cnt". O serviço lê algo, escreve algo, em geral, o arquivo parecia um candidato interessante para experimentos. Considere a pasta "C: \ ProgramData \ ABBYY \ FineReader \ 15 \ Licenses". A ACL de acesso total completo herdada da pasta pai ("C: \ ProgramData \ ABBYY \ FineReader \ 15") é válida para esta pasta, o que significa que você pode excluir todo o seu conteúdo, incluindo o arquivo "Licensing.cnt".O serviço, tendo descoberto a ausência do arquivo, tentou criá-lo e de uma maneira um pouco estranha. Ele criou um arquivo no formato "tmpXXXX-YYYYYYYYY.tmp", escreveu alguns dados nele e o renomeou como "Licensing.cnt".Aqui está o log do ProcMon no qual esta operação é realizada duas vezes.
Primeiro, acontece às 20:36 e depois às 20:46. Entre esses registros de data e hora, o arquivo foi excluído novamente para ser criado novamente.O retângulo 1 indica a situação em que o serviço detectou a ausência de um arquivo. Retângulo 2 - crie um arquivo temporário. Retângulo 3 - renomeie o arquivo temporário. Retângulo 4 - repita as operações após 10 minutos.Considere o formato do nome "tmpXXXX_YYYYYYYYY.tmp". Como parte de um processo em execução, XXXX sempre será constante; além disso, de fato, esse é o identificador do encadeamento que executa esse trabalho. AAAAAAAAA não permanece constante, mas se observarmos duas partidas vizinhas (valores: 430210515 e 430810515), parece que isso é apenas uma marca de tempo - a diferença entre os números 600000 - coincide surpreendentemente com 10 minutos da diferença. Mais alguns testes confirmam nossa suposição.Para resumir esta parte. Qualquer usuário pode excluir o arquivo "C: \ ProgramData \ ABBYY \ FineReader \ 15 \ Licenses \ Licensing.cnt" e, muitas vezes, pode solicitar o conteúdo da pasta "C: \ ProgramData \ ABBYY \ FineReader \ 15 \ Licenses" em em algum momento, localize um arquivo chamado "tmpXXXX_YYYYYYYYY.tmp". Agora o usuário estará preparado, após excluir o arquivo, saberá exatamente em que momento e com que nome o arquivo será criado na próxima vez.Agora vamos jogar com links simbólicos
Como criar links simbólicos sem direitos de administrador, . . , , «C:\abc\1» «C:\def\2».
NTFS reparse point ( NTFS mount point) «C:\abc» «\RPC Control\". «\RPC Control\» – , , , . , , , , . NTFS reparse point , , . - , - .
. "\RPC Control\1" <-> «C:\def\2». , «C:\abc\1», «C:\def\2».
Inicialmente, o processo de criação de um arquivo de licença se parece com o seguinte:
Quando sabemos o momento exato da próxima operação, podemos criar os seguintes links simbólicos (pularemos o nome da pasta de origem “C: \ ProgramData \ ABBYY \ FineReader \ 15 \ Licenses \”): Onde YYYYYYYYA, YYYYYYYB, YYYYYYYYC, ... YYYYYYYYYZ - esses são carimbos de data / hora diferentes na área AAAAAAAAAA + 10 minutos (caso o carimbo de data / hora esteja um pouco atrasado). Em seguida, crie o link: Observe que nenhum desses arquivos realmente existe. Isso é necessário para que, ao se referir, por exemplo, a tmpXXXX_YYYYYYYYB.tmp, ocorram dois redirecionamentos e, como resultado, o serviço funcione com o arquivo "C: \ test \ l2 \ nope". Assim que descobrirmos a criação do arquivo "C: \ test \ l2 \ nope", devemos criar imediatamente dois novos links simbólicos:tmpXXXX_YYYYYYYYA.tmp <-> C:\test\l1\proxy
tmpXXXX_YYYYYYYYB.tmp <-> C:\test\l1\proxy
tmpXXXX_YYYYYYYYC.tmp <-> C:\test\l1\proxy
…
tmpXXXX_YYYYYYYYZ.tmp <-> C:\test\l1\proxy
C:\test\l1\proxy <-> C:\test\l2\nope
C:\test\l1\proxy <-> C:\test\l2\payload
Licensing.cnt <-> C:\target\path
O serviço continuará gravando o conteúdo do arquivo em "C: \ test \ l2 \ nope", mas o renomeará após passar pelo novo link simbólico. Portanto, em vez de renomear, por exemplo, “tmpXXXX_YYYYYYYYC.tmp” para “Licensing.cnt”, “C: \ test \ l2 \ payload” será realmente renomeado (movido) para “C: \ target \ path”. De fato, podemos colocar um arquivo com qualquer conteúdo em qualquer caminho em nome do usuário NT AUTHORITY \ SYSTEM .Esquematicamente, ele ficará assim:
A cor indica o que realmente será executado devido à influência dos links simbólicos.Aumentar privilégios usando a primitiva resultante já é fácil - você pode anexar sua dll a processos do sistema e outras coisas semelhantes. Nesse ponto, entrei em contato com os representantes da ABBYY e passei a eles informações sobre a vulnerabilidade.No momento, de acordo com a ABBYY, a vulnerabilidade está fechada.Linha do tempo
25/11/2019 - detecção de vulnerabilidade26/11/2019 - contato de segurança solicitado do fabricante26/11/2019 - envie um relatório de vulnerabilidade ao fabricante09/09/2019 - a vulnerabilidade foi confirmada pelo fabricante10/01/2020 - a vulnerabilidade foi corrigidaem 22/01/2020 - as vulnerabilidades foram atribuídas CVE-2019-2038319/02/2019 .2020 - publicação deste artigoAtualmente, existem muitos projetos e estamos expandindo a equipe de “Monitoramento Prospectivo”. Estamos procurando especialistas no estudo de códigos-fonte, bem como especialistas na análise de aplicativos móveis. Deseja fazer parte da minha equipe - escreva-me, Anastasia (Ana2121) ou pelo e-mail info@amonitoring.ruEste artigo em inglês.