Recientemente dieron a conocer la noticia sobre la identificación de varias vulnerabilidades crĆticas en las pilas TCP de Linux y FreeBSD que le permite a un atacante el poder iniciar de forma remota una falla del kernel o causar un consumo excesivo de recursos al procesar paquetes TCP especialmente diseƱados (paquete de la muerte).
Los problemas son causados por errores en los manejadores del tamaƱo mƔximo del bloque de datos en el paquete TCP (MSS, TamaƱo de segmento mƔximo) y el mecanismo para el reconocimiento selectivo de conexiones (SACK, Reconocimiento selectivo de TCP).
¿Qué es un reconocimiento selectivo?
El reconocimiento selectivo de TCP (SACK) es un mecanismo donde el receptor de datos puede informar al remitente sobre todos los segmentos que se han aceptado con Ʃxito.
Esto permite que el remitente retransmita los segmentos de la secuencia que faltan de su conjunto ābien conocidoā. Cuando TCP SACK estĆ” deshabilitado, se requiere un conjunto mucho mayor de retransmisiones para retransmitir una secuencia completa.
En el kernel de Linux, los problemas se corrigen en las versiones 4.4.182, 4.9.182, 4.14.127, 4.19.52 y 5.1.11. La solución para FreeBSD estÔ disponible como un parche .
Las actualizaciones de paquetes del nĆŗcleo se publican para Debian , RHEL , SUSE / openSUSE , ALT , Ubuntu , Fedora y Arch Linux .
CVE-2019-11477 (SACK Panic)
El problema se manifiesta en los kernels de Linux a partir de 2.6.29 y le permite provocar una caĆda del kernel (panic) al enviar una serie de paquetes de SACK debido a la aparición de un desbordamiento de enteros en el controlador.
Para un ataque, es suficiente establecer el valor de MSS en 48 bytes para una conexión TCP y enviar una secuencia de una determinada manera de paquetes SACK dispuestos.
La esencia del problema es que la estructura tcp_skb_cb ( Socket Buffer ) estÔ diseñada para almacenar 17 fragmentos («define MAX_SKB_FRAGS (65536 / PAGE_SIZE + 1) => 17»).
En el proceso de envĆo de un paquete, se coloca en la cola de envĆo y tcp_skb_cb almacena detalles sobre el paquete, como el nĆŗmero de secuencia, las banderas, asĆ como los campos Ā«tcp_gso_segsĀ» y Ā«tcp_gso_sizeĀ», que se utilizan para enviar información de segmentación al controlador (TSO, Segment Segment Descargar) para procesar segmentos en el lado de la tarjeta de red.
Los fragmentos se guardan cuando se produce una pérdida de paquete o la necesidad de una retransmisión selectiva de paquetes, si SACK estÔ habilitado y TSO es compatible con el controlador.
Como solución para la protección, puede deshabilitar el procesamiento de SACK o bloquear las conexiones con un MSS pequeño (solo funciona cuando configura sysctl net.ipv4.tcp_mtu_probing a 0 y puede romper algo de normal) con bajo MSS).
CVE-2019-11478 (SACK Slowness)
Este fallo provoca una interrupción del mecanismo SACK (cuando se utiliza el kernel de Linux en 4.15) o un consumo excesivo de recursos.
El problema se manifiesta cuando se procesan paquetes SACK especialmente diseñados que pueden utilizarse para fragmentar la cola de retransmisión (retransmisión de TCP). Las soluciones para la protección son similares a las vulnerabilidades anteriores
CVE-2019-5599 (SACK Slowness)
Permite provocar la fragmentación del mapa de paquetes enviados al procesar una secuencia SACK especial dentro de una sola conexión TCP y provocar la ejecución de una operación de búsqueda de lista con uso intensivo de recursos.
El problema se manifiesta en FreeBSD 12 con el mecanismo de detección de pérdida de paquetes RACK. Como solución alternativa, puede deshabilitar el módulo RACK (no se carga de forma predeterminada, se desactiva especificando sysctl net.inet.tcp.functions_default = freebsd)
CVE-2019-11479
El fallo permite que un atacante puede hacer que el kernel de Linux divida las respuestas en varios segmentos TCP, cada uno de los cuales incluye solo 8 bytes de datos, lo que puede provocar un aumento significativo del trÔfico, un aumento en la carga de la CPU y un canal de comunicación obstruido.
AdemƔs, consume recursos adicionales (potencia de procesamiento del procesador y la tarjeta de red).
Este ataque requiere esfuerzos continuos por parte del atacante y los impactos terminarƔn poco despuƩs de que el atacante deje de enviar trƔfico.
Mientras este ataque esté en curso, el sistema se ejecutarÔ a una capacidad reducida, lo que provocarÔ una denegación de servicio para algunos usuarios.
Un usuario remoto puede desencadenar este problema estableciendo el tamaƱo mĆ”ximo de segmento (MSS) de una conexión TCP en su lĆmite mĆ”s bajo (48 bytes) y enviando una secuencia de paquetes SACK especialmente diseƱados.
Como solución alternativa, se recomienda bloquear las conexiones con MSS bajo.