7.8 KiB
Abuso de Instaladores do macOS
Aprenda hacking AWS do zero ao avançado com htARTE (HackTricks AWS Red Team Expert)!
Outras formas de apoiar o HackTricks:
- Se você deseja ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF Confira os PLANOS DE ASSINATURA!
- Adquira o swag oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-nos no Twitter 🐦 @carlospolopm.
- Compartilhe seus truques de hacking enviando PRs para os HackTricks e HackTricks Cloud repositórios do github.
Informações Básicas sobre Pkg
Um pacote de instalador do 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 arquivo do pacote em si é um arquivo de arquivo que contém uma hierarquia de arquivos e diretórios que serão instalados no computador de destino. 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 gzip compactado): Arquivos para instalar no
local de instalação
do PackageInfo - Scripts (arquivo CPIO gzip compactado): Scripts de pré e pós-instalação e mais recursos extraídos para um diretório temporário para execução.
Descompactar
# 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
Os arquivos DMG, ou Imagens de Disco da 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 bloco brutos normalmente 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: Este é a raiz da imagem do disco. Geralmente contém o aplicativo e possivelmente um link para a pasta Aplicativos.
- 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 de Aplicativos: Este é um atalho para a pasta Aplicativos no macOS. O objetivo disso é facilitar a instalação do aplicativo. Você pode arrastar o arquivo .app para este atalho para instalar o aplicativo.
Privilégios Elevados via abuso de pkg
Execução a partir de diretórios públicos
Se um script de pré ou pós-instalação estiver, por exemplo, sendo executado a partir de /var/tmp/Installerutil
, e um atacante puder controlar esse script, ele poderá elevar os privilégios sempre que for executado. Ou outro exemplo semelhante:
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 puder modificar este arquivo, ele poderá abusar de sua execução com root para elevar 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 um ponto de montagem sobre /tmp/fixedname
sem proprietários para que você possa modificar qualquer arquivo durante a instalação para abusar do processo de instalação.
Um exemplo disso é CVE-2021-26089 que conseguiu sobrescrever um script periódico para obter execução como root. Para mais informações, confira a palestra: OBTS v4.0: "Montanha de Bugs" - Csaba Fitzl
pkg como malware
Carga Vazia
É possível simplesmente gerar um arquivo .pkg
com scripts de pré e pós-instalação sem nenhuma carga útil.
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 Visão Interna dos Pacotes de Instalação do MacOS e Falhas Comuns de Segurança
- OBTS v4.0: "O Mundo Selvagem dos Instaladores do macOS" - Tony Lambert
Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras formas de apoiar o HackTricks:
- Se você deseja ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF Confira os PLANOS DE ASSINATURA!
- Adquira o swag oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-nos no Twitter 🐦 @carlospolopm.
- Compartilhe seus truques de hacking enviando PRs para os repositórios HackTricks e HackTricks Cloud.