Linkvortex

20250905141836.png

LinkVortex es una máquina Linux de fácil dificultad con varias formas de aprovechar los archivos de enlaces simbólicos (symlinks). El punto de apoyo inicial consiste en descubrir un directorio .git expuesto que puede ser volcado para recuperar credenciales. Estas credenciales permiten acceder al sistema de gestión de contenidos Ghost vulnerable a CVE-2023-40028arrow-up-right. Esta vulnerabilidad permite a los usuarios autenticados cargar enlaces simbólicos, permitiendo la lectura arbitraria de archivos dentro del contenedor de Ghost. Las credenciales expuestas en el archivo de configuración de Ghost pueden ser aprovechadas para obtener un shell como usuario en el sistema anfitrión. Por último, el usuario puede ejecutar un script con permisos sudo que son vulnerables a un ataque de condición de carrera symlink (TOCTOU). Esto presenta una oportunidad para escalar privilegios mediante la creación de enlaces a archivos sensibles en el sistema y, en última instancia, obtener acceso root.

Reconocimiento

Iniciamos con el reconocimiento de puertos abiertos de la maquina victima

Luego de tener los puertos abiertos procederemos a enumerar los servicios que corren en dichos puertos

Observamos que en el servicio web tenemos un dominio, por lo que lo agregaremos a /etc/hosts. Luego de agregarlo observamos el siguiente sitio web.

20250904111242.png

Enumerando los subdominios del sitio web, encontraremos que existe uno dev

Agregando al nuestro /etc/hosts y revisando desde nuestro navegador encontraremos con el servicio de gitea.

20250904124241.png

sub dominio - dev

Luego procederemos a enumerar directorios y archivos en el subdominio

Observamos que existe un directorio .git. Para obtener los archivos y detalles del repositorio de git, usaremos git-dumper.

20250904161444.png

Ahora, para ver los cambios que se realizo ejecutaremos

Observamos que se modifico parte de un archivo en la que se cambia credenciales.

20250904184341.png

Haciendo uso de las credenciales y el usuario admin@linkvortex.htb podemos iniciar sesión el cms

20250905144754.png

Shell - bob

CVE-2023-40028

Recordemos que estamos ante un cms

20250905150321.png

Al investigar un poco sobre la versión del cms encontré que este tiene una vulnerabilidad, el que permite leer archivos del sistema. Para esta vulnerabilidad necesitamos credenciales, las cuales ya tenemos.

https://github.com/0xDTC/Ghost-5.58-Arbitrary-File-Read-CVE-2023-40028

Ejecutante, podemos observar que leemos exitosamente le archivo /etc/passwd del servidor

20250904221510.png

Enumerando encontraremos un archivo /var/lib/ghost/config.production.json, el que pudimos ver que fue modificado anteriormente.

20250905153746.png

En este encontraremos unas credenciales para bob y las cuales nos permitirán iniciar sesión por el servicio ssh.

20250904224640.png

Enumerando los privilegios del usuario encontramos que el usuario en cuestión tiene permisos para ejecutar

Shell - root

el usuario bob puede ejecutar /opt/ghost/clean_symlink.sh, el cual tiene el siguiente codigo:

20250905103807.png

Entendamos un poco de lo que hace el script.

Si CHECK_CONTENT es true se ejecuta /usr/bin/cat $QUAR_DIR/$LINK_NAME 2>/dev/null, pero antes valida si este existe al ejecutarse, por lo que al inicio ejecutaremos: CHECK_CONTENT=true .....

En esta parte del código, valida que este tenga la extensión .png y si este no lo tiene termina el programa.

Luego el script hace una validación, en las cuales se obtiene el nombre del archivo LINK_NAME y obtiene el link o a donde apunta LINK_TARGET

Luego hace una validación, en este se valida que el link simbólico no apunte a los directorio etc y root

Para poder bypasear los filtros y las validaciones, lo que haremos será un doble link simbólico.

Entendamos bien como explotarlo. Primero nos creamos un archivo test_passwd

Luego creamos un link simbólico al archivo:

y para b también:

Por lo que si hacemos cat a a.png podremos leer el archivo test_passwd

20250905173248.png

Esto nos permitirá bypasear la validación del directorio root y etc, porque al ejecutar un /usr/bin/readlink nos devolverá b

20250905173440.png

Para automatizar nos crearemos un archivo en la que aplicaremos todo lo anterior:

Ahora, dando permisos de ejecución chmod +x read_file.sh podemos leer archivos con permisos root

20250905124752.png
20250905124823.png

Luego de de leer el archivo id_rsa podemos iniciar sesión como root

20250905125316.png

Last updated