В 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
