Los kernel 2.0.x (recordemos que la versión actual es 2.2.x) son susceptibles de un ataque DoS (Denial of Service – denegación de servicio) cuando se envían paquetes IP de gran tamaño y estos incluyen opciones IP.
El problema es debido a que el kernel comprueba que el tamaño de los datos más la cabecera IP no supera los 65535 bytes, pero no comprueba que ese tamaño *más* el tamaño de las opciones IP no supere tampoco dicho valor. Un paquete IP, normalmente, no incluye opciones IP, pero un atacante malicioso sí puede hacerlo.
Los kernel 2.0.x imprimen varios mensajes de error y acaban realizando un reinicio de la máquina o «reboot». Los nuevos kernels 2.2.x imprimen errores «message too long» en la consola, como aviso, y no se ven afectados por el ataque. El ataque tampoco parece afectar a Windows ni a Solaris.
Gracias al hecho de que Linux es un producto con código abierto y cualquiera puede estudiar su funcionamiento y corregir cualquier problema, uno de los desarrolladores del Kernel public¢ un parche oficial a las pocas horas de hacerse poblico el ataque. El parche debe aplicarse a la versi¢n 2.0.38, que es la oltima versi¢n de la serie 2.0.x:
>>>>> diff -urN 2.0.38/net/ipv4/ip_output.c 2.0.38-ping-R/net/ipv4/ip_output.c — 2.0.38/net/ipv4/ip_output.c Thu Jun 18 23:48:22 1998 +++ 2.0.38-ping-R/net/ipv4/ip_output.c Tue Dec 14 23:02:43 1999 @@ -703,7 +703,13 @@ if (!sk->ip_hdrincl) { length += sizeof(struct iphdr); – if(opt) length += opt->optlen; + if(opt) + { + /* make sure to not exceed the max packet size */ + if (0xffff-length < opt->optlen) + return -EMSGSIZE; + length += opt->optlen; + } } if(length <= dev->mtu && !MULTICAST(daddr) && daddr!=0xFFFFFFFF && daddr!=dev->pa_brdaddr) <<<<<
En principio parece poco probable que se publique una versi¢n 2.0.39 del kernel para incluir este parche, ya que la versi¢n actual del kernel es la 2.2.x, y la serie 2.3.x est alcanzando ya el estado de «code freeze», lo que significa que 2.4.x aparecer dentro de muy poco.
Por lo tanto, todos los usuarios de viejos kernel 2.0.x deber¡an actualizar a 2.0.38 (si se empe_an en seguir usando kernel 2.0.x) y aplicar ‘ste y otros parches similares ellos mismos, sin esperar a que se distribuya una hipot’tica y poco probable 2.0.39. De todas formas la lista de correo de desarrollo del kernel linux todav¡a est discutiendo el tema.
M s informaci¢n:
ftp://ftp.us.kernel.org/pub/linux/kernel/people/andrea/patches/v2.0/2.0.38/ip-opt-1.gz
Jesos Cea Avi¢n
jcea@hispasec.com