← Todas las entradas

Scape Room: diseñando una cadena de fallo con presión, pistas y preloading

Una cadena de fallos que parecen inconexos pero se empujan unos a otros, de una pista en las cabeceras HTTP a una biblioteca precargada con la clave de root.

Avanzado · Linux
URL del reto: labs.thehackerslabs.com/machines/80


Por qué la diseñé

Scape Room es una cadena de fallos que parecen inconexos pero se empujan unos a otros, desde una pista filtrada hasta un secreto donde nadie mira, un automatismo que se puede activar y un mecanismo de carga que rompe la confianza del host. La monté para que el valor estuviera en entender por qué cada pieza encaja con la siguiente, más que en llegar a root.

Le puse nombre de escape room a propósito, por la presión, las señales pequeñas y la obligación de separar el ruido de la pista que sirve. Así se lee mejor la superficie de exposición, que es como cae la mayoría de sistemas, por varias decisiones pobres encadenadas y no por un solo fallo crítico.


La máquina de un vistazo

Deja expuestos tres servicios, SSH, HTTP y MySQL, sin nada de relleno. La cadena arranca en una pista escondida en las cabeceras HTTP, pasa por un subdominio oculto, unas credenciales metidas en los metadatos de una imagen y un evento de MySQL que se puede encender, y termina en una biblioteca precargada con la clave de root.


Cómo la monté, paso a paso

Tres puertos y ni uno de relleno

Expuse solo SSH, HTTP y MySQL. No quería esconder la máquina detrás de una enumeración interminable ni inflarla con servicios que no pintan nada. El aprendizaje está en interpretar bien tres puertos, no en encontrar veinte.

La primera pista, en las cabeceras HTTP

En la web dejé dos cabeceras fuera de lo habitual, X-Hint y X-Contact. La primera lleva a un subdominio que hay que resolver a mano (info.sensores.thl), y en su código fuente escondí un comentario en Base64 con una pista narrativa. Quería que se viera cómo la información que hunde un sistema rara vez está en la funcionalidad visible. Casi siempre está en metadatos, cabeceras y comentarios que el equipo da por inofensivos.

El secreto en los metadatos de una imagen

  1. Generé la imagen del panel de sensores.
  2. Codifiqué en Base64 las credenciales del usuario acute.
  3. Las incrusté en el comentario EXIF de la imagen. Un exiftool las descubre.

Lo escondí ahí para que quien resuelve trate los ficheros auxiliares, imágenes, documentos, artefactos de despliegue, como parte del perímetro. Esa frontera no existe. Todo lo que se publica cuenta.

El automatismo de MySQL que se puede encender

Con esas credenciales se entra a MySQL. Dentro dejé un evento programado deshabilitado. Al activarlo (ALTER EVENT insert_login_data ENABLE), la tabla login empieza a generar credenciales y desde ahí se recupera la contraseña del administrador, cifrada con una clave que vive en el propio entorno.

Un servicio expuesto no siempre se rompe atacando el motor. A veces basta un automatismo inseguro que ya estaba ahí. Un evento o un job se dan por confiables porque existen, y en cuanto alguien los puede activar o reconfigurar, dejan de ser automatización y pasan a ser mecanismo de abuso.

La pista de preloading, escondida en un GPG

Puse un leeme.txt.gpg protegido con una passphrase débil, de las que caen con rockyou. Dentro no hay ninguna instrucción literal, solo una pista sobre pre-carga. Con esto quería girar la mentalidad de buscar secretos hacia entender cómo resuelve el sistema sus dependencias y quién controla ese proceso. No todo privilegio se gana explotando un SUID o un sudoers mal puesto.

El corazón del fallo, una biblioteca precargada con la clave de root

El fallo central lo metí en /etc/ld.so.preload, que fuerza a cargar /lib/libscaperoom.so en cada proceso. Dentro de esa biblioteca, en la sección .rodata, dejé la contraseña de root en claro. Un readelf la saca y con ella se pasa a root.

Cuando el sistema carga una biblioteca de forma global, extiende su superficie de confianza a todo el host. Si esa pieza guarda lógica sensible o secretos, el problema deja de estar acotado a una aplicación y contamina el comportamiento del sistema entero. Es una exageración de algo que pasa fuera del laboratorio, cuando se esconde lógica crítica en componentes compartidos.


Qué quería enseñar

Scape Room premia leer cómo se conectan una filtración de contexto, un secreto expuesto, un automatismo inseguro y el abuso de un mecanismo global de carga. Aquí la fuerza bruta y la intuición a ciegas no llevan a ningún sitio.

FaseQué enseñaError que representa
Cabeceras HTTP y subdominioLa superficie útil no está solo en la app visiblePistas operativas filtradas en metadatos y cabeceras
Metadatos de la imagenLos archivos publicados son parte del perímetroSecretos embebidos en recursos auxiliares
Evento de MySQLUn servicio expuesto puede ser punto de controlAutomatismos mal gobernados
Passphrase del GPGEl acceso entrega la siguiente pista, no el finalSecretos débiles y exportables
ld.so.preloadLa confianza global del host se puede romper por diseñoBibliotecas precargadas usadas sin criterio

La lección que quería dejar es sencilla. Una intrusión que llega lejos rara vez depende de una bala de plata. Avanza porque varias capas comparten el mismo problema de fondo, decisiones tomadas sin pensar cómo se comportan cuando alguien observa, correlaciona y reutiliza lo que encuentra.

ciberseguridadlaboratorioCTFescalada de privilegiosLinux