← Volver al listado de tecnologías

Leviathan Nivel 5 - Symlinks y Archivos Temporales

Por: SiempreListo
overthewireleviathansymlinktmpnivel-5

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:

  1. Abre /tmp/file.log
  2. Lee su contenido
  3. 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.

Un archivo que apunta a otro archivo o directorio.

ln -s /ruta/destino nombre_link
TipoDescripción
SymlinkApunta a una ruta (puede romperse)
Hard linkApunta 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.

El Problema

Si un programa SUID lee un archivo predecible:

  1. Atacante crea symlink antes
  2. Programa sigue el symlink
  3. Lee archivo con privilegios elevados

Escenarios Comunes

EscenarioRiesgo
/tmp/predictable_nameSymlink attack
Archivos de log hardcodeadosLectura arbitraria
Race conditionsTOCTOU

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

ComandoUso
ln -sCrear symlink
ls -laVer symlinks
readlinkVer destino de symlink

Siguiente Nivel