← Volver al listado de tecnologías
Leviathan Nivel 5 - Symlinks y Archivos Temporales
Leviathan Nivel 5 - Symlinks y Archivos Temporales
Objetivo
Un binario leviathan5 intenta leer un archivo específico.
Exploración
ls -la
./leviathan5
# Cannot find /tmp/file.log
El programa busca /tmp/file.log.
Análisis
ltrace ./leviathan5
Verás:
fopen("/tmp/file.log", "r")
El programa:
- Abre
/tmp/file.log - Lee su contenido
- Lo imprime
Solución
Crea un symlink apuntando a la contraseña:
ln -s /etc/leviathan_pass/leviathan6 /tmp/file.log
./leviathan5
El programa sigue el symlink y lee la contraseña.
Teoría: Symlinks (Enlaces Simbólicos)
¿Qué es un Symlink?
Un archivo que apunta a otro archivo o directorio.
ln -s /ruta/destino nombre_link
Diferencia con Hard Links
| Tipo | Descripción |
|---|---|
| Symlink | Apunta a una ruta (puede romperse) |
| Hard link | Apunta al mismo inode (mismo archivo) |
Visualización
ls -la /tmp/file.log
# lrwxrwxrwx ... /tmp/file.log -> /etc/leviathan_pass/leviathan6
La l al inicio indica symlink.
Vulnerabilidad: Symlink Attacks
El Problema
Si un programa SUID lee un archivo predecible:
- Atacante crea symlink antes
- Programa sigue el symlink
- Lee archivo con privilegios elevados
Escenarios Comunes
| Escenario | Riesgo |
|---|---|
/tmp/predictable_name | Symlink attack |
| Archivos de log hardcodeados | Lectura arbitraria |
| Race conditions | TOCTOU |
TOCTOU (Time of Check to Time of Use)
1. Programa verifica archivo (check)
2. Atacante crea symlink (race)
3. Programa usa archivo (use)
Prevención
// Vulnerable
FILE *f = fopen("/tmp/file.log", "r");
// Mejor
int fd = open("/tmp/file.log", O_RDONLY | O_NOFOLLOW);
// O_NOFOLLOW falla si es symlink
Comandos Aprendidos
| Comando | Uso |
|---|---|
ln -s | Crear symlink |
ls -la | Ver symlinks |
readlink | Ver destino de symlink |
Siguiente Nivel
- Usuario: leviathan6