hacktricks/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-sandbox-debug-and-bypass/macos-office-sandbox-bypasses.md

6.9 KiB
Raw Blame History

Bypasses de Sandbox do Office no macOS

Aprenda hacking AWS do zero ao avançado com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks:

Bypass de Sandbox do Word via Agentes de Inicialização

A aplicação utiliza um Sandbox personalizado usando a permissão com.apple.security.temporary-exception.sbpl e este sandbox personalizado permite escrever arquivos em qualquer lugar desde que o nome do arquivo comece com ~$: (require-any (require-all (vnode-type REGULAR-FILE) (regex #"(^|/)~$[^/]+$")))

Portanto, escapar foi tão fácil quanto escrever um arquivo plist LaunchAgent em ~/Library/LaunchAgents/~$escape.plist.

Confira o relatório original aqui.

Bypass de Sandbox do Word via Itens de Login e zip

Lembre-se de que a partir da primeira fuga, o Word pode escrever arquivos arbitrários cujo nome começa com ~$, embora após o patch da vulnerabilidade anterior não fosse possível escrever em /Library/Application Scripts ou em /Library/LaunchAgents.

Foi descoberto que de dentro do sandbox é possível criar um Item de Login (aplicativos que serão executados quando o usuário fizer login). No entanto, esses aplicativos não serão executados a menos que sejam notarizados e não é possível adicionar argumentos (então você não pode simplesmente executar um shell reverso usando bash).

A partir da fuga anterior do Sandbox, a Microsoft desabilitou a opção de escrever arquivos em ~/Library/LaunchAgents. No entanto, foi descoberto que se você colocar um arquivo zip como um Item de Login o Archive Utility simplesmente irá descompactá-lo em sua localização atual. Assim, porque por padrão a pasta LaunchAgents de ~/Library não é criada, foi possível compactar um plist em LaunchAgents/~$escape.plist e colocar o arquivo zip em ~/Library para que ao descompactá-lo alcance o destino de persistência.

Confira o relatório original aqui.

Bypass de Sandbox do Word via Itens de Login e .zshenv

(Lembre-se de que a partir da primeira fuga, o Word pode escrever arquivos arbitrários cujo nome começa com ~$).

No entanto, a técnica anterior tinha uma limitação, se a pasta ~/Library/LaunchAgents existisse porque algum outro software a criou, falharia. Então foi descoberta uma cadeia de Itens de Login diferente para isso.

Um atacante poderia criar os arquivos .bash_profile e .zshenv com o payload para executar e então compactá-los e escrever o zip na pasta do usuário vítima: ~/~$escape.zip.

Em seguida, adicione o arquivo zip aos Itens de Login e depois ao aplicativo Terminal. Quando o usuário fizer login novamente, o arquivo zip será descompactado nos arquivos do usuário, sobrescrevendo .bash_profile e .zshenv e, portanto, o terminal executará um desses arquivos (dependendo se bash ou zsh é usado).

Confira o relatório original aqui.

Bypass de Sandbox do Word com Open e variáveis de ambiente

De processos em sandbox ainda é possível invocar outros processos usando o utilitário open. Além disso, esses processos serão executados dentro de seu próprio sandbox.

Foi descoberto que o utilitário open tem a opção --env para executar um aplicativo com variáveis de ambiente específicas. Portanto, foi possível criar o arquivo .zshenv dentro de uma pasta dentro do sandbox e usar open com --env configurando a variável HOME para essa pasta abrindo o aplicativo Terminal, que executará o arquivo .zshenv (por algum motivo também foi necessário definir a variável __OSINSTALL_ENVIROMENT).

Confira o relatório original aqui.

Bypass de Sandbox do Word com Open e stdin

O utilitário open também suportava o parâmetro --stdin (e após a fuga anterior não era mais possível usar --env).

A questão é que mesmo que o python fosse assinado pela Apple, ele não executará um script com o atributo quarantine. No entanto, era possível passar a ele um script do stdin para que não verificasse se estava em quarentena ou não:

  1. Deixe um arquivo ~$exploit.py com comandos Python arbitrários.
  2. Execute open stdin='~$exploit.py' -a Python, que executa o aplicativo Python com nosso arquivo deixado servindo como sua entrada padrão. O Python executa nosso código tranquilamente e, como é um processo filho do launchd, não está vinculado às regras de sandbox do Word.
Aprenda hacking AWS do zero ao avançado com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks: