Переповнення буфера в 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", що призводило до перезапису даних у стеку, що знаходяться за кордоном буфера.

Джерело: opennet.ru

Додати коментар або відгук