
Código de Prova de Conceito para CVE-2023-32353: Escalada local de privilégios via iTunes no Windows
O instalador MSI do player de música Apple iTunes continha uma vulnerabilidade que permitia a um usuário comum, com privilégios baixos, em um computador Microsoft Windows obter permissões elevadas no contexto de NT AUTHORITY/SYSTEM. Este repositório contém uma prova de conceito (PoC) para mostrar como isso poderia ser explorado, bem como mais informações para pesquisadores de segurança e desenvolvedores que desejam aprender mais sobre este tipo de vulnerabilidade. No entanto, a aplicabilidade disso é limitada, conforme você pode ler na seção de Perguntas e Respostas.
Não obtive um shell SYSTEM. O que fiz de errado?
Como isso é uma prova de conceito, não houve muita preocupação em ser indetectável. Para usar isso, você deve executar uma instalação do Windows 10 Home Edition anterior à versão '10.0.19041.572', porque nessa versão essa vulnerabilidade foi corrigida. Eu testei usando Windows 10 1909. Além disso, você deve navegar até "Segurança do Windows" e desabilitar tudo relacionado ao Microsoft Defender/Windows Defender, pois eles parecem bloquear a criação de link simbólico para \RPC Control usando Proteção em Tempo Real (que é ativada automaticamente a cada reinicialização, lembre-se disso!)
Devo ter medo de usar o iTunes agora?
Não, basta atualizar para a versão mais recente do iTunes e você estará seguro.
Posso executar a PoC sem precisar compilá-la eu mesmo?
Embora eu recomende fortemente que ninguém execute arquivos .exe da internet, executar o Privilege-Escalation-using-Music-Player.exe do diretório ./x64/Release/ em uma máquina virtual deve funcionar. Caso contrário, tente instalar o mais recente VC redistributable pelos links fornecidos pela Microsoft.
Qual é a vulnerabilidade real aqui?
Durante o reparo do MSI, o instalador cria uma pasta de baixo privilégio chamada "SC Info" dentro de C:\ProgramData\Apple Computer\iTunes. Para ser preciso, o diretório C:\ProgramData\Apple Computer\iTunes não permite Controle total para todos. Mas a subpasta chamada "SC Info" concede Controle total para Todos (incluindo usuários com baixos privilégios/padrão). Se você excluir manualmente todo o conteúdo da pasta C:\ProgramData\Apple Computer\iTunes\ (dependendo se você já executou o iTunes antes, pode haver mais pastas além de "SC Info"), então um usuário com baixos privilégios é capaz de criar um ponto de montagem de C:\ProgramData\Apple Computer\iTunes\ para qualquer outro diretório que seja gravável por NT AUTHORITY/SYSTEM. Nesta prova de conceito, foi usada a técnica "wermgr.exe.local", que já é mitigada nas versões atuais do Windows 10 e se aplica apenas à edição Windows 10 Home, pelo que sei. Então, se você criar um ponto de montagem de C:\ProgramData\Apple Computer\iTunes\ para \RPC Control e, em seguida, um link simbólico de \RPC Control\SC Info (lembre-se, SC Info é o nome da pasta que o instalador cria dentro da pasta do iTunes) para ??\c:\windows\system32\wermgr.exe.local e depois usar a opção de reparo do MSI do instalador do iTunes, você efetivamente cria um diretório chamado wermgr.exe.local dentro de C:\Windows\System32 que concede Controle total para Todos. Isso efetivamente redireciona a criação da pasta SC Info para \RPC Control, e o próprio RPC Control redireciona a criação da pasta para o diretório System32. A partir daí (novamente, isso não faz parte da vulnerabilidade real, mas apenas para completar a cadeia de escalonamento de privilégios), você pode criar uma subpasta com nome específico com uma DLL manipulada lá dentro, a qual um serviço executado como NT AUTHORITY/SYSTEM, mesmo quando chamado por uma tarefa agendada por um usuário com baixos privilégios, carregará e executará os comandos ali. (ex.: um cmd executando como NT AUTHORITY/SYSTEM) Para mais detalhes, consulte o código real ou a seção "Passos para reproduzir manualmente" abaixo.
Como isso é uma Prova de Conceito, desligue o Windows Defender/Microsoft Defender (também, leia a seção de Perguntas e Respostas)
Instale o iTunes anterior à versão 12.12.9 (ex.: 12.12.4.1)
Exclua todo o conteúdo de C:\ProgramData\Apple Computer\iTunes, mas mantenha a própria pasta iTunes
Crie um Ponto de Montagem de "C:\ProgramData\Apple Computer\iTunes" para "\RPC Control", ex. usando as ferramentas de teste de link simbólico de James Forshaw:
CreateMountPoint.exe "C:\ProgramData\Apple Computer\iTunes" "\RPC Control"
Crie um Link Simbólico de "\RPC Control\SC Info" para "??\c:\windows\system32\wermgr.exe.local"
CreateDosDeviceSymlink.exe "\RPC Control\SC Info" "??\c:\windows\system32\wermgr.exe.local"
Usando o MSI do iTunes/EXE do Instalador do iTunes, "repare" sua instalação do iTunes (se você não tiver mais o Instalador, pode localizar "iTunes64.msi" nesta pasta: C:\ProgramData\Apple Computer\Installer Cache\iTunes <versão>)
Navegue até c:\windows\system32\wermgr.exe.local\
Crie uma subpasta chamada "amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.18362.418_none_e6c6b287130d565d" (isso pode ser diferente no seu sistema, use o nome da pasta mais recente começando com "amd64_microsoft.windows.common-controls_" do diretório C:\Windows\WinSxS)
Coloque um arquivo DLL chamado "comctl32.dll" dentro da pasta amd64_microsoft.windows.common-controls_*
Execute este comando:
schtasks.exe /Run /TN "\Microsoft\Windows\Windows Error Reporting\QueueReporting"
A ação que você especificou dentro do seu arquivo comctl32.dll agora será executada no contexto de NT AUTHORITY/SYSTEM, ex.: uma janela cmd abre