## https://sploitus.com/exploit?id=ABA9F7C7-1AFE-5C98-BDD1-779889D1629A
**🔴 CVE-2025-40271: Vulnerabilidad Crítica de Uso-After-Free en el Kernel de Linux**
---
### **🛡️ Detalles de la Vulnerabilidad**
El **CVE-2025-40271** es una **vulnerabilidad crítica de tipo Use-After-Free (UAF)** que afecta al sistema de archivos **`/proc`** del kernel de Linux. La falla reside en la función **`proc_readdir_de()`**, encargada de listar los contenidos de los directorios dentro de `/proc`.
#### **🔍 El Problema**
Cuando una **entrada de directorio (PDE)** es eliminada del árbol binario (rbtree) mediante **`rb_erase()`**, el kernel **no marcaba el nodo como vacío**. Esto genera un escenario peligroso:
- **Si un proceso está leyendo un directorio** (ej. `/proc/pid/net/dev_snmp6/`) mientras otro **elimina interfaces de red** (como dispositivos `tun`), el puntero puede quedar apuntando a **memoria ya liberada**.
- Al intentar acceder al siguiente nodo en el árbol, el kernel **utiliza memoria inválida**, provocando:
- **Kernel Panic** (caída del sistema).
- Posible **ejecución de código malicioso** (si un atacante explota la condición de carrera).
---
### **📊 Estado y Métricas**
| **Campo** | **Detalle** |
|---------------------|-----------------------------------------------------------------------------|
| **ID** | `CVE-2025-40271` |
| **Componente** | Kernel de Linux (`fs/proc`) |
| **Severidad** | **Alta** (aunque aún no calificada oficialmente por el NVD/NIST) |
| **Origen** | Detectado con **stress-ng** (casos `getdent` y `tun` simultáneos) |
| **NVD Status** | **No priorizado** para enriquecimiento (recursos limitados) |
---
### **🛠️ Solución (Parche)**
El equipo de desarrollo del kernel implementó un **parche crítico** que reemplaza el manejo del nodo por **`RB_CLEAR_NODE()`**. Esto garantiza que:
- Al borrar un nodo del árbol, **cualquier intento de lectura devuelva `NULL`** en lugar de un puntero a memoria liberada.
- **Evita el UAF** al invalidar correctamente el nodo.
#### **📌 Versiones del Kernel Parcheadas**
El parche ya está disponible en las siguientes ramas estables:
- **6.1.x**
- **6.6.x**
- **6.12.x**
- **6.13.x**
---
### **🔗 Referencias Oficiales (Git Kernel.org)**
Para revisar el código exacto del parche, consulta estos **commits**:
- [Commit `03de7ff`](https://git.kernel.org/stable/c/03de7ff197a3d0e17d0d5c58fdac99a63cba8110)
- [Commit `6f24827`](https://git.kernel.org/stable/c/6f2482745e510ae1dacc9b090194b9c5f918d774)
---
### **📜 Descripción Técnica (NIST)**
> *"In the Linux kernel, the following vulnerability has been resolved: **fs/proc: fix uaf in proc_readdir_de()**.*
> *PDE is erased from subdir rbtree through `rb_erase()`, but not set the node to EMPTY, which may result in UAF access. We should use `RB_CLEAR_NODE()` to set the erased node to EMPTY, then `pde_subdir_next()` will return `NULL` to avoid UAF access."*
#### **🔄 Pasos para Reproducir el Problema**
1. **Proceso 1**: Usa `getdent` para recorrer `/proc/pid/net/dev_snmp6/` (el puntero actual es `tun3`).
2. **Proceso 2**: En un **ventana de tiempo crítica**, desregistra dispositivos de red (`tun3` y `tun2`), eliminándolos del árbol.
- Primero se elimina `tun3`, luego `tun2` (liberado a la slab).
3. **Proceso 1**: Continúa el recorrido con `getdent`, pero **`pde_subdir_next()` devuelve `tun2` (ya liberado)**, causando **UAF**.
---
### **📊 Métricas y Enumeración de Debilidades**
| **CWE-ID** | **Nombre** | **Fuente** |
|------------|--------------------------------|------------|
| CWE-416 | **Use After Free** | NVD |
---
### **🔗 Enlaces Útiles**
| **URL** | **Descripción** |
|-------------------------------------------------------------------------|--------------------------------------------------|
| [NVD - CVE-2025-40271](https://nvd.nist.gov/vuln/detail/CVE-2025-40271) | Detalle oficial (aún sin puntuación CVSS) |
| [Kernel.org Commits](https://git.kernel.org/) | Código fuente de los parches |
---
**⚠️ Recomendación Final**:
Si utilizas **kernel versiones 6.1.x, 6.6.x, 6.12.x o 6.13.x**, **actualiza inmediatamente** a una versión parcheada. Si no es posible, considera aplicar los commits manualmente o restringir el acceso a `/proc` mediante políticas de seguridad (ej. `chroot`, SELinux).