Chemistry

Chemistry es una máquina Linux de dificultad fácil que muestra una vulnerabilidad de ejecución remota de código (RCE) en la biblioteca Python pymatgen (CVE-2024-23346) al cargar un archivo CIF malicioso en el sitio web CIF Analyzer alojado en el objetivo. Después de descubrir y descifrar los hashes, nos autenticamos en el objetivo a través de SSH como usuario rosa. Para la escalada de privilegios, explotamos una vulnerabilidad de Path Traversal que conduce a una lectura de archivo arbitrario en una biblioteca Python llamada AioHTTP (CVE-2024-23334) que se utiliza en la aplicación web que se ejecuta internamente para leer el indicador raíz.


Reconnaissance

Realizaremos un reconocimiento con Nmap para ver los puertos que están expuestos en la máquina Chemistry. Este resultado lo almacenaremos en un archivo llamado allPorts.

A través de la herramienta de extractPorts, la utilizaremos para extraer los puertos del archivo que nos generó el primer escaneo a través de Nmap. Esta herramienta nos copiará en la clipboard los puertos encontrados.

Lanzaremos scripts de reconocimiento sobre los puertos encontrados y lo exportaremos en formato oN y oX para posteriormente trabajar con ellos. Verificamos que al parecer se trata de una máquina Ubuntu que dispone de una página en el puerto 5000 y del servicio SSH expuesto.

Procederemos a transformar el archivo generado targetedXML para transformar el XML en un archivo HTML para posteriormente montar un servidor web y visualizarlo.

Accederemos a http://localhost y verificaremos el resultado en un formato más cómodo para su análisis.

Web Enumeration

Procederemos a acceder al sitio web http://10.10.11.38:5000/, verificamos que es una página web que actúa como herramienta para analizar los archivos CIF (Crystallographic Information File) que sean subidos.

Tambiñen verificamos que disponemos de las opciones para iniciar sesión o registrarnos como usuario.

Un archivo CIF (Crystallographic Information File) es un formato de archivo de texto estándar para representar información cristalográfica, promulgado por la Unión Internacional de Cristalografía (IUCr).

Procederemos a acceder a la página de http://10.10.11.38:5000/register y procederemos a intentar registrarnos en el sitio web.

Revisaremos que somos redirigidos a la página http://10.10.11.38:5000/dashboard/, la cual verificamos que podemos subir un archivo CIF, además nos proporcionan un ejemplo de la estructura de un archivo CIF.

Procederemos a descargarnos el archivo CIF para analizar la estructura de este mismo.

Al verificar el contenido del archivo de ejemplo recién descargado, verificaremos la estructura de este mismo.

Procederemos a subir el archivo de ejemplo example.cif y verificamos que nos aparecen las opciones (View, Delete). Procederemos a visualizar el archivo CIF subido.

Verificamos que nos reddirige al siguiente resultado. Por lo que podemos apreciar, al parecer lo que ocurre por detrás de la herramienta es la deserialización de los datos para ser posteriormente mostrados en el siguiente resultado.

Arbitrary Code Execution in Pymatgen via Insecure Deserialization (CVE-2024-23346) [RCE]

Realizando una investigación sobre posibles vulnerabilidades para crear archivos CIFsmaliciosos, nos encontramos con el siguiente CVE.

También encontramos con el siguiente repositorio de GitHub que nos muestra un ejemplo de un archivo CIF malicioso que permite la ejecución de comandos remotos.

En este ejemplo, para probar que la vulnerabilidad existe y podemos aprovecharnos de ella, lo que realizaremos es que haga una solicitud con la herramienta wget a nuestro servidor web que montaremos posteriormente y haga una llamada a un archivo que no existe. Esto con el objetivo de verificar si recibimos en nuestro servidor web la solicitud que realiza el equipo víctima a nuestro servidor.

Procederemos a subir al sitio web el archivo CIF malicioso.

Antes de visualizar el contenido del archivo malicioso, nos levantaremos un servidor web con Python.

Procederemos a visualizar el archivo malicioso subido para revisar si se ejecuta el comando arbitrario.

En nuestro servidor web, verificamos que se ha recibido una solicitud GET desde el equipo víctima. Esto nos acaba confirmando de que podemos lograr ejecutar comandos remotos en la máquina víctima.

Sabiendo esto, nuestro objetivo será intentar ganar acceso a través de una Reverse Shell al equipo víctima.

Nos pondremos en escucha por un puerto, subiremos nuevamente el nuevo archivo CIF malicioso y al visualizarlo desde la página web, verificaremos que hemos recibido el acceso a la máquina víctima correctamente.

Initial Access

Confidential information exposed in a DB file

Revisando el directorio en el cual nos encontramos actualmente con el usuario adminapp, revisamos que existe un archivo de una base de datos.

Al verificar el contenido de la base de datos, nos encontramos con usuarios y lo que parecen ser contraseñas en formato hash.

Cracking hashes

Procederemos a crackear los hashes obtenidos, y verificamos que logramos crackear el hash del usuario rosa y obtenemos sus credenciales en texto plano.

Desde la consola que ya disponemos acceso, procederemos a migrar al usuario rosa accediendo con las credenciales obtenidas, verificamos que ganamos del acceso correctamente.

También verificamos que hemos ganado el acceso a la flag de user.txt

Privilege Escalation

Exploitaition Path Traversal (CVE-2024-23334)

Reviasndo los puertos que se encuentran abiertos en la máquina, verificamos que hay un proceso llamado localhost:http-alt.

Puerto 8080 (TCP): alternativa HTTP (http_alt) comúnmente utilizada para servidores proxy web y de almacenamiento en caché, o para ejecutar un servidor web como un usuario no root.

Al realizar un cURL al sitio web, verificamos que recibimos la respuesta por parte del servidor de lo que parece ser una web activa.

Revisaremos las cabeceras del sitio web en busca de información interesante. Entre la información encontrada, verificamos que utiliza aiohttp/3.9.1.

Realizando una búsqueda sobre posibles vulnerabilidades de la versión del servidor, nos encontramos con el siguiente CVE-2024-23334.

También nos encontramos con el siguiente repositorio que nos muestra un PoC (Proof of concept) de la explotación de esta vulnerabilidad de Path Traversal. Realizando la explotación, verificamos que hemos logrado obtener directamente la flag de root.txt.

Modificaremos el script original para que lea en este caso, el archivo /root/.ssh/id_rsa y así lograr obtener la clave privada del usuario root y conectarnos posteriormente por SS.

Volvemos a ejeuctar el exploit y verificamos que logramos visualizar el contenido correctamente.

Copiaremos la clave privada del usuario root en nuestro equipo local, le daremos los permisos correspondientes y procederemos a autenticarnos al equipo víctima con el usuario root haciendo uso de su clave privada.

Última actualización

¿Te fue útil?