
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.
const wchar_t folder2path[] = L"C:\\d";
const wchar_t exploitFileName[] = L"e.txt";
// It was required to shorten the two consstants: “folder2path” and “exploitFileName”
// They where changed to: L"C:\\d" and L"e.txt" because it seemed that file and folder name length had a meaningful impact on exploit functionality.
[...]
// We also needed to edit the “folder1path” value to L”c” in order to shorten it.
folder1path += L"c";
Como o serviço seguirá recursivamente quaisquer junctions (symlinks), a tese era que seria possível excluir arquivos arbitrariamente no sistema como SYSTEM usando o serviço vulnerável da Apple, que seguirá a junção NTFS. Como o serviço vulnerável convenientemente permite que usuários sem privilégios reiniciem o serviço usando o truque ("Aplicativos -> Aplicativos instalados -> Apple Mobile Device Support -> Modificar -> Reparar") pela GUI do Windows, é possível acionar o exploit à vontade. Quando o serviço é reiniciado, ele seguirá a junção NTFS e o comportamento definido do programa dita que o serviço excluirá os arquivos ou pastas para os quais o usuário escolher apontar.
Em outras palavras, é o usuário que decide quais arquivos ou pastas o serviço excluirá. Como ele executa como SYSTEM, podemos excluir quase qualquer arquivo do sistema (não arquivos que exijam privilégios de TrustedInstaller).
Isso significa que podemos criar cuidadosamente uma cadeia de eventos que fará o seguinte:
A Prova de Conceito consiste em 5 etapas.
.\SetOpLock.exe C:\ProgramData\Apple\Lockdown\
Acionar a reinicialização do serviço Aplicativos -> Aplicativos instalados -> Apple Mobile Device Support -> Modificar -> Reparar
Preparar o truque de rollback do MSI
.\FolderOrFileDeleteToSystem.exe
.\FolderContentsDeleteToFolderDelete.exe /target 'C:\Config.Msi' /initial "C:\ProgramData\Apple\Lockdown"
Quando o Oplock é liberado na etapa cinco, monitoramos o processo FolderContentsDeleteToFolderDelete para verificar se a junção NTFS foi seguida e se o Config.MSI localizado em C:\ foi excluído corretamente. Em seguida, monitoramos o processo FolderOrFileDeletionToSystem.exe para verificar se vencemos a condição de corrida e se a pasta Config.MSI "maliciosa" com o script de rollback modificado foi gravada. Se tudo der certo, podemos pressionar CTRL+ALT+DELETE, abrir o menu Acessibilidade no canto inferior direito e abrir o Teclado Virtual. Como sobrescrevemos o HID.DLL em C:\Program Files\Common Files\microsoft shared\ink\HID.DLL usando o script de rollback malicioso, um shell CMD aparecerá como SYSTEM, finalizando nosso exploit.

Executando e monitorando o FolderContentsDeleteToFolderDelete.exe
Executando e monitorando o FolderOrFileDeleteToSystem.exe
Obtendo um shell SYSTEM