7.7 KiB
Abuso de Instaladores macOS
Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras formas de apoiar o HackTricks:
- Se você quer ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF, confira os PLANOS DE ASSINATURA!
- Adquira o material oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção de NFTs exclusivos
- Junte-se ao grupo 💬 Discord ou ao grupo telegram ou siga-me no Twitter 🐦 @carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para os repositórios github do HackTricks e HackTricks Cloud.
Informações Básicas do Pkg
Um pacote instalador macOS (também conhecido como arquivo .pkg
) é um formato de arquivo usado pelo macOS para distribuir software. Esses arquivos são como uma caixa que contém tudo o que um software precisa para instalar e funcionar corretamente.
O próprio arquivo do pacote é um arquivo que contém uma hierarquia de arquivos e diretórios que serão instalados no computador alvo. Ele também pode incluir scripts para realizar tarefas antes e depois da instalação, como configurar arquivos de configuração ou limpar versões antigas do software.
Hierarquia
- Distribuição (xml): Personalizações (título, texto de boas-vindas...) e verificações de script/instalação
- PackageInfo (xml): Informações, requisitos de instalação, local de instalação, caminhos para scripts a serem executados
- Lista de materiais (bom): Lista de arquivos para instalar, atualizar ou remover com permissões de arquivo
- Carga (arquivo CPIO comprimido com gzip): Arquivos para instalar no
local de instalação
do PackageInfo - Scripts (arquivo CPIO comprimido com gzip): Scripts de pré e pós instalação e mais recursos extraídos para um diretório temporário para execução.
Descomprimir
# Tool to directly get the files inside a package
pkgutil —expand "/path/to/package.pkg" "/path/to/out/dir"
# Get the files ina. more manual way
mkdir -p "/path/to/out/dir"
cd "/path/to/out/dir"
xar -xf "/path/to/package.pkg"
# Decompress also the CPIO gzip compressed ones
cat Scripts | gzip -dc | cpio -i
cpio -i < Scripts
Informações Básicas sobre DMG
Arquivos DMG, ou Imagens de Disco Apple, são um formato de arquivo usado pelo macOS da Apple para imagens de disco. Um arquivo DMG é essencialmente uma imagem de disco montável (contém seu próprio sistema de arquivos) que contém dados de blocos brutos tipicamente comprimidos e às vezes criptografados. Quando você abre um arquivo DMG, o macOS o monta como se fosse um disco físico, permitindo que você acesse seu conteúdo.
Hierarquia
A hierarquia de um arquivo DMG pode ser diferente com base no conteúdo. No entanto, para DMGs de aplicativos, geralmente segue esta estrutura:
- Nível Superior: Esta é a raiz da imagem de disco. Frequentemente contém o aplicativo e possivelmente um link para a pasta Aplicações.
- Aplicativo (.app): Este é o aplicativo real. No macOS, um aplicativo é tipicamente um pacote que contém muitos arquivos e pastas individuais que compõem o aplicativo.
- Link para Aplicações: Este é um atalho para a pasta Aplicações no macOS. O propósito disso é facilitar a instalação do aplicativo. Você pode arrastar o arquivo .app para este atalho para instalar o app.
Privesc via abuso de pkg
Execução a partir de diretórios públicos
Se um script de pré ou pós instalação está, por exemplo, executando a partir de /var/tmp/Installerutil
, um atacante poderia controlar esse script para escalar privilégios sempre que ele for executado. Ou outro exemplo similar:
AuthorizationExecuteWithPrivileges
Esta é uma função pública que vários instaladores e atualizadores chamarão para executar algo como root. Esta função aceita o caminho do arquivo a executar como parâmetro, no entanto, se um atacante pudesse modificar este arquivo, ele poderá abusar de sua execução com root para escalar privilégios.
# Breakpoint in the function to check wich file is loaded
(lldb) b AuthorizationExecuteWithPrivileges
# You could also check FS events to find this missconfig
Para mais informações, confira esta palestra: https://www.youtube.com/watch?v=lTOItyjTTkw
Execução por montagem
Se um instalador escreve em /tmp/fixedname/bla/bla
, é possível criar uma montagem sobre /tmp/fixedname
com noowners para que você possa modificar qualquer arquivo durante a instalação para abusar do processo de instalação.
Um exemplo disso é o CVE-2021-26089 que conseguiu sobrescrever um script periódico para obter execução como root. Para mais informações, dê uma olhada na palestra: OBTS v4.0: "Mount(ain) of Bugs" - Csaba Fitzl
pkg como malware
Payload Vazio
É possível apenas gerar um arquivo .pkg
com scripts de pré e pós-instalação sem nenhum payload.
JS no xml de Distribuição
É possível adicionar tags <script>
no arquivo xml de distribuição do pacote e esse código será executado e pode executar comandos usando system.run
:
Referências
- DEF CON 27 - Desempacotando Pkgs Uma Olhada Dentro dos Pacotes de Instalador do MacOS e Falhas Comuns de Segurança
- OBTS v4.0: "O Mundo Selvagem dos Instaladores do macOS" - Tony Lambert
Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras formas de apoiar o HackTricks:
- Se você quiser ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF Confira os PLANOS DE ASSINATURA!
- Adquira o merchandising oficial do PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção de NFTs exclusivos
- Junte-se ao grupo 💬 Discord ou ao grupo telegram ou siga-me no Twitter 🐦 @carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para os repositórios github do HackTricks e HackTricks Cloud.