Saltar al contenido
CVE-2026-89551 Fuente: CVE.org Publicada · sin explotación confirmada

Vulnerabilidad de subdesbordamiento de entero en Linux kernel (SUNRPC)

Linux · Linux · Publicada en CVE.org el 11-09-2026 · Última actualización: 10-11-2026

Descripción

En el kernel de Linux, se resolvió la siguiente vulnerabilidad: SUNRPC: xdr_buf_trim: limitar buf->len para evitar subdesbordamiento xdr_buf_trim() recorta `len` bytes del final de un xdr_buf recorriendo los iovecs de tail, pages y head. Cada paso por sección usa min_t() para nunca quitar más bytes de los que contiene esa sección, pero el cálculo final en la etiqueta fix_len resta de buf->len el total de bytes realmente consumidos sin ningún límite: fix_len: buf->len -= (len - trim); Cuando quien llama ha fijado buf->len en un valor menor que la suma de los iov_len, (len - trim) puede superar buf->len y la resta sin signo da la vuelta hasta cerca de UINT_MAX. gss_krb5_unwrap_v2() llega a xdr_buf_trim() exactamente en ese estado: buf->head[0].iov_len -= GSS_KRB5_TOK_HDR_LEN + headskip; buf->len = len - (GSS_KRB5_TOK_HDR_LEN + headskip); xdr_buf_trim(buf, ec + GSS_KRB5_TOK_HDR_LEN + tailskip); buf->len es un valor pequeño derivado de los datos recibidos por la red, mientras que los iov_len están a escala de página, por lo que los bucles por sección consumen legítimamente muchos más bytes de los que registra buf->len. El buf->len desbordado se propaga luego como el límite autoritativo del flujo hacia todos los decodificadores XDR posteriores. Se corrige limitando el decremento para que buf->len no baje de cero: buf->len -= min_t(unsigned int, buf->len, len - trim); En la ruta normal, donde la suma de los iov_len es igual a buf->len, (len - trim) siempre es <= buf->len y el resultado es idéntico al anterior. Ningún llamador cambia su comportamiento fuera del caso de subdesbordamiento.

Qué hacer

Revisa si usas el producto afectado y en qué versión, y aplica la actualización o la mitigación que indique el aviso del fabricante. CISA no ha confirmado que se esté explotando; si eso cambia, esta ficha pasa a «explotada» y te avisamos en el boletín.

Versiones afectadas

  • Linux Afectadas: 4c190e2f913f038c9c91ee63b59cd037260ba353 y anteriores a a3d77bcd974b8625d16bddf448cb3a1b5e37049c · 4c190e2f913f038c9c91ee63b59cd037260ba353 y anteriores a fa16bbe987b47e771e52eeb1b4540f18d92496ac · 4c190e2f913f038c9c91ee63b59cd037260ba353 y anteriores a a924ac4c78afab71bf82641afa3b62e0c4a8b55e · 4c190e2f913f038c9c91ee63b59cd037260ba353 y anteriores a 4bf59cb0ea5b0ddfbc46a1dc2fa78fc8b9986ce4 · 4c190e2f913f038c9c91ee63b59cd037260ba353 y anteriores a e6267cccd7b05cc514e57f2160aa8db85f5c2701 · 4c190e2f913f038c9c91ee63b59cd037260ba353 y anteriores a ad0cce80d4af2f74674e8b635d97aa3880e83da8 · 4c190e2f913f038c9c91ee63b59cd037260ba353 y anteriores a 85e9602650e9df07190abe817cee3b4d9bc3df17 · 4c190e2f913f038c9c91ee63b59cd037260ba353 y anteriores a 3f491306dcb673ff5e78e1044ba450c58978774e
  • Linux Afectadas: 3.9 No afectadas: 5.10.270 · 5.15.221 · 6.1.188 · 6.6.157 · 6.12.109 · 6.18.50

Según el registro de la vulnerabilidad en CVE.org, tal como lo publicó el fabricante. Confirma tu versión exacta en el aviso del fabricante.

Referencias

Ver el texto original en inglés (CVE.org)

SUNRPC: xdr_buf_trim: clamp buf->len to avoid underflow

In the Linux kernel, the following vulnerability has been resolved: SUNRPC: xdr_buf_trim: clamp buf->len to avoid underflow xdr_buf_trim() trims `len` bytes from the tail of an xdr_buf by walking the tail, pages, and head iovecs. Each per-section step uses min_t() so it never removes more bytes than that section holds, but the final accounting at the fix_len label subtracts the total bytes actually consumed from buf->len without any clamp: fix_len: buf->len -= (len - trim); When the caller has set buf->len to a value smaller than the sum of the iov_lens, (len - trim) can exceed buf->len and the unsigned subtraction wraps to near UINT_MAX. gss_krb5_unwrap_v2() reaches xdr_buf_trim() in exactly that state: buf->head[0].iov_len -= GSS_KRB5_TOK_HDR_LEN + headskip; buf->len = len - (GSS_KRB5_TOK_HDR_LEN + headskip); xdr_buf_trim(buf, ec + GSS_KRB5_TOK_HDR_LEN + tailskip); buf->len is a small wire-derived value while the iov_lens are at page scale, so the per-section loops legitimately consume far more bytes than buf->len records. The wrapped buf->len then propagates as the authoritative stream bound into every downstream XDR decoder. Fix by clamping the decrement so buf->len bottoms out at zero: buf->len -= min_t(unsigned int, buf->len, len - trim); On the normal path where the iov_lens sum to buf->len, (len - trim) is always <= buf->len and the result is identical to before. No callers change behavior outside the underflow case.

Recibe el boletín cuando CISA agregue vulnerabilidades nuevas

Te escribimos solo cuando CISA agrega vulnerabilidades nuevas, ya traducidas: cada día que haya, o en un resumen los lunes. Confirmas por correo y te das de baja con un clic.

Frecuencia