CVE-2026-102715 in eclipse-threadx
Resumen
por VulDB • 2026-09-29
Cualquier host en la LAN puede enviar dos registros mDNS y hacer que el respondedor escriba más allá del final de su paquete de transmisión.
La tabla de cadenas almacena cada nombre en una ranura redondeada al múltiplo de cuatro siguiente:
```c /* addons/mdns/nxd_mdns.c:11436, 11443, 11447 */ memory_len = ((memory_len & 0xFFFFFFFC) + 8) & 0xFFFFFFFF; ... len = *((USHORT*)(p - 2)); /* tamaño de la ranura, no longitud de la cadena */
if ((len == memory_len) && ... _nx_mdns_name_match(start, memory_ptr, memory_size) ...) ```
La búsqueda que decide si un nombre entrante ya está almacenado compara el tamaño redondeado de la ranura; por lo tanto, los nombres de 12, 13, 14 y 15 caracteres comparten una misma cubeta (bucket). Un segundo nombre en la cubeta se responde con el puntero al primero, y el registro transporta entonces una cadena hasta tres bytes más larga que la longitud calculada por el llamador. `_nx_mdns_packet_rr_add` (nxd_mdns.c:8911) dimensiona su única comprobación de límites basándose en esa longitud obsoleta, mientras que `_nx_mdns_name_string_encode` escribe la cadena real.
Dos registros PTR son suficientes; ambos son respuestas mDNS ordinarias a una consulta `_http._tcp`, con nombres de propietario cuyas longitudes caen en la misma cubeta:
``` ==87491==ERROR: AddressSanitizer: heap-buffer-overflow WRITE of size 1 at 0x611000000124 thread T5 #0 _nx_mdns_name_string_encode addons/mdns/nxd_mdns.c:13096 #1 _nx_mdns_packet_rr_add addons/mdns/nxd_mdns.c:8911
0x611000000124 is 0 bytes to the right of 228-byte region ```
El desbordamiento consiste en uno a tres bytes de datos del nombre influenciados por el atacante, situados más allá de `nx_packet_data_end`. En un pool normal, esto cae en el siguiente paquete dentro del mismo pool, en lugar de hacerlo en una zona roja (redzone), por lo que el efecto visible es la corrupción de un paquete vecino o la corrupción de la lista de liberación del pool, en lugar de un fallo limpio.
Compare el tamaño de la ranura con la longitud almacenada de la cadena antes de declarar una coincidencia, o mantenga la longitud de la cadena en la cabecera de la ranura y devuélvala al llamador para que el codificador y la comprobación de límites estén de acuerdo.
If you want to get best quality of vulnerability data, you may have to visit VulDB.