La vulnerabilidad podría permitir la ejecución remota de código si un atacante envía un flujo continuo de paquetes UDP especialmente diseñados a un puerto cerrado en un sistema de destino.
enlace
Entonces, si bien una gran cantidad de paquetes UDP con todos los bits establecidos en cero puede provocar un bloqueo, es improbable que resulte en la ejecución del código. Deben contener contenido escrito específicamente para explotar el problema.
Es un desbordamiento de contador de referencia según la misma fuente de Microsoft.
¿Qué es un contador de referencia?
Cuando un programa asigna un bloque de memoria, se puede usar un contador de referencia para administrarlo. Cada vez que una parte del código del programa quiere acceder a él, el contador se incrementa. Cada vez que esta parte del código se hace trabajando con el bloque de memoria, el contador disminuye. Cuando el contador llega a 0, nadie más está interesado en el bloque de memoria y se libera.
¿Qué es un desbordamiento de entero?
Los enteros son números que se usan para contar. Tienen un tamaño fijo en memoria de computadora. Por ejemplo, 32 bits o 64 bits. Así que, a diferencia de los enteros, como se sabe a partir de las matemáticas, existe el mayor número posible. Si agrega 1 a ese número, obtendrá un número muy negativo o 0.
En otras palabras, si agregas 1 una y otra vez, terminarás con 0.
¿Qué es una vulnerabilidad del contador de referencia?
Una vulnerabilidad del contador de referencia generalmente es causada por una ruta del programa que no logra disminuir el contador de referencia. Por lo tanto, el atacante puede incrementar el contador una y otra vez.
Como resultado, puede llevar el contador a 0 y más allá (consulte la sección anterior). Después de que el contador se desbordó y terminó en 1 de nuevo, activará la ruta normal del programa que disminuirá el contador.
Ahora el contador llegó a 0. 0 significa que ya nadie está interesado en el bloque de memoria, por lo que se liberará.
¿Cuál es la ruta de error en este contexto?
La ruta del programa que no logra disminuir el contador se usa cuando no hay servicio escuchando en el puerto UDP.
Es fácil concluir que se requiere un puerto UDP abierto para que la disminución final explote el problema. Microsoft, sin embargo, no mencionó esto. Además, declararon que el Firewall de Windows no ofrece protección contra este error. Por lo tanto, la conclusión es probablemente incorrecta.
¿Por qué liberar los bloques de memoria usados es algo malo?
Liberar memoria solo significa que está marcada como "disponible". Por lo tanto, alguien más, que solicita un bloque de memoria, puede obtenerlo. Pero el programa original aún piensa, es dueño del bloque y puede usarlo como quiera.
Así que terminamos con dos programas que usan el mismo bloque de memoria sin ser conscientes de los demás. Esto obviamente lleva a inconsistencias de datos.
Con un poco de mala suerte y un diseño especial, uno de estos programas puede hacer cosas malas al otro. Imagine que el otro programa está almacenando el código del programa, los punteros al código del programa o datos confiables que resultarán en punteros al código del programa en este bloque de memoria.
¿Es esto un riesgo real?
Sí. No es fácil explotar y probablemente se notará el envío de una cantidad tan grande de paquetes UDP a través de una conexión de Internet lenta. Pero es un problema real que necesita ser reparado.