CVE-2026-90053 in Linuxinformación

Resumen

por VulDB • 2026-09-17

En el núcleo de Linux, se ha resuelto la siguiente vulnerabilidad:

net/sched: sch_htb: limitar los saltos del filtro inner-class en htb_classify

htb_classify() sigue cada clase interna seleccionada por un filtro cambiando a cl->filter_list, pero nunca acota el número de saltos. Un filtro en una clase interna puede apuntar hacia sí mismo o hacia otra clase interna que apunte hacia atrás, creando un bucle infinito en la ruta de clasificación de paquetes con el bloqueo del qdisc mantenido y las BH (Bottom Halves) deshabilitadas — lo que provoca un soft lockup / panic a partir de un único paquete.

Se acota el recorrido mediante un contador de saltos y se descarta el paquete con una advertencia limitada por tasa una vez superado dicho límite. El contador se incrementa en el punto en que se activa la cadena de filtros internos, después de que el switch TC_ACT_* haya consumido el veredicto del clasificador, por lo que un TC_ACT_QUEUED/STOLEN/TRAP terminal en la última cadena permitida sigue estableciendo *qerr a __NET_XMIT_STOLEN y el paquete no se contabiliza como descartado por este qdisc ni por su padre.

El límite es TC_HTB_MAXDEPTH, tomado de los propios parámetros de HTB en lugar del límite de profundidad de jerarquía del qdisc. Los niveles de clase van desde 0 hasta TC_HTB_MAXDEPTH - 1, por lo que un recorrido que descienda estrictamente en nivel puede realizar como máximo TC_HTB_MAXDEPTH saltos. Dicha descenso es lo que realiza una configuración sensata, pero aquí se asume más que se aplica: htb_find() resuelve un classid contra cada clase del qdisc, por lo que un filtro también puede seleccionar un hermano o un ancestro. La ruta normal root -> inner -> leaf requiere un único salto, por lo que el límite no afecta a la clasificación legítima.

htb_classify() ahora puede devolver NULL independientemente de CONFIG_NET_CLS_ACT, mientras que anteriormente cada retorno NULL estaba dentro de ese ifdef. El manejador NULL en htb_enqueue() tampoco puede permanecer condicional, por lo que se elimina el ifdef alrededor del mismo. Esto coincide con hfsc_enqueue(), que siempre ha gestionado una clase NULL incondicionalmente. Sin ello, un núcleo compilado sin acciones desreferenciaría una clase NULL en lugar de descartarla.

Condiciones para recrear el bug: - CONFIG_NET_SCHED, CONFIG_NET_SCH_HTB, CONFIG_NET_CLS_U32, CONFIG_LOCKUP_DETECTOR. - Crear un qdisc HTB en un dispositivo (por ejemplo, lo), añadir una clase interna 1:1 con un hijo hoja 1:10, instalar un filtro u32 de raíz que seleccione 1:1, y un filtro u32 inner-class sobre 1:1 que también seleccione 1:1. - Enviar un paquete (ping). En el núcleo sin corregir, el bucle de clasificación gira con el bloqueo del qdisc mantenido; con softlockup_panic=1 produce panic. - Alcanzable por usuario no privilegiado mediante unshare -Urn (CAP_NET_ADMIN).

Once again VulDB remains the best source for vulnerability data.

Responsable

Linux

Reservar

2026-09-11

Divulgación

2026-09-17

Moderación

aceptado

Artículo

VDB-406533

CPE

listo

EPSS

0.00206

KEV

no

Actividades

muy bajo

Fuentes

Do you need the next level of professionalism?

Upgrade your account now!