Переполнение буфера в Toxcore, эксплуатируемое через отправку UDP-пакета

Kate

Administrator
Команда форума
В Toxcore, эталонной реализации P2P-протокола обмена сообщениями Tox, выявлена уязвимость (CVE-2021-44847), которая потенциально позволяет инициировать выполнение кода при обработке специально оформленного UDP-пакета. Уязвимости подвержены все пользователи приложений на базе Toxcore, в которых не отключён транспорт UDP. Для атаки достаточно отправить UDP-пакет, зная IP-адрес, сетевой порт и открытый DHT-ключ жертвы (данные сведения доступны публично в DHT, т.е. атака могла быть совершена на любого пользователя или узел DHT).

Проблема проявлялась в выпусках toxcore с 0.1.9 по 0.2.12 и устранена в версии 0.2.13. Из клиентских приложений обновление с устранением уязвимости пока выпустил только проект qTox. В качестве обходного пути защиты можно отключить использование UDP, оставив поддержку TCP.

Уязвимость вызвана переполнением буфера в функции handle_request(), возникающего из-за некорректного расчёта размера данных в сетевом пакете. В частности, длина зашифрованных данных определялась в макросе CRYPTO_SIZE, определённом как "1 + CRYPTO_PUBLIC_KEY_SIZE * 2 + CRYPTO_NONCE_SIZE", который в дальнейшем использовался в операции вычитания "length - CRYPTO_SIZE". Из-за отсутствия скобок в макросе вместо вычитания суммы всех значений выполнялось вычитание 1 и сложение остальных частей. Например, вместо "length - (1 + 32 * 2 + 24)" размер буфера рассчитывался как "length - 1 + 32 * 2 + 24", что приводило к перезаписи данных в стеке, находящихся за границей буфера.

 
Сверху