
Hackeando Windows através do iTunes - Escalação de Privilégios Local 0-day
Este é um write-up sobre a CVE-2024–44193, que é um exploit de Escalação de Privilégio Local no iTunes versão 12.13.2.3.
Foi corrigido em 12 de setembro de 2024 pela Apple. Link para o Advisory de Segurança da Apple: Advisory de Segurança da Apple
O iTunes versão 12.13.2.3 instala o Apple Device Discovery Service:
C:\Program Files\Common Files\Apple\Mobile Device Support\AppleMobileDeviceService.exe, que é vulnerável a um exploit de Escalação de Privilégio Local.
Em respeito e compreensão para aqueles que não se importam com mais um write-up mal escrito e provavelmente longo demais, aqui está a versão curta:
A vulnerabilidade é possibilitada devido à má gestão das permissões de usuário no caminho C:\ProgramData\Apple\*.
Isso permite que membros do Grupo Local "Usuários" escrevam arquivos arbitrários nesse caminho. Quando o serviço AppleMobileDeviceService.exe é reiniciado, o que pode ser acionado por um usuário sem privilégios, uma primitiva de exclusão arbitrária de pasta/arquivo pode ser armada para obter execução arbitrária de código no sistema com privilégios de SYSTEM.
Aviso! Explicações medíocres de ferramentas a seguir.
Pule esta seção se você já está familiarizado com as ferramentas.
A ferramenta Oplock é uma ferramenta para usar um “bloqueio oportunista” no Windows. A ferramenta nos permite “pausar” um processo ao bloquear um arquivo até que certos requisitos sejam satisfeitos; no entanto, também pode ser usada para “pausar” um processo com propósitos maliciosos, como ganhar tempo suficiente para que nosso payload de exploit seja executado.
A ferramenta FolderContentsDeleteToFolderDelete funciona criando automaticamente uma pasta com um arquivo dentro. Um oplock é então definido no arquivo para pausar o processo. Quando o processo é pausado, o arquivo é movido para fora da pasta. A pasta é então excluída e recriada como uma junção NTFS para um destino. Quando o oplock é cancelado, e o processo continua, a exclusão do arquivo/pasta segue a junção NTFS recém-criada até o destino e exclui esse arquivo antes de continuar a execução.
Esta ferramenta provavelmente é melhor explicada pela Zero Day Initiative, então aqui está um link para uma explicação direto deles:
Abusando de Exclusões Arbitrárias de Arquivos para Escalar Privilégios e Outros Grandes Truques
AppleMobileDeviceService.exeQuando o iTunes é instalado, ele também instala um serviço: AppleMobileDeviceService.exe, que executa com privilégios de SYSTEM.
Quando investiguei esse serviço usando o Windows Sysinternals Process Monitor (Procmon), imediatamente notei um comportamento preocupante.
O serviço percorre recursivamente todos os arquivos dentro do caminho C:\ProgramData\Apple\Lockdown\* e exclui todas as pastas e arquivos que não pertencem àquele local.
Para testes locais, usei o ProcessHacker2 para reiniciar o serviço à força, a fim de inspecionar o comportamento do programa.
O comportamento observado foi que o serviço executando como SYSTEM consulta o diretório e todos os subdiretórios internos e, em seguida, executa a operação CreateFile com a opção Delete On Close habilitada, o que significa que o serviço SYSTEM consulta o caminho C:\ProgramData\Apple\Lockdown\* e consulta recursivamente as subpastas e arquivos dentro desse diretório e os exclui.
C:\ProgramData\Apple\*Windows Sysinternals https://learn.microsoft.com/en-us/sysinternals/ accesschk64.exe pode ser usado para verificar os direitos de acesso em pastas específicas.
Membros do Grupo Local "Usuários" têm permissões de escrita na pasta C:\ProgramData\Apple\Lockdown\, o que permite que usuários com poucos privilégios escrevam arquivos arbitrários dentro da pasta.
Como podemos escrever arquivos arbitrários dentro do caminho Lockdown, e o processo SYSTEM os excluirá quando o serviço for reiniciado, foi possível criar uma primitiva de exclusão arbitrária de arquivo/pasta.
Para ilustrar isso, crio duas subpastas dentro da pasta Lockdown.
Subpasta a, e subpasta b dentro da subpasta a.
Isso vai ficar assim: C:\ProgramData\Apple\Lockdown\a\b
Dentro da subpasta a há um arquivo de texto chamado aa.txt e dentro da subpasta b há um arquivo de texto chamado bb.txt
C:\ProgramData\Apple\Lockdown\a\aa.txt
C:\ProgramData\Apple\Lockdown\a\b\bb.txt
Como pode ser visto na captura de tela acima, a operação "CreateFile" está sendo executada com a opção "Delete On Close" em aa.txt, excluindo-o.
Quando o processo SYSTEM executa a operação CreateFile em aa.txt e bb.txt com a opção Delete On Close nos arquivos, o processo SYSTEM AppleMobileDeviceService.exe excluirá os arquivos.
Agora é possível para nós criar arquivos arbitrários dentro da pasta Lockdown e excluí-los, o que nos leva ao próximo truque interessante.
No Windows, é possível usar junções NTFS para direcionar uma pasta para outro lugar. De certa forma, isso é semelhante a symlinks no Linux.
Para ilustrar isso, é possível criar uma junção NTFS (symlink) dentro da pasta C:\ProgramData\Apple\Lockdown apontando para uma pasta na Área de Trabalho.
Você pode fazer isso sozinho usando o PowerShell New-Item -Type Junction -Path whatever -Target "C:\Users\user\Desktop\AAyes", ou simplesmente usar o conjunto de ferramentas oferecido pela ZDI:
Execute o seguinte comando para apontar uma junção NTFS dentro da pasta Lockdown para "Target" na Área de Trabalho.
.\FolderContentsDeleteToFolderDelete.exe /target "C:\Users\user\Desktop\AAyes" /initial "C:\ProgramData\Apple\Lockdown"
Quando o Serviço é reiniciado, a junção NTFS recém-criada apontará para AAyes localizado na Área de Trabalho.
Como o Serviço executa a operação CreateFile com a opção Delete On Close como SYSTEM, o arquivo será excluído.
Como a operação é executada com privilégios de SYSTEM, temos uma primitiva de exclusão arbitrária de pasta ou arquivo, o que significa que podemos obter execução de código no host como SYSTEM.
NOTA:
Foi necessário fazer certas edições no código-fonte do projeto FolderContentsDeleteToFolderDelete devido a restrições de nomes de arquivo / nomes de pasta. Os nomes de arquivo / nomes de pasta tiveram que ser muito curtos para que a exclusão ocorresse. A razão por trás disso é desconhecida e não foi investigada, pois nomes curtos resolveram o problema de forma confiável.