Cuanto más fiable es la defensa, más peligroso resulta un fallo en ella

El mecanismo de protección Samsung KNOX durante casi ocho años contuvo un error por el que una aplicación común podía corromper la memoria del núcleo de Android. La vulnerabilidad CVE-2026-20971 afectó a un amplio rango de teléfonos Galaxy, desde S9 hasta S25, incluyendo dispositivos de la serie A y modelos con procesadores Exynos y Qualcomm. Samsung cerró el problema en la actualización de seguridad de enero de 2026; sin embargo, los investigadores de publicaron los detalles solo ahora.
El error no estaba en el navegador, ni en una aplicación de mensajería ni en una app aislada, sino en PROCA, el subsistema propietario de Samsung para el control de la integridad de los procesos. PROCA forma parte de la plataforma KNOX y debe impedir la ejecución de programas no verificados. Dentro de PROCA funciona el componente FIVE, que supervisa a qué archivos y procesos confía el sistema.
Para cada proceso, FIVE almacena un objeto separado con datos sobre la integridad: el nivel de confianza actual, etiquetas, archivos y otros parámetros de servicio. El estado cambia durante el funcionamiento normal de Android, por ejemplo al iniciar una aplicación, crear un nuevo proceso o cargar un ejecutable en memoria. Cuantas más transiciones de este tipo haya, más difícil resulta liberar correctamente los datos antiguos y evitar que otra parte del núcleo acceda a un objeto ya eliminado.
Precisamente aquí apareció el clásico error de acceso a memoria tras su liberación. Android proporciona a las aplicaciones información sobre la integridad de los procesos a través del sistema de archivos virtual procfs. El manejador de la solicitud tomaba un puntero al objeto de integridad, pero no retenía el objeto en memoria durante la lectura.
En el código normal, el acceso a un objeto con tiempo de vida limitado debería verse más o menos así:
/*
* Esquema seguro: mientras la función lee el objeto,
* el contador de referencias impide que el núcleo libere la memoria.
*/
state = integrity_get(task);
if (state == NULL)
return;
read_integrity(state);
integrity_put(state);
En la sección vulnerable, el núcleo tomaba un puntero "crudo" y luego podía cambiar a otra tarea. Durante la pausa, el proceso objetivo alcanzaba a ejecutar otro programa. Android creaba para el proceso un nuevo objeto de integridad y liberaba el anterior. Cuando la primera operación continuaba, el código accedía a la dirección antigua en memoria, que ya podía pertenecer a un objeto completamente distinto.
/*
* Esquema simplificado del error: se obtuvo el puntero,
* pero el objeto no está protegido contra la liberación.
*/
state = task->integrity;
switch_to_another_task();
/* La memoria en la dirección state ya podría haber sido liberada. */
read_integrity(state);
Para un atacante, ese tipo de error es valioso porque la región de memoria liberada se puede intentar ocupar con otros datos. Los investigadores obtuvieron varios primitivos de corrupción de memoria: una fuga limitada de datos, la posibilidad de influir en operaciones de escritura aisladas y una vía para invocar una función mediante un puntero obsoleto. LucidBit Labs no publicó una cadena completa de compromiso del dispositivo, pero señaló que el conjunto de primitivos en teoría puede conducir a la ejecución de código en el núcleo y al control total del teléfono.
La explotación de CVE-2026-20971 no es tan sencilla. La ventana entre la obtención del puntero y la liberación de la memoria ocupa solo unas pocas instrucciones del procesador. El atacante debe coincidir con el raro momento de cambio de tareas, esperar a que se libere el objeto y forzar al núcleo a reutilizar la región de memoria deseada. Una dificultad adicional la causa una caché de memoria separada para los objetos de integridad: no basta con que el atacante rellene la memoria con datos arbitrarios.
En una de las rutas estudiadas, el puntero obsoleto podía provocar la invocación de una función a través de una dirección corrompida. Los núcleos modernos de Android están protegidos por el mecanismo de integridad del flujo de control, CFI. Antes de una llamada indirecta, CFI verifica si la función corresponde al tipo esperado. La sustitución del puntero por una dirección arbitraria en ese caso provoca que el núcleo se detenga, en lugar de transferir el control al atacante. Los investigadores describieron a CFI como una barrera eficaz que cerró la vía más obvia para comprometer el dispositivo.
Sin embargo, la protección no eliminó el propio error. Otros modos de acceder a memoria ya liberada permitían obtener resultados útiles para ataques posteriores. La conclusión principal del estudio es otra: los mecanismos de seguridad complejos amplían la superficie de ataque si añaden al núcleo una gran cantidad de código no estándar con una lógica compleja de gestión de memoria.
La vulnerabilidad es accesible localmente, por lo que para atacarla el atacante necesita que el propietario instale una aplicación maliciosa. El estudio no describe una intrusión remota a través de un sitio web o un mensaje. Los usuarios de Galaxy deberían comprobar el nivel de parches de seguridad de Android e instalar la actualización de enero de 2026 de Samsung o un paquete más reciente, si el modelo sigue recibiendo actualizaciones. Los propietarios de dispositivos sin soporte de actualizaciones deben ser especialmente cautelosos al instalar aplicaciones desde fuentes desconocidas.
El análisis técnico completo, que incluye el funcionamiento de FIVE y las causas del error de gestión de memoria, fue publicado por LucidBit Labs. La empresa confirmó el problema en los Galaxy S21, S22, S24 y A54, y también indicó que el error afectó a todas las versiones de Android verificadas y a ambas familias principales de procesadores móviles de Samsung.