6.9 KiB
Evasiones del Sandbox de Office en macOS
Aprende hacking en AWS de cero a héroe con htARTE (Experto en Red Team de HackTricks para AWS)!
Otras formas de apoyar a HackTricks:
- Si quieres ver a tu empresa anunciada en HackTricks o descargar HackTricks en PDF, consulta los PLANES DE SUSCRIPCIÓN!
- Obtén el merchandising oficial de PEASS & HackTricks
- Descubre La Familia PEASS, nuestra colección de NFTs exclusivos
- Únete al 💬 grupo de Discord o al grupo de telegram o sígueme en Twitter 🐦 @carlospolopm.
- Comparte tus trucos de hacking enviando PRs a los repositorios de github de HackTricks y HackTricks Cloud.
Evasión del Sandbox de Word mediante Launch Agents
La aplicación utiliza un Sandbox personalizado con el derecho com.apple.security.temporary-exception.sbpl
y este sandbox personalizado permite escribir archivos en cualquier lugar siempre que el nombre del archivo comience con ~$
: (require-any (require-all (vnode-type REGULAR-FILE) (regex #"(^|/)~$[^/]+$")))
Por lo tanto, la evasión fue tan fácil como escribir un plist
LaunchAgent en ~/Library/LaunchAgents/~$escape.plist
.
Consulta el informe original aquí.
Evasión del Sandbox de Word mediante Login Items y zip
Recuerda que desde la primera evasión, Word puede escribir archivos arbitrarios cuyo nombre comience con ~$
, aunque después del parche de la vulnerabilidad anterior no era posible escribir en /Library/Application Scripts
o en /Library/LaunchAgents
.
Se descubrió que desde dentro del sandbox es posible crear un Login Item (aplicaciones que se ejecutarán cuando el usuario inicie sesión). Sin embargo, estas aplicaciones no se ejecutarán a menos de que estén notarizadas y no es posible añadir argumentos (por lo que no puedes simplemente ejecutar un shell inverso usando bash
).
Desde la evasión anterior del Sandbox, Microsoft deshabilitó la opción de escribir archivos en ~/Library/LaunchAgents
. Sin embargo, se descubrió que si pones un archivo zip como Login Item, la Archive Utility
simplemente lo descomprimirá en su ubicación actual. Entonces, porque por defecto la carpeta LaunchAgents
de ~/Library
no está creada, fue posible comprimir un plist en LaunchAgents/~$escape.plist
y colocar el archivo zip en ~/Library
para que al descomprimirlo alcance el destino de persistencia.
Consulta el informe original aquí.
Evasión del Sandbox de Word mediante Login Items y .zshenv
(Recuerda que desde la primera evasión, Word puede escribir archivos arbitrarios cuyo nombre comience con ~$
).
Sin embargo, la técnica anterior tenía una limitación, si la carpeta ~/Library/LaunchAgents
existe porque otro software la creó, fallaría. Por lo tanto, se descubrió una cadena diferente de Login Items para esto.
Un atacante podría crear los archivos .bash_profile
y .zshenv
con la carga útil a ejecutar y luego comprimirlos y escribir el zip en la carpeta del usuario víctima: ~/~$escape.zip
.
Luego, añadir el archivo zip a los Login Items y luego la aplicación Terminal
. Cuando el usuario vuelva a iniciar sesión, el archivo zip se descomprimirá en la carpeta del usuario, sobrescribiendo .bash_profile
y .zshenv
y por lo tanto, la terminal ejecutará uno de estos archivos (dependiendo si se usa bash o zsh).
Consulta el informe original aquí.
Evasión del Sandbox de Word con Open y variables de entorno
Desde procesos en sandbox todavía es posible invocar otros procesos utilizando la utilidad open
. Además, estos procesos se ejecutarán dentro de su propio sandbox.
Se descubrió que la utilidad open tiene la opción --env
para ejecutar una aplicación con variables de entorno específicas. Por lo tanto, fue posible crear el archivo .zshenv
dentro de una carpeta dentro del sandbox y luego usar open
con --env
estableciendo la variable HOME
a esa carpeta abriendo la aplicación Terminal
, la cual ejecutará el archivo .zshenv
(por alguna razón también fue necesario establecer la variable __OSINSTALL_ENVIROMENT
).
Consulta el informe original aquí.
Evasión del Sandbox de Word con Open y stdin
La utilidad open
también soportaba el parámetro --stdin
(y después de la evasión anterior ya no era posible usar --env
).
El caso es que incluso si python
estaba firmado por Apple, no ejecutará un script con el atributo quarantine
. Sin embargo, era posible pasarle un script desde stdin para que no comprobara si estaba en cuarentena o no:
- Suelta un archivo
~$exploit.py
con comandos de Python arbitrarios. - Ejecuta open
–stdin='~$exploit.py' -a Python
, lo que ejecuta la aplicación Python con nuestro archivo soltado sirviendo como su entrada estándar. Python ejecuta felizmente nuestro código, y dado que es un proceso hijo de launchd, no está sujeto a las reglas del sandbox de Word.
Aprende hacking en AWS de cero a héroe con htARTE (Experto en Red Team de HackTricks para AWS)!
Otras formas de apoyar a HackTricks:
- Si quieres ver a tu empresa anunciada en HackTricks o descargar HackTricks en PDF, consulta los PLANES DE SUSCRIPCIÓN!
- Obtén el merchandising oficial de PEASS & HackTricks
- Descubre La Familia PEASS, nuestra colección de NFTs exclusivos
- Únete al 💬 grupo de Discord o al grupo de telegram o sígueme en Twitter 🐦 @carlospolopm.
- Comparte tus trucos de hacking enviando PRs a los repositorios de github de HackTricks y HackTricks Cloud.