cloudflareEscalacion de privilegios usando crontabs

Hemos identificado un script index.js en el directorio /srv/Backup_Invoices que se ejecuta bajo el usuario root, como lo indican los permisos de los archivos en el directorio Bk. Este script está diseñado para generar archivos de respaldo en formato JSON basados en consultas a la base de datos techshop_db y guardarlos en el directorio Bk con permisos de root.

El hecho de que este script sea ejecutado por el usuario root presenta una oportunidad significativa de escalación de privilegios, ya que si logramos modificar el contenido del script, podremos ejecutar comandos con privilegios de root.

Análisis del Script Original

El script original en JavaScript (Node.js) tiene la siguiente estructura:

╭─[/srv/Backup_Invoices]─[gerh@spartan]─[1]─[27]                               
╰─[:(] % ls -la Bk
total 3384
-rw-r--r-- 1 root root        3858 Sep 29 18:36 2024-9-29-6-36.json
-rw-r--r-- 1 root root        3858 Sep 29 18:39 2024-9-29-6-39.json

╭─[/srv/Backup_Invoices]─[gerh@spartan]─[0]─[28]                               
╰─[:)] % cat index.js
var fs = require('fs');
var mysql = require('mysql');
var moment = require('moment');

var connection = mysql.createConnection({
  host: "localhost",
  database:"techshop_db",
  user: "gerh",
  password: "0.0.0.0:3306/Tech"
});

connection.connect();

connection.query('SELECT * FROM detalle_factura', function(err, results, fields) {
    if(err) throw err;

    var date = moment().format('YYYY-M-D-h-mm');
    console.log(date)
    fs.writeFile('/srv/Backup_Invoices/Bk/'+date+'.json', JSON.stringify(results), function (err) {
      if (err) throw err;
      console.log('Saved!');
    });

    connection.end();
});

Este script se ejecuta de manera periódica o en momentos específicos y genera archivos de respaldo. El hecho de que estos archivos se creen con permisos de root muestra que el script es invocado con privilegios elevados, lo que nos abre una posibilidad clara de explotación.

Modificación del Script para Escalar Privilegios

Para aprovechar esta oportunidad, modificamos el script para que en lugar de generar archivos de respaldo, cree una reverse shell que nos otorgue acceso a la terminal con privilegios de root. Aquí está la versión modificada del script:

Para la transferencia del archivo y actualizar el contenido del script simplemente nos autenticamos sobre el servidor de WordPress e iniciamos el servicio de HTTP:

Este script crea una conexión desde el servidor hacia la dirección 172.16.1.12 en el puerto 7000, y establece una shell interactiva de bash que nos permitirá ejecutar comandos como root.

Ejecución Automática: Cuando el script index.js se ejecuta por el sistema (automáticamente), la reverse shell se conecta a nuestra máquina atacante, otorgándonos acceso como root en el servidor comprometido:

Conclusión

Este escenario ilustra una escalación de privilegios exitosa debido a la ejecución de un script que se ejecuta como root pero que puede ser modificado por usuarios con menos privilegios. Al modificar el script para generar una reverse shell, logramos obtener acceso total al sistema con privilegios de root, permitiéndonos controlar completamente el servidor.

Este tipo de vulnerabilidades, donde scripts con permisos elevados pueden ser alterados por otros usuarios, son comunes en entornos donde las configuraciones de permisos no están adecuadamente aseguradas. Es crucial que los administradores de sistemas protejan estos archivos críticos mediante permisos restrictivos y buenas prácticas de seguridad para evitar este tipo de explotaciones.

Last updated