6.9 KiB
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:
- 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.
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:
- Deixe um arquivo
~$exploit.py
com comandos Python arbitrários. - 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:
- 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.