El CVE-2024-26581 es una vulnerabilidad crítica en el kernel de Linux que puede ser explotada para comprometer sistemas mediante una condición de use-after-free (UAF). Esta vulnerabilidad afecta al subsistema nftables en Linux, que se utiliza para manejar reglas de cortafuegos y filtrado de paquetes de red. El problema ocurre durante el manejo de elementos de conjuntos (sets) en la estructura de datos rbtree dentro de nftables. Bajo ciertas circunstancias, un atacante puede inducir una doble liberación de memoria (UAF), lo que permite manipular la memoria del kernel de manera arbitraria y potencialmente ejecutar código malicioso con privilegios de root.
¿Qué es un Exploit y un PoC (Proof of Concept)?
Un exploit es un conjunto de técnicas o scripts que permiten aprovechar una vulnerabilidad para ejecutar acciones no deseadas en un sistema afectado, como la obtención de privilegios o la ejecución de código arbitrario. En este caso, el exploit busca aprovechar el CVE-2024-26581 para comprometer un sistema Linux.
Un PoC (Proof of Concept) es una demostración de cómo una vulnerabilidad puede ser explotada. Generalmente, un PoC muestra los pasos mínimos necesarios para desencadenar la vulnerabilidad, sin necesariamente realizar un ataque completo. Para el CVE-2024-26581, la PoC publicada en GitHub muestra cómo manipular el subsistema de nftables para crear un escenario donde ocurre un use-after-free, permitiendo la ejecución de código arbitrario(
Segu-Info – Ciberseguridad desde 2000)(
GitHub).
Explicación Técnica del CVE-2024-26581
El CVE-2024-26581 explota un fallo en el manejo de transacciones dentro de nftables. Este fallo ocurre cuando un elemento de conjunto es eliminado, pero bajo ciertas condiciones específicas puede ser referenciado nuevamente. Esto permite a un atacante forzar el sistema a acceder a memoria previamente liberada, lo que lleva a un comportamiento impredecible o incluso a la ejecución de código arbitrario(
Para aprovechar la vulnerabilidad, se sigue un proceso técnico en el que el atacante:
- Inserta un conjunto de elementos en la estructura de datos nftables.
- Provoca un error que desencadena la reversión de transacciones (rollback) en nftables, lo que libera un bloque de memoria dos veces.
- Manipula la memoria liberada para controlar cómo se usa en el kernel.
- Ejecuta un código malicioso al inyectar instrucciones dentro del flujo del kernel.
La vulnerabilidad afecta múltiples versiones del kernel de Linux, pero algunas distribuciones como Ubuntu y Debian ya han lanzado parches para mitigar el problema. Se recomienda actualizar a versiones superiores del kernel, como la 6.8-rc4 o superiores, que corrigen esta vulnerabilidad(
Segu-Info – Ciberseguridad desde 2000)(
Uso de la PoC en la práctica
El PoC del CVE-2024-26581 se encuentra en GitHub y muestra los pasos para explotar esta vulnerabilidad. A continuación, un paso a paso simplificado de cómo se ejecutaría el exploit:
- Preparar el entorno: Se compila y configura un entorno vulnerable con una versión afectada del kernel de Linux.
- Insertar elementos en la tabla: El atacante introduce elementos en la tabla nftables con los flags
NFTA_SET_ELEM_EXPIRATION
yNFTA_SET_ELEM_TIMEOUT
. - Provocar la vulnerabilidad: Se manipulan los elementos de la tabla de manera que se desencadena la condición de use-after-free.
- Controlar la memoria: Se utiliza el heap spraying para llenar la memoria liberada con datos controlados, permitiendo modificar las estructuras de datos internas.
- Ejecutar código arbitrario: Se ejecuta un ataque de ROP (Return Oriented Programming) para obtener el control total del sistema y escalar privilegios hasta obtener acceso de root(
- GitHub)(
- Hendry Adrian).
Mitigaciones
Para mitigar el impacto de esta vulnerabilidad, es crucial actualizar el kernel a una versión parcheada, como la 6.8-rc4 o versiones posteriores. También se recomienda implementar medidas de seguridad adicionales, como el uso de módulos de seguridad como SELinux, y monitorear la actividad sospechosa en torno a nftables en los sistemas afectados(
Puedes acceder al código PoC y más detalles técnicos en el repositorio de Google Security Research.
Para explotar la vulnerabilidad CVE-2024-26581 en un sistema Linux, se debe seguir un conjunto de pasos detallados que involucran la preparación del entorno, la inserción de elementos en las tablas de nftables, el desencadenamiento de la vulnerabilidad use-after-free (UAF), y el aprovechamiento del control de memoria para ejecutar código malicioso. Aquí te dejo un proceso paso a paso para realizar la explotación en una terminal Linux. Este ejemplo sigue la estructura del Proof of Concept (PoC) encontrado en el repositorio de GitHub de Google Security Research.
IMPORTANTE: Este tutorial es estrictamente con fines educativos. La explotación de vulnerabilidades en sistemas sin autorización es ilegal y antiética. Usa este conocimiento con responsabilidad.
Paso a paso para explotar CVE-2024-26581
1. Preparar el entorno vulnerable
Debes estar trabajando en una máquina que esté ejecutando una versión del kernel de Linux afectada por esta vulnerabilidad. Por ejemplo, versiones de Linux Kernel 6.0.x.
- Actualiza tu sistema a la versión afectada del kernel (si no estás ya en una):
sudo apt-get install linux-image-6.0.0
- Verifica la versión del kernel instalada:
bash uname -r
2. Configurar el sistema para permitir la ejecución del exploit
Asegúrate de que el subsistema nftables esté habilitado. Si no lo está, actívalo usando los siguientes comandos:
- Cargar el módulo de nftables:
sudo modprobe nftables
- Configura una regla básica para verificar que nftables está funcionando:
bash sudo nft add table inet filter sudo nft add chain inet filter input { type filter hook input priority 0 \; }
3. Obtener el PoC
Clona el repositorio que contiene el exploit y PoC del CVE-2024-26581:
git clone https://github.com/google/security-research.git
cd security-research/pocs/linux/kernelctf/CVE-2024-26581_lts_cos_mitigation
4. Compilar el exploit
Dependiendo del tipo de código del PoC, es probable que necesites compilar el archivo. Si el código está escrito en C, puedes usar gcc
para compilarlo:
gcc -o exploit CVE-2024-26581_exploit.c
5. Ejecutar el exploit
En este punto, ejecutas el exploit para desencadenar la vulnerabilidad:
- Ejecuta el exploit como root:
sudo ./exploit
- Si el exploit es exitoso, deberías obtener acceso a una shell de root (indicando que has elevado privilegios):
bash whoami # Salida esperada: root
6. Análisis y Heap Spraying
El exploit puede usar técnicas de heap spraying para llenar la memoria con datos controlados. El objetivo de este proceso es sobrescribir los punteros críticos en la memoria. El PoC, por ejemplo, manipula los punteros de nftables para acceder a memoria previamente liberada.
- Inserta elementos en las tablas para desencadenar el UAF (con los flags correctos):
sudo nft add element inet filter set_name { key_name . timeout 60s }
- Se eliminan y crean nuevamente los elementos para causar la condición de UAF:
bash sudo nft delete element inet filter set_name { key_name }
7. Escalar Privilegios
Una vez que has comprometido el sistema con el exploit y controlas la memoria del kernel, puedes ejecutar un ataque ROP (Return-Oriented Programming) para obtener control total sobre el sistema. Esto te permitirá escalar privilegios a root.
8. Verificación
Finalmente, verifica que tienes el acceso a root o has comprometido el sistema ejecutando:
id
# Salida esperada: uid=0(root) gid=0(root)
9. Mitigaciones
Después de explotar la vulnerabilidad, es importante parchear el sistema para evitar que otros puedan explotarlo. Asegúrate de que el kernel esté actualizado a una versión que no esté afectada por esta vulnerabilidad.
sudo apt-get update
sudo apt-get upgrade
Conclusión
Este es un procedimiento técnico complejo, y requiere conocimientos avanzados de seguridad informática y administración de sistemas. Para proteger tu entorno, siempre aplica los parches de seguridad más recientes y monitorea los sistemas en busca de actividad anómala. Explorar vulnerabilidades en sistemas sin autorización es ilegal y debe ser evitado.
Puedes encontrar más detalles técnicos sobre este PoC en GitHub(
GitHub)(