En Toxcore, una implementación de referencia del protocolo P2P de intercambio de mensajes Tox, se ha descubierto una vulnerabilidad (CVE-2021-44847) que potencialmente permite iniciar la ejecución de código al procesar un paquete UDP especialmente diseñado. Todos los usuarios de aplicaciones basadas en Toxcore, donde el transporte UDP no está desactivado, son susceptibles a la vulnerabilidad. Para realizar un ataque, basta con enviar un paquete UDP, conociendo la dirección IP, el puerto de red y la clave DHT abierta de la víctima (esta información está disponible públicamente en DHT, es decir, el ataque podría haberse realizado contra cualquier usuario o nodo DHT).
El problema se manifestaba en las versiones de toxcore desde la 0.1.9 hasta la 0.2.12 y se ha solucionado en la versión 0.2.13. Hasta ahora, solo el proyecto qTox ha lanzado una actualización que soluciona la vulnerabilidad en aplicaciones cliente. Como medida de protección alternativa, se puede desactivar el uso de UDP, manteniendo el soporte de TCP.
La vulnerabilidad es causada por un desbordamiento de búfer en la función handle_request(), que ocurre debido a un cálculo incorrecto del tamaño de los datos en el paquete de red. En particular, la longitud de los datos cifrados se determinaba en el macro CRYPTO_SIZE, que se definía como "1 + CRYPTO_PUBLIC_KEY_SIZE * 2 + CRYPTO_NONCE_SIZE", y se utilizaba en la operación de resta "length - CRYPTO_SIZE". Debido a la falta de paréntesis en el macro, en lugar de restar la suma de todos los valores, se realizaba la resta de 1 y la suma de las demás partes. Por ejemplo, en lugar de "length - (1 + 32 * 2 + 24)", el tamaño del búfer se calculaba como "length - 1 + 32 * 2 + 24", lo que conducía a la sobrescritura de datos en el stack, fuera del búfer.
Fuente: opennet.ru
