/* Make IP string */ raddr = malloc(16); sprintf(raddr, "%d.%d.%d.%d", hentry->h_addr_list[0][0], hentry->h_addr_list[0][1], hentry->h_addr_list[0][2], hentry->h_addr_list[0][3]); raddr[15] = 0; |
Эта функция использует спецификатор форматной строки %d для преобразования IP адреса, который не совсем корректно работает с числами более 127. В результате, если будет осуществлено подключение с IP адреса x.199.x.x, этот адрес будет преобразован в x.-57.x.x.
Таким образом, чтобы вызвать повреждение динамической памяти и аварийно завершить работу приложения или выполнить произвольный код на системе, нужно иметь ПРАВИЛЬНЫЙ IP адрес :)
Подробное описание уязвимости: