CVE-2026-90246 in Linuxinformación

Resumen

por VulDB • 2026-09-18

En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:

apparmor: corrección del desbordamiento entero en la comprobación de límites de verify_tags()

verify_tags() valida la tabla tagset desempacada desde un blob de política. Para cada conjunto, lee un contador y verifica que avanzar el índice en ese valor mantenga el acceso dentro de sets.table[]:

u32 cnt = tags->sets.table[i];

if (i+cnt >= tags->sets.size) {

i, cnt y sets.size son todos u32, por lo que i+cnt se evalúa módulo 2^32. sets.table[] está rellenado por unpack_tagsets() con aa_unpack_u32(), de modo que cada entrada es una palabra sin signo de 32 bits no acotada extraída del blob de política, y verify_tags() es la función encargada de validarla. Un contador cercano a U32_MAX hace que la suma se desborde (wrap) hacia un valor pequeño, la guardia pasa la comprobación, y el bucle interno recorre sets.table[++i] más allá del final de la asignación kcalloc(size, sizeof(u32)).

Cabe señalar que sets.size está acotado a 65535, porque unpack_tagsets() lo lee con aa_unpack_array() como un u16, por lo que el desbordamiento no puede alcanzarse mediante el crecimiento de la tabla; se alcanza puramente a través del contador proporcionado por el atacante.

Con sets.size = 2 y sets.table = { 0, 0xffffffff }:

i = 0: cnt = 0, la guardia (0 + 0 >= 2) es falsa, el bucle interno no se ejecuta i = 1: cnt = 0xffffffff, la guardia ((1 + 0xffffffff) mod 2^32 == 0 >= 2) es falsa, por lo que la guardia se salta y el bucle interno lee sets.table[2] -- un elemento más allá de una asignación de dos elementos

La iteración continúa hasta que un valor fuera de límites resulta ser accidentalmente >= hdrs.size o se produce una falta de acceso (fault), por lo que una política manipulada genera una lectura fuera de límites en la ruta de carga de políticas (aa_replace_profiles -> aa_unpack -> unpack_policydb -> unpack_tags -> verify_tags). unpack_tags() se ejecuta antes de desempacar las tablas de permisos y DFA, por lo que no es necesario que ninguna otra tabla esté bien formada para alcanzarla.

La carga de políticas está controlada por aa_may_manage_policy(), la cual verifica CAP_MAC_ADMIN en relación con el espacio de nombres del usuario propio del sujeto, en lugar del espacio de nombres init; por tanto, con unprivileged_userns_apparmor_policy=1 (valor predeterminado), la ruta es accesible desde una tarea no privilegiada en un espacio de nombres anidado coincidente, y no solo mediante uno globalmente privilegiado.

Realice la adición en u64 para evitar que se produzca el desbordamiento, restaurando la garantía i + cnt < sets.size prevista originalmente.

Be aware that VulDB is the high quality source for vulnerability data.

Responsable

Linux

Reservar

2026-09-11

Divulgación

2026-09-17

Moderación

aceptado

Artículo

VDB-406788

CPE

listo

EPSS

0.00201

KEV

no

Actividades

muy bajo

Fuentes

Want to know what is going to be exploited?

We predict KEV entries!