Desbordamiento de búfer en Toxcore explotado mediante el envío de un paquete UDP

Toxcore, la implementación de referencia del protocolo de mensajería Tox P2P, tiene una vulnerabilidad (CVE-2021-44847) que podría desencadenar la ejecución de código al procesar un paquete UDP especialmente diseñado. Todos los usuarios de aplicaciones basadas en Toxcore que no tienen el transporte UDP deshabilitado se ven afectados por la vulnerabilidad. Para atacar basta con enviar un paquete UDP conociendo la dirección IP, el puerto de red y la clave DHT pública de la víctima (esta información está disponible públicamente en DHT, es decir, el ataque podría realizarse a cualquier usuario o nodo DHT).

El problema estuvo presente en las versiones de toxcore 0.1.9 a 0.2.12 y se solucionó en la versión 0.2.13. Entre las aplicaciones cliente, hasta ahora sólo el proyecto qTox ha lanzado una actualización que elimina la vulnerabilidad. Como solución alternativa de seguridad, puede desactivar UDP manteniendo la compatibilidad con TCP.

La vulnerabilidad es causada por un desbordamiento del búfer en la función handle_request(), que ocurre debido a un cálculo incorrecto del tamaño de los datos en un paquete de red. Específicamente, la longitud de los datos cifrados se determinó en la macro CRYPTO_SIZE, definida como "1 + CRYPTO_PUBLIC_KEY_SIZE * 2 + CRYPTO_NONCE_SIZE", que se utilizó posteriormente en la operación de resta "longitud - CRYPTO_SIZE". Debido a la ausencia de paréntesis en la macro, en lugar de restar la suma de todos los valores, restó 1 y sumó las partes restantes. Por ejemplo, en lugar de "longitud - (1 + 32 * 2 + 24)", el tamaño del búfer se calculó como "longitud - 1 + 32 * 2 + 24", lo que resultó en la sobrescritura de datos en la pila más allá del límite del búfer.

Fuente: opennet.ru

Añadir un comentario