04.07.2022

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

В 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», что приводило к перезаписи данных в стеке, находящихся за границей буфера.

Источник.